From d4ee4909d5706534a366ac46f049a7a91c5d9efc Mon Sep 17 00:00:00 2001 From: Phil Date: Sun, 8 Jan 2023 16:00:55 +0100 Subject: [PATCH] feat(rotate): add new way to rotate the led matrix closes #3 --- frontend/package-lock.json | 1749 ++++++++--------- frontend/package.json | 12 +- frontend/src/app.css.ts | 1 - frontend/src/app.tsx | 44 +- frontend/src/components/LedMatrix.tsx | 43 +- .../src/{Creator.css.ts => creator.css.ts} | 0 frontend/src/{Creator.tsx => creator.tsx} | 2 +- frontend/src/helpers.ts | 52 +- frontend/src/main.tsx | 2 +- include/screen.h | 58 +- src/screen.cpp | 119 +- src/webgui.cpp | 1168 +++++------ src/websocket.cpp | 4 +- 13 files changed, 1544 insertions(+), 1710 deletions(-) rename frontend/src/{Creator.css.ts => creator.css.ts} (100%) rename frontend/src/{Creator.tsx => creator.tsx} (99%) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2b1654f..9ba5d28 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -15,14 +15,14 @@ }, "devDependencies": { "@gfx/zopfli": "^1.0.15", - "@preact/preset-vite": "^2.4.0", + "@preact/preset-vite": "^2.5.0", "@vanilla-extract/css": "^1.9.2", "@vanilla-extract/vite-plugin": "^3.7.0", - "sass": "^1.56.1", - "terser": "^5.15.1", - "typescript": "^4.9.3", - "vite": "^3.2.4", - "vite-plugin-singlefile": "^0.13.1" + "sass": "^1.57.1", + "terser": "^5.16.1", + "typescript": "^4.9.4", + "vite": "^4.0.4", + "vite-plugin-singlefile": "^0.13.2" } }, "node_modules/@ampproject/remapping": { @@ -51,34 +51,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -90,12 +90,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.3.tgz", - "integrity": "sha512-Wl5ilw2UD1+ZYprHVprxHZJCFeBWlzZYOovE4SDYLZnqCOD11j+0QzNeEWKLLTWM7nixrZEh7vNIyb76MyJg3A==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -130,14 +130,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -194,9 +195,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -204,9 +205,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -273,14 +274,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -301,9 +302,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -343,16 +344,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", + "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -377,45 +378,45 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/generator": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -424,9 +425,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -444,9 +445,9 @@ "dev": true }, "node_modules/@esbuild/android-arm": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", - "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.15.tgz", + "integrity": "sha512-JsJtmadyWcR+DEtHLixM7bAQsfi1s0Xotv9kVOoXbCLyhKPOHvMEyh3kJBuTbCPSE4c2jQkQVmarwc9Mg9k3bA==", "cpu": [ "arm" ], @@ -459,10 +460,154 @@ "node": ">=12" } }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.15.tgz", + "integrity": "sha512-OdbkUv7468dSsgoFtHIwTaYAuI5lDEv/v+dlfGBUbVa2xSDIIuSOHXawynw5N9+5lygo/JdXa5/sgGjiEU18gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.15.tgz", + "integrity": "sha512-dPUOBiNNWAm+/bxoA75o7R7qqqfcEzXaYlb5uJk2xGHmUMNKSAnDCtRYLgx9/wfE4sXyn8H948OrDyUAHhPOuA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.15.tgz", + "integrity": "sha512-AksarYV85Hxgwh5/zb6qGl4sYWxIXPQGBAZ+jUro1ZpINy3EWumK+/4DPOKUBPnsrOIvnNXy7Rq4mTeCsMQDNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.15.tgz", + "integrity": "sha512-qqrKJxoohceZGGP+sZ5yXkzW9ZiyFZJ1gWSEfuYdOWzBSL18Uy3w7s/IvnDYHo++/cxwqM0ch3HQVReSZy7/4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.15.tgz", + "integrity": "sha512-LBWaep6RvJm5KnsKkocdVEzuwnGMjz54fcRVZ9d3R7FSEWOtPBxMhuxeA1n98JVbCLMkTPFmKN6xSnfhnM9WXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.15.tgz", + "integrity": "sha512-LE8mKC6JPR04kPLRP9A6k7ZmG0k2aWF4ru79Sde6UeWCo7yDby5f48uJNFQ2pZqzUUkLrHL8xNdIHerJeZjHXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.15.tgz", + "integrity": "sha512-+1sGlqtMJTOnJUXwLUGnDhPaGRKqxT0UONtYacS+EjdDOrSgpQ/1gUXlnze45Z/BogwYaswQM19Gu1YD1T19/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.15.tgz", + "integrity": "sha512-mRYpuQGbzY+XLczy3Sk7fMJ3DRKLGDIuvLKkkUkyecDGQMmil6K/xVKP9IpKO7JtNH477qAiMjjX7jfKae8t4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.15.tgz", + "integrity": "sha512-puXVFvY4m8EB6/fzu3LdgjiNnEZ3gZMSR7NmKoQe51l3hyQalvTjab3Dt7aX4qGf+8Pj7dsCOBNzNzkSlr/4Aw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-loong64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", - "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.15.tgz", + "integrity": "sha512-ATMGb3eg8T6ZTGZFldlGeFEcevBiVq6SBHvRAO04HMfUjZWneZ/U+JJb3YzlNZxuscJ4Tmzq+JrYxlk7ro4dRg==", "cpu": [ "loong64" ], @@ -475,6 +620,182 @@ "node": ">=12" } }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.15.tgz", + "integrity": "sha512-3SEA4L82OnoSATW+Ve8rPgLaKjC8WMt8fnx7De9kvi/NcVbkj8W+J7qnu/tK2P9pUPQP7Au/0sjPEqZtFeyKQQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.15.tgz", + "integrity": "sha512-8PgbeX+N6vmqeySzyxO0NyDOltCEW13OS5jUHTvCHmCgf4kNXZtAWJ+zEfJxjRGYhVezQ1FdIm7WfN1R27uOyg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.15.tgz", + "integrity": "sha512-U+coqH+89vbPVoU30no1Fllrn6gvEeO5tfEArBhjYZ+dQ3Gv7ciQXYf5nrT1QdlIFwEjH4Is1U1iiaGWW+tGpQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.15.tgz", + "integrity": "sha512-M0nKLFMdyFGBoitxG42kq6Xap0CPeDC6gfF9lg7ZejzGF6kqYUGT+pQGl2QCQoxJBeat/LzTma1hG8C3dq2ocg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.15.tgz", + "integrity": "sha512-t7/fOXBUKfigvhJLGKZ9TPHHgqNgpIpYaAbcXQk1X+fPeUG7x0tpAbXJ2wST9F/gJ02+CLETPMnhG7Tra2wqsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.15.tgz", + "integrity": "sha512-0k0Nxi6DOJmTnLtKD/0rlyqOPpcqONXY53vpkoAsue8CfyhNPWtwzba1ICFNCfCY1dqL3Ho/xEzujJhmdXq1rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.15.tgz", + "integrity": "sha512-3SkckazfIbdSjsGpuIYT3d6n2Hx0tck3MS1yVsbahhWiLvdy4QozTpvlbjqO3GmvtvhxY4qdyhFOO2wiZKeTAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.15.tgz", + "integrity": "sha512-8PNvBC+O8X5EnyIGqE8St2bOjjrXMR17NOLenIrzolvwWnJXvwPo0tE/ahOeiAJmTOS/eAcN8b4LAZcn17Uj7w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.15.tgz", + "integrity": "sha512-YPaSgm/mm7kNcATB53OxVGVfn6rDNbImTn330ZlF3hKej1e9ktCaljGjn2vH08z2dlHEf3kdt57tNjE6zs8SzA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.15.tgz", + "integrity": "sha512-0movUXbSNrTeNf5ZXT0avklEvlJD0hNGZsrrXHfsp9z4tK5xC+apCqmUEZeE9mqrb84Z8XbgGr/MS9LqafTP2A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.15.tgz", + "integrity": "sha512-27h5GCcbfomVAqAnMJWvR1LqEY0dFqIq4vTe5nY3becnZNu0SX8F0+gTk3JPvgWQHzaGc6VkPzlOiMkdSUunUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@gfx/zopfli": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/@gfx/zopfli/-/zopfli-1.0.15.tgz", @@ -559,9 +880,9 @@ } }, "node_modules/@preact/preset-vite": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.4.0.tgz", - "integrity": "sha512-EiUMHuiCThuTuK+eH2r5uDg+CJbbt4aWJGePuszrHuXUpRv6WAeO4S+/DTJsEHtPtGmPRR3cLQ68N5097eOSRA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.5.0.tgz", + "integrity": "sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==", "dev": true, "dependencies": { "@babel/plugin-transform-react-jsx": "^7.14.9", @@ -575,7 +896,7 @@ }, "peerDependencies": { "@babel/core": "7.x", - "vite": "2.x || 3.x" + "vite": "2.x || 3.x || 4.x" } }, "node_modules/@prefresh/babel-plugin": { @@ -750,16 +1071,6 @@ "outdent": "^0.8.0" } }, - "node_modules/@vanilla-extract/integration/node_modules/esbuild": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", - "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - } - }, "node_modules/@vanilla-extract/private": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", @@ -812,9 +1123,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -909,9 +1220,9 @@ "dev": true }, "node_modules/caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "version": "1.0.30001442", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", + "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", "dev": true, "funding": [ { @@ -1013,408 +1324,61 @@ "cssesc": "bin/cssesc" }, "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-object-diff": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", - "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", - "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.13", - "@esbuild/linux-loong64": "0.15.13", - "esbuild-android-64": "0.15.13", - "esbuild-android-arm64": "0.15.13", - "esbuild-darwin-64": "0.15.13", - "esbuild-darwin-arm64": "0.15.13", - "esbuild-freebsd-64": "0.15.13", - "esbuild-freebsd-arm64": "0.15.13", - "esbuild-linux-32": "0.15.13", - "esbuild-linux-64": "0.15.13", - "esbuild-linux-arm": "0.15.13", - "esbuild-linux-arm64": "0.15.13", - "esbuild-linux-mips64le": "0.15.13", - "esbuild-linux-ppc64le": "0.15.13", - "esbuild-linux-riscv64": "0.15.13", - "esbuild-linux-s390x": "0.15.13", - "esbuild-netbsd-64": "0.15.13", - "esbuild-openbsd-64": "0.15.13", - "esbuild-sunos-64": "0.15.13", - "esbuild-windows-32": "0.15.13", - "esbuild-windows-64": "0.15.13", - "esbuild-windows-arm64": "0.15.13" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", - "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", - "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", - "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", - "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", - "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", - "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", - "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", - "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", - "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", - "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", - "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", - "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", - "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", - "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", - "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", - "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", - "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/esbuild-windows-32": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", - "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", - "cpu": [ - "ia32" - ], + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">=12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/esbuild-windows-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", - "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", - "cpu": [ - "x64" - ], + "node_modules/deep-object-diff": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", - "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", - "cpu": [ - "arm64" - ], + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" } }, "node_modules/escalade": { @@ -1553,9 +1517,9 @@ } }, "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", "dev": true }, "node_modules/is-binary-path": { @@ -1621,7 +1585,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/jsesc": { "version": "2.5.2", @@ -1636,9 +1601,9 @@ } }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -1683,16 +1648,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "yallist": "^3.0.2" } }, "node_modules/media-query-parser": { @@ -1736,9 +1698,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "node_modules/normalize-path": { @@ -1820,9 +1782,9 @@ } }, "node_modules/postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "funding": [ { @@ -1881,31 +1843,6 @@ "url": "https://opencollective.com/preact" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, "node_modules/react-intersection-observer": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz", @@ -1936,9 +1873,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "node_modules/require-like": { @@ -1968,11 +1905,10 @@ } }, "node_modules/rollup": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.5.tgz", - "integrity": "sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", + "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", "dev": true, - "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -1985,9 +1921,9 @@ } }, "node_modules/sass": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", - "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -2001,15 +1937,6 @@ "node": ">=12.0.0" } }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -2072,9 +1999,9 @@ } }, "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -2111,9 +2038,9 @@ } }, "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -2150,15 +2077,15 @@ } }, "node_modules/vite": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", - "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", "dev": true, "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", + "esbuild": "^0.16.3", + "postcss": "^8.4.20", "resolve": "^1.22.1", - "rollup": "^2.79.1" + "rollup": "^3.7.0" }, "bin": { "vite": "bin/vite.js" @@ -2199,9 +2126,9 @@ } }, "node_modules/vite-plugin-singlefile": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.1.tgz", - "integrity": "sha512-JS4pHPIEAdRtHPi1Aw4ro2KuzpSNR9R/7dFIgrOBwRSVIgbqtskTAidNm3bzlISf6VfGBYvkT+IOl4eJHYQ+lQ==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.2.tgz", + "integrity": "sha512-HAvrU9mxasNMn/YF0Hb9NjsWDstCWe4iLQ6IR5ppOiNMvXjcyqU3C9SDQ32xnonx3Y04JUGjD2bGiT6q0S9T8w==", "dev": true, "dependencies": { "micromatch": "^4.0.5" @@ -2210,24 +2137,52 @@ "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "rollup": "^3.2.5", - "vite": "^3.2.3" + "rollup": ">=2.79.0", + "vite": ">=3.2.0" } }, - "node_modules/vite/node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.15.tgz", + "integrity": "sha512-v+3ozjy9wyj8cOElzx3//Lsb4TCxPfZxRmdsfm0YaEkvZu7y6rKH7Zi1UpDx4JI7dSQui+U1Qxhfij9KBbHfrA==", "dev": true, + "hasInstallScript": true, "bin": { - "rollup": "dist/bin/rollup" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" }, "optionalDependencies": { - "fsevents": "~2.3.2" - } + "@esbuild/android-arm": "0.16.15", + "@esbuild/android-arm64": "0.16.15", + "@esbuild/android-x64": "0.16.15", + "@esbuild/darwin-arm64": "0.16.15", + "@esbuild/darwin-x64": "0.16.15", + "@esbuild/freebsd-arm64": "0.16.15", + "@esbuild/freebsd-x64": "0.16.15", + "@esbuild/linux-arm": "0.16.15", + "@esbuild/linux-arm64": "0.16.15", + "@esbuild/linux-ia32": "0.16.15", + "@esbuild/linux-loong64": "0.16.15", + "@esbuild/linux-mips64el": "0.16.15", + "@esbuild/linux-ppc64": "0.16.15", + "@esbuild/linux-riscv64": "0.16.15", + "@esbuild/linux-s390x": "0.16.15", + "@esbuild/linux-x64": "0.16.15", + "@esbuild/netbsd-x64": "0.16.15", + "@esbuild/openbsd-x64": "0.16.15", + "@esbuild/sunos-x64": "0.16.15", + "@esbuild/win32-arm64": "0.16.15", + "@esbuild/win32-ia32": "0.16.15", + "@esbuild/win32-x64": "0.16.15" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -2272,41 +2227,41 @@ } }, "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", "dev": true }, "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" } }, "@babel/generator": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.3.tgz", - "integrity": "sha512-Wl5ilw2UD1+ZYprHVprxHZJCFeBWlzZYOovE4SDYLZnqCOD11j+0QzNeEWKLLTWM7nixrZEh7vNIyb76MyJg3A==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "requires": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -2334,14 +2289,15 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" } }, @@ -2380,9 +2336,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -2390,9 +2346,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" } }, "@babel/helper-plugin-utils": { @@ -2438,14 +2394,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/highlight": { @@ -2460,9 +2416,9 @@ } }, "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true }, "@babel/plugin-syntax-jsx": { @@ -2484,16 +2440,16 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", + "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/types": "^7.20.7" } }, "@babel/plugin-transform-react-jsx-development": { @@ -2506,47 +2462,47 @@ } }, "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/generator": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -2561,16 +2517,156 @@ "dev": true }, "@esbuild/android-arm": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", - "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.15.tgz", + "integrity": "sha512-JsJtmadyWcR+DEtHLixM7bAQsfi1s0Xotv9kVOoXbCLyhKPOHvMEyh3kJBuTbCPSE4c2jQkQVmarwc9Mg9k3bA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.15.tgz", + "integrity": "sha512-OdbkUv7468dSsgoFtHIwTaYAuI5lDEv/v+dlfGBUbVa2xSDIIuSOHXawynw5N9+5lygo/JdXa5/sgGjiEU18gQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.15.tgz", + "integrity": "sha512-dPUOBiNNWAm+/bxoA75o7R7qqqfcEzXaYlb5uJk2xGHmUMNKSAnDCtRYLgx9/wfE4sXyn8H948OrDyUAHhPOuA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.15.tgz", + "integrity": "sha512-AksarYV85Hxgwh5/zb6qGl4sYWxIXPQGBAZ+jUro1ZpINy3EWumK+/4DPOKUBPnsrOIvnNXy7Rq4mTeCsMQDNA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.15.tgz", + "integrity": "sha512-qqrKJxoohceZGGP+sZ5yXkzW9ZiyFZJ1gWSEfuYdOWzBSL18Uy3w7s/IvnDYHo++/cxwqM0ch3HQVReSZy7/4Q==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.15.tgz", + "integrity": "sha512-LBWaep6RvJm5KnsKkocdVEzuwnGMjz54fcRVZ9d3R7FSEWOtPBxMhuxeA1n98JVbCLMkTPFmKN6xSnfhnM9WXQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.15.tgz", + "integrity": "sha512-LE8mKC6JPR04kPLRP9A6k7ZmG0k2aWF4ru79Sde6UeWCo7yDby5f48uJNFQ2pZqzUUkLrHL8xNdIHerJeZjHXg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.15.tgz", + "integrity": "sha512-+1sGlqtMJTOnJUXwLUGnDhPaGRKqxT0UONtYacS+EjdDOrSgpQ/1gUXlnze45Z/BogwYaswQM19Gu1YD1T19/w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.15.tgz", + "integrity": "sha512-mRYpuQGbzY+XLczy3Sk7fMJ3DRKLGDIuvLKkkUkyecDGQMmil6K/xVKP9IpKO7JtNH477qAiMjjX7jfKae8t4g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.15.tgz", + "integrity": "sha512-puXVFvY4m8EB6/fzu3LdgjiNnEZ3gZMSR7NmKoQe51l3hyQalvTjab3Dt7aX4qGf+8Pj7dsCOBNzNzkSlr/4Aw==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", - "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.15.tgz", + "integrity": "sha512-ATMGb3eg8T6ZTGZFldlGeFEcevBiVq6SBHvRAO04HMfUjZWneZ/U+JJb3YzlNZxuscJ4Tmzq+JrYxlk7ro4dRg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.15.tgz", + "integrity": "sha512-3SEA4L82OnoSATW+Ve8rPgLaKjC8WMt8fnx7De9kvi/NcVbkj8W+J7qnu/tK2P9pUPQP7Au/0sjPEqZtFeyKQQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.15.tgz", + "integrity": "sha512-8PgbeX+N6vmqeySzyxO0NyDOltCEW13OS5jUHTvCHmCgf4kNXZtAWJ+zEfJxjRGYhVezQ1FdIm7WfN1R27uOyg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.15.tgz", + "integrity": "sha512-U+coqH+89vbPVoU30no1Fllrn6gvEeO5tfEArBhjYZ+dQ3Gv7ciQXYf5nrT1QdlIFwEjH4Is1U1iiaGWW+tGpQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.15.tgz", + "integrity": "sha512-M0nKLFMdyFGBoitxG42kq6Xap0CPeDC6gfF9lg7ZejzGF6kqYUGT+pQGl2QCQoxJBeat/LzTma1hG8C3dq2ocg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.15.tgz", + "integrity": "sha512-t7/fOXBUKfigvhJLGKZ9TPHHgqNgpIpYaAbcXQk1X+fPeUG7x0tpAbXJ2wST9F/gJ02+CLETPMnhG7Tra2wqsQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.15.tgz", + "integrity": "sha512-0k0Nxi6DOJmTnLtKD/0rlyqOPpcqONXY53vpkoAsue8CfyhNPWtwzba1ICFNCfCY1dqL3Ho/xEzujJhmdXq1rg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.15.tgz", + "integrity": "sha512-3SkckazfIbdSjsGpuIYT3d6n2Hx0tck3MS1yVsbahhWiLvdy4QozTpvlbjqO3GmvtvhxY4qdyhFOO2wiZKeTAQ==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.15.tgz", + "integrity": "sha512-8PNvBC+O8X5EnyIGqE8St2bOjjrXMR17NOLenIrzolvwWnJXvwPo0tE/ahOeiAJmTOS/eAcN8b4LAZcn17Uj7w==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.15.tgz", + "integrity": "sha512-YPaSgm/mm7kNcATB53OxVGVfn6rDNbImTn330ZlF3hKej1e9ktCaljGjn2vH08z2dlHEf3kdt57tNjE6zs8SzA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.15.tgz", + "integrity": "sha512-0movUXbSNrTeNf5ZXT0avklEvlJD0hNGZsrrXHfsp9z4tK5xC+apCqmUEZeE9mqrb84Z8XbgGr/MS9LqafTP2A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.15.tgz", + "integrity": "sha512-27h5GCcbfomVAqAnMJWvR1LqEY0dFqIq4vTe5nY3becnZNu0SX8F0+gTk3JPvgWQHzaGc6VkPzlOiMkdSUunUA==", "dev": true, "optional": true }, @@ -2645,9 +2741,9 @@ } }, "@preact/preset-vite": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.4.0.tgz", - "integrity": "sha512-EiUMHuiCThuTuK+eH2r5uDg+CJbbt4aWJGePuszrHuXUpRv6WAeO4S+/DTJsEHtPtGmPRR3cLQ68N5097eOSRA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.5.0.tgz", + "integrity": "sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==", "dev": true, "requires": { "@babel/plugin-transform-react-jsx": "^7.14.9", @@ -2670,8 +2766,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.4.1.tgz", "integrity": "sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==", - "dev": true, - "requires": {} + "dev": true }, "@prefresh/utils": { "version": "1.1.3", @@ -2802,14 +2897,6 @@ "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", "outdent": "^0.8.0" - }, - "dependencies": { - "esbuild": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", - "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", - "dev": true - } } }, "@vanilla-extract/private": { @@ -2852,9 +2939,9 @@ } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -2865,8 +2952,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", "integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==", - "dev": true, - "requires": {} + "dev": true }, "base64-js": { "version": "1.5.1", @@ -2908,9 +2994,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "version": "1.0.30001442", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", + "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", "dev": true }, "chalk": { @@ -2995,9 +3081,9 @@ } }, "deep-object-diff": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.7.tgz", - "integrity": "sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", "dev": true }, "deepmerge": { @@ -3013,174 +3099,10 @@ "dev": true }, "esbuild": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", - "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.13", - "@esbuild/linux-loong64": "0.15.13", - "esbuild-android-64": "0.15.13", - "esbuild-android-arm64": "0.15.13", - "esbuild-darwin-64": "0.15.13", - "esbuild-darwin-arm64": "0.15.13", - "esbuild-freebsd-64": "0.15.13", - "esbuild-freebsd-arm64": "0.15.13", - "esbuild-linux-32": "0.15.13", - "esbuild-linux-64": "0.15.13", - "esbuild-linux-arm": "0.15.13", - "esbuild-linux-arm64": "0.15.13", - "esbuild-linux-mips64le": "0.15.13", - "esbuild-linux-ppc64le": "0.15.13", - "esbuild-linux-riscv64": "0.15.13", - "esbuild-linux-s390x": "0.15.13", - "esbuild-netbsd-64": "0.15.13", - "esbuild-openbsd-64": "0.15.13", - "esbuild-sunos-64": "0.15.13", - "esbuild-windows-32": "0.15.13", - "esbuild-windows-64": "0.15.13", - "esbuild-windows-arm64": "0.15.13" - } - }, - "esbuild-android-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", - "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", - "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", - "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", - "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", - "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", - "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", - "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", - "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", - "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", - "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", - "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", - "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", - "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", - "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", - "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", - "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", - "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", - "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", - "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.13", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", - "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", - "dev": true, - "optional": true + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", + "dev": true }, "escalade": { "version": "3.1.1", @@ -3278,9 +3200,9 @@ "dev": true }, "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", "dev": true }, "is-binary-path": { @@ -3331,7 +3253,8 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "jsesc": { "version": "2.5.2", @@ -3340,9 +3263,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "kolorist": { @@ -3372,13 +3295,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "yallist": "^3.0.2" } }, "media-query-parser": { @@ -3413,9 +3336,9 @@ "dev": true }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, "normalize-path": { @@ -3473,9 +3396,9 @@ "dev": true }, "postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "requires": { "nanoid": "^3.3.4", @@ -3498,36 +3421,15 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==" }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, "react-intersection-observer": { "version": "9.4.1", "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz", - "integrity": "sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw==", - "requires": {} + "integrity": "sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw==" }, "react-use-websocket": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-4.2.0.tgz", - "integrity": "sha512-ZovaTlc/tWX6a590fi3kMWImhyoWj46BWJWvO5oucZJzRnVVhYtes2D9g+5MKXjSdR7Es3456hB89v4/1pcBKg==", - "requires": {} + "integrity": "sha512-ZovaTlc/tWX6a590fi3kMWImhyoWj46BWJWvO5oucZJzRnVVhYtes2D9g+5MKXjSdR7Es3456hB89v4/1pcBKg==" }, "readdirp": { "version": "3.6.0", @@ -3539,9 +3441,9 @@ } }, "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "require-like": { @@ -3562,19 +3464,18 @@ } }, "rollup": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.5.tgz", - "integrity": "sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", + "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", "dev": true, - "peer": true, "requires": { "fsevents": "~2.3.2" } }, "sass": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", - "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -3582,15 +3483,6 @@ "source-map-js": ">=0.6.2 <2.0.0" } }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -3635,9 +3527,9 @@ "dev": true }, "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -3662,9 +3554,9 @@ } }, "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true }, "update-browserslist-db": { @@ -3678,38 +3570,65 @@ } }, "vite": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", - "integrity": "sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", "dev": true, "requires": { - "esbuild": "^0.15.9", + "esbuild": "^0.16.3", "fsevents": "~2.3.2", - "postcss": "^8.4.18", + "postcss": "^8.4.20", "resolve": "^1.22.1", - "rollup": "^2.79.1" + "rollup": "^3.7.0" }, "dependencies": { - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "esbuild": { + "version": "0.16.15", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.15.tgz", + "integrity": "sha512-v+3ozjy9wyj8cOElzx3//Lsb4TCxPfZxRmdsfm0YaEkvZu7y6rKH7Zi1UpDx4JI7dSQui+U1Qxhfij9KBbHfrA==", "dev": true, "requires": { - "fsevents": "~2.3.2" + "@esbuild/android-arm": "0.16.15", + "@esbuild/android-arm64": "0.16.15", + "@esbuild/android-x64": "0.16.15", + "@esbuild/darwin-arm64": "0.16.15", + "@esbuild/darwin-x64": "0.16.15", + "@esbuild/freebsd-arm64": "0.16.15", + "@esbuild/freebsd-x64": "0.16.15", + "@esbuild/linux-arm": "0.16.15", + "@esbuild/linux-arm64": "0.16.15", + "@esbuild/linux-ia32": "0.16.15", + "@esbuild/linux-loong64": "0.16.15", + "@esbuild/linux-mips64el": "0.16.15", + "@esbuild/linux-ppc64": "0.16.15", + "@esbuild/linux-riscv64": "0.16.15", + "@esbuild/linux-s390x": "0.16.15", + "@esbuild/linux-x64": "0.16.15", + "@esbuild/netbsd-x64": "0.16.15", + "@esbuild/openbsd-x64": "0.16.15", + "@esbuild/sunos-x64": "0.16.15", + "@esbuild/win32-arm64": "0.16.15", + "@esbuild/win32-ia32": "0.16.15", + "@esbuild/win32-x64": "0.16.15" } } } }, "vite-plugin-singlefile": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.1.tgz", - "integrity": "sha512-JS4pHPIEAdRtHPi1Aw4ro2KuzpSNR9R/7dFIgrOBwRSVIgbqtskTAidNm3bzlISf6VfGBYvkT+IOl4eJHYQ+lQ==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.2.tgz", + "integrity": "sha512-HAvrU9mxasNMn/YF0Hb9NjsWDstCWe4iLQ6IR5ppOiNMvXjcyqU3C9SDQ32xnonx3Y04JUGjD2bGiT6q0S9T8w==", "dev": true, "requires": { "micromatch": "^4.0.5" } }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 6c26e28..f9646e3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,13 +16,13 @@ }, "devDependencies": { "@gfx/zopfli": "^1.0.15", - "@preact/preset-vite": "^2.4.0", + "@preact/preset-vite": "^2.5.0", "@vanilla-extract/css": "^1.9.2", "@vanilla-extract/vite-plugin": "^3.7.0", - "sass": "^1.56.1", - "terser": "^5.15.1", - "typescript": "^4.9.3", - "vite": "^3.2.4", - "vite-plugin-singlefile": "^0.13.1" + "sass": "^1.57.1", + "terser": "^5.16.1", + "typescript": "^4.9.4", + "vite": "^4.0.4", + "vite-plugin-singlefile": "^0.13.2" } } diff --git a/frontend/src/app.css.ts b/frontend/src/app.css.ts index beb072c..43b4466 100644 --- a/frontend/src/app.css.ts +++ b/frontend/src/app.css.ts @@ -1,5 +1,4 @@ import { style } from '@vanilla-extract/css'; -import { multiplier } from './main.css'; export const wrapper = style({ display: 'grid', diff --git a/frontend/src/app.tsx b/frontend/src/app.tsx index ae9e250..fe3bbad 100644 --- a/frontend/src/app.tsx +++ b/frontend/src/app.tsx @@ -1,11 +1,7 @@ -import { useEffect, useState } from 'preact/hooks'; +import { useMemo, useState } from 'preact/hooks'; import { ReadyState } from 'react-use-websocket/dist/lib/constants'; import { useWebSocket } from 'react-use-websocket/dist/lib/use-websocket'; -import { - loadImageAndGetDataArray, - rotateArray, - rotateArrayByDegree, -} from './helpers'; +import { loadImageAndGetDataArray, rotateArray } from './helpers'; import { MODE } from './types'; import { controlColumn, wrapper } from './app.css'; import { LedMatrix } from './components/LedMatrix'; @@ -22,6 +18,11 @@ export function App() { const [leds, setLeds] = useState([...new Array(256)].fill(0)); const [mode, setMode] = useState(MODE.NONE); + const rotatedMatrix = useMemo( + () => rotateArray(indexMatrix, rotation), + [rotation, indexMatrix] + ); + const { sendMessage, readyState } = useWebSocket( `${ import.meta.env.PROD @@ -46,14 +47,10 @@ export function App() { setMode(Object.values(MODE)[json.mode as number]); setRotation(json.rotation); - setIndexMatrix([ - ...rotateArrayByDegree( - [...new Array(256)].map((_, i) => i), - json.rotation - ), - ]); + setIndexMatrix([...new Array(256)].map((_, i) => i)); + if (json.data) { - setLeds(rotateArrayByDegree(json.data, json.rotation)); + setLeds(json.data); } break; @@ -77,18 +74,17 @@ export function App() { }; const rotate = (turnRight = false) => { - if (turnRight) { - setRotation(rotation + 90); - } else { - setRotation(rotation - 90); - } + let currentRotation = rotation; - if (rotation <= -360 || rotation >= 360) { - setRotation(0); - } + currentRotation = turnRight + ? currentRotation > 3 + ? 1 + : currentRotation + 1 + : currentRotation <= 0 + ? 3 + : currentRotation - 1; - setLeds((state: number[]) => rotateArray(state, turnRight)); - setIndexMatrix((state: number[]) => rotateArray(state, turnRight)); + setRotation(currentRotation); sendMessage( JSON.stringify({ @@ -151,7 +147,7 @@ export function App() { { wsMessage('led', data); }} diff --git a/frontend/src/components/LedMatrix.tsx b/frontend/src/components/LedMatrix.tsx index a2234a6..91bb9f4 100644 --- a/frontend/src/components/LedMatrix.tsx +++ b/frontend/src/components/LedMatrix.tsx @@ -18,8 +18,6 @@ export function LedMatrix(props: Props) { const [isMouseDown, setMouseIsDown] = useState(false); const setLed = (index: number) => { - const rotatedIndex = props.indexData[index]; - const status = Number(!props.data[index]); const newState = props.data.map((led, i) => i === index ? Number(status) : led @@ -27,7 +25,7 @@ export function LedMatrix(props: Props) { if (props.onSetLed) { props.onSetLed({ - index: rotatedIndex, + index, status, }); } @@ -53,23 +51,28 @@ export function LedMatrix(props: Props) { setMouseIsDown(false); }} > - {props.data.map((status, index) => ( -
{ - setLed(index); - setMouseIsDown(true); - }} - onPointerEnter={() => { - if (isMouseDown) { - setLed(index); - } - }} - > -
-
- ))} + {props.data.map((_, index) => { + const rIndex = props.indexData[index]; + return ( +
{ + setLed(rIndex); + setMouseIsDown(true); + }} + onPointerEnter={() => { + if (isMouseDown) { + setLed(rIndex); + } + }} + > +
+
+ ); + })} ); diff --git a/frontend/src/Creator.css.ts b/frontend/src/creator.css.ts similarity index 100% rename from frontend/src/Creator.css.ts rename to frontend/src/creator.css.ts diff --git a/frontend/src/Creator.tsx b/frontend/src/creator.tsx similarity index 99% rename from frontend/src/Creator.tsx rename to frontend/src/creator.tsx index 7283cfe..cbe9955 100644 --- a/frontend/src/Creator.tsx +++ b/frontend/src/creator.tsx @@ -10,7 +10,7 @@ import { screenHeader, screensWrapper, wrapper, -} from './Creator.css'; +} from './creator.css'; import { chunkArray, matrixToHexArray } from './helpers'; import { connectionInformation } from './main.css'; diff --git a/frontend/src/helpers.ts b/frontend/src/helpers.ts index d3612f1..9cddf80 100644 --- a/frontend/src/helpers.ts +++ b/frontend/src/helpers.ts @@ -35,46 +35,30 @@ export const loadImageAndGetDataArray = (cb: (data: number[]) => void) => { }; }; -export const rotateArrayByDegree = (data: number[], degree: number) => { - const numRotations = degree / 90; - const isRight = numRotations > 0; - - [...new Array(Math.abs(numRotations))].forEach(() => { - data = rotateArray(data, isRight); - }); - - return data; -}; - -export const rotateArray = (matrix: number[], turnRight = false) => { +export const rotateArray = (matrix: number[], rotations: number) => { const SIZE = 16; const newState = [...matrix]; - for (let i = 0; i < SIZE; i++) { - for (let j = i; j < SIZE; j++) { - let temp = newState[i * SIZE + j]; - newState[i * SIZE + j] = newState[j * SIZE + i]; - newState[j * SIZE + i] = temp; - } - } - for (let i = 0; i < SIZE; i++) { - let col1 = 0; - let col2 = SIZE - 1; - while (col1 < col2) { - let index1 = i * SIZE + col1; - let index2 = i * SIZE + col2; - if (!turnRight) { - index1 = col1 * SIZE + i; - index2 = col2 * SIZE + i; - } + const swap = (arr: number[], i: number, j: number) => { + const temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + }; - let temp = newState[index1]; - newState[index1] = newState[index2]; - newState[index2] = temp; - col1++; - col2--; + for (let row = 0; row < SIZE / 2; row++) { + for (let col = row; col < SIZE - row - 1; col++) { + for (let r = 0; r < rotations; r++) { + swap(newState, row * SIZE + col, col * SIZE + (SIZE - 1 - row)); + swap( + newState, + row * SIZE + col, + (SIZE - 1 - row) * SIZE + (SIZE - 1 - col) + ); + swap(newState, row * SIZE + col, (SIZE - 1 - col) * SIZE + row); + } } } + return newState; }; diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index cfb1e5a..c487b6b 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,6 +1,6 @@ import { render } from 'preact'; import { App } from './app'; -import { Creator } from './Creator'; +import { Creator } from './creator'; import './main.css'; import { useEffect, useState } from 'preact/hooks'; diff --git a/include/screen.h b/include/screen.h index 80aa308..d24aee9 100644 --- a/include/screen.h +++ b/include/screen.h @@ -10,44 +10,28 @@ class Screen_ { private: Screen_() = default; - uint8_t defaultPositions[ROWS * COLS] = { - 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, - 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}; int findPosition(uint8_t count); + void rotate(); uint8_t renderBuffer_[ROWS * COLS]; - uint8_t positions[ROWS * COLS] = { - 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, - 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0, 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}; - uint8_t rotatedPositions[ROWS * COLS]; + uint8_t rotatedRenderBuffer_[ROWS * COLS]; uint8_t cache[ROWS * COLS]; + uint8_t positions[ROWS * COLS] = { + 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x4f, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, 0x49, 0x48, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x69, 0x68, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x8f, 0x8e, 0x8d, 0x8c, 0x8b, 0x8a, 0x89, 0x88, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xaf, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xa9, 0xa8, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc8, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe8, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}; public: static Screen_ &getInstance(); @@ -59,14 +43,14 @@ class Screen_ int currentRotation; void setRenderBuffer(const uint8_t *renderBuffer); - const uint8_t *getRenderBuffer() const; + uint8_t *getRenderBuffer(); + uint8_t *getRotatedRenderBuffer(); void clear(bool rerender = true); void drawLine(uint8_t line, bool isHorizontal); void setPixel(uint8_t x, uint8_t y, uint8_t value); void setPixelAtIndex(uint8_t index, uint8_t value); void render(); - void rotate(int degree = 90); void loadFromStorage(); void persist(); void cacheCurrent(); diff --git a/src/screen.cpp b/src/screen.cpp index dbc73d4..81ad5a4 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -10,7 +10,20 @@ void Screen_::setRenderBuffer(const uint8_t *renderBuffer) } } -const uint8_t *Screen_::getRenderBuffer() const +uint8_t *Screen_::getRotatedRenderBuffer() +{ + this->rotatedRenderBuffer_[ROWS * COLS]; + for (int i = 0; i < ROWS * COLS; i++) + { + this->rotatedRenderBuffer_[i] = this->renderBuffer_[i]; + } + + this->rotate(); + + return this->rotatedRenderBuffer_; +} + +uint8_t *Screen_::getRenderBuffer() { return this->renderBuffer_; } @@ -22,7 +35,8 @@ uint8_t Screen_::getBufferIndex(int index) void Screen_::loadFromStorage() { - // https://randomnerdtutorials.com/esp32-save-data-permanently-preferences/ +// https://randomnerdtutorials.com/esp32-save-data-permanently-preferences/ +#ifdef ENABLE_STORAGE storage.begin("led-wall", false); if (currentMode == NONE) { @@ -35,78 +49,24 @@ void Screen_::loadFromStorage() storage.getBytes("data", this->cache, ROWS * COLS); } storage.end(); +#endif } -void Screen_::rotate(int degree) +void Screen_::rotate() { - uint8_t SIZE = 16; - uint8_t tempPositions[ROWS * COLS]; - - bool turnRight = degree > 0; - int rotations = abs(floor(degree / 90)); - - this->currentRotation = degree; - if (this->currentRotation <= -360 || this->currentRotation >= 360) - { - this->currentRotation = 0; - } - - if (rotations == 0) + for (int row = 0; row < ROWS / 2; row++) { - this->currentRotation = 0; - - for (int i = 0; i < ROWS * COLS; i++) + for (int col = row; col < COLS - row - 1; col++) { - this->positions[i] = defaultPositions[i]; - } - } - else - { - for (int i = 0; i < ROWS * COLS; i++) - { - tempPositions[i] = this->defaultPositions[i]; - } - for (int r = 0; r < rotations; r++) - { - for (uint8_t i = 0; i < SIZE; i++) - { - for (uint8_t j = i; j < SIZE; j++) - { - uint8_t temp = tempPositions[i * SIZE + j]; - tempPositions[i * SIZE + j] = tempPositions[j * SIZE + i]; - tempPositions[j * SIZE + i] = temp; - } - } - - for (uint8_t i = 0; i < SIZE; i++) + for (int r = 0; r < this->currentRotation; r++) { - uint8_t col1 = 0; - uint8_t col2 = SIZE - 1; - while (col1 < col2) - { - uint8_t index1 = i * SIZE + col1; - uint8_t index2 = i * SIZE + col2; - if (turnRight) - { - index1 = col1 * SIZE + i; - index2 = col2 * SIZE + i; - } - - uint8_t temp = tempPositions[index1]; - tempPositions[index1] = tempPositions[index2]; - tempPositions[index2] = temp; - col1++; - col2--; - } + swap(this->rotatedRenderBuffer_[row * ROWS + col], this->rotatedRenderBuffer_[col * ROWS + (ROWS - 1 - row)]); + swap(this->rotatedRenderBuffer_[row * ROWS + col], this->rotatedRenderBuffer_[(ROWS - 1 - row) * ROWS + (ROWS - 1 - col)]); + swap(this->rotatedRenderBuffer_[row * ROWS + col], this->rotatedRenderBuffer_[(ROWS - 1 - col) * ROWS + row]); } } - - for (int i = 0; i < ROWS * COLS; i++) - { - this->positions[i] = tempPositions[i]; - } } -}; +} void Screen_::clear(bool rerender) { @@ -142,36 +102,23 @@ void Screen_::setPixel(uint8_t x, uint8_t y, uint8_t value) } } -int Screen_::findPosition(uint8_t count) -{ - uint8_t wantedpos = 0; - for (uint8_t i = 0; i < ROWS * COLS; i++) - { - if (count == this->positions[i]) - { - wantedpos = i; - break; - } - } - - return wantedpos; -} - void Screen_::render() { - for (uint8_t row = 0; row < ROWS; row++) + for (uint8_t idx = 0; idx < ROWS * COLS; idx++) { - for (uint8_t col = 0; col < COLS; col++) + digitalWrite(PIN_DATA, this->getRotatedRenderBuffer()[positions[idx]]); + digitalWrite(PIN_CLOCK, HIGH); + digitalWrite(PIN_CLOCK, LOW); + + // TODO: this is a workaround, because the loop runs infinite. Don't know why ... + if (idx >= (ROWS * COLS) - 1) { - digitalWrite(PIN_DATA, this->renderBuffer_[this->findPosition(row * 16 + col)]); - digitalWrite(PIN_CLOCK, HIGH); - digitalWrite(PIN_CLOCK, LOW); + break; } } digitalWrite(PIN_LATCH, HIGH); digitalWrite(PIN_LATCH, LOW); - delayMicroseconds(10); } void Screen_::cacheCurrent() diff --git a/src/webgui.cpp b/src/webgui.cpp index 02c9705..2da6578 100644 --- a/src/webgui.cpp +++ b/src/webgui.cpp @@ -4,590 +4,590 @@ #include -const uint32_t GUI_HTML_SIZE = 17477; -const uint8_t GUI_HTML[] PROGMEM = {31,139,8,0,0,0,0,0,2,3,76,16,197,98,44,33,236,190,95,65,185,60,157,161,238,108,221,221,219,35, -143,201,236,164,133,48,133,172,95,223,159,245,195,234,6,113,79,22,71,214,143,214,206,111,142,55,68,197,222,53, -27,139,47,76,56,67,45,45,129,100,179,33,196,98,5,166,120,17,158,69,15,108,132,173,76,76,192,90,94,156, -111,102,179,82,168,239,78,50,30,180,236,32,116,235,16,89,10,27,136,129,158,131,187,88,112,165,11,232,160,133, -236,85,249,43,144,144,209,184,44,89,227,64,143,229,163,95,197,28,210,221,179,244,242,34,56,45,19,247,29,164, -10,128,229,187,185,138,80,106,89,49,215,105,94,41,91,208,109,202,173,11,237,162,116,38,66,110,131,87,230,214, -244,148,195,127,73,149,129,56,51,93,72,193,131,154,206,199,243,49,101,83,82,198,185,220,35,229,207,242,71,89, -36,134,86,68,238,63,247,172,204,212,216,120,118,112,57,179,55,251,167,255,167,181,191,179,26,46,215,167,230,220, -201,206,13,218,211,233,41,52,247,237,187,65,167,84,212,53,105,115,148,238,171,99,211,159,234,170,57,183,235,47, -15,198,171,131,117,75,123,99,71,116,176,181,86,92,238,253,193,147,184,59,227,6,199,187,39,197,88,87,235,143, -142,54,134,148,66,196,22,146,150,134,2,245,125,104,127,206,19,161,132,24,33,214,193,161,125,30,138,66,246,97, -122,11,249,184,24,35,59,104,30,173,110,108,157,62,252,63,60,91,89,23,107,129,56,6,183,168,222,92,111,97, -201,70,172,89,112,191,6,45,125,40,218,14,228,247,17,154,141,145,178,77,150,49,208,207,95,67,27,40,177,0, -93,4,219,246,64,156,219,8,134,225,137,51,39,81,110,92,71,238,87,44,213,22,23,40,247,112,60,47,55,53, -88,214,139,237,100,93,241,85,150,115,170,20,23,37,194,18,99,10,84,72,208,178,98,234,223,211,141,38,40,202, -150,247,154,131,196,209,7,250,68,55,117,153,107,154,137,33,153,105,40,67,52,209,117,86,217,81,246,44,6,66, -7,129,14,171,122,77,14,80,245,199,162,229,183,70,240,34,73,135,82,202,247,231,162,20,45,147,147,226,249,164, -227,243,191,181,46,183,99,157,235,185,45,202,95,243,92,252,150,88,77,200,23,62,80,153,254,86,74,43,180,28, -25,189,57,185,169,109,66,71,191,155,85,186,124,213,165,16,90,253,174,199,196,16,19,45,241,156,195,249,50,203, -83,58,245,80,41,101,66,82,136,252,112,26,19,38,105,170,211,219,34,213,149,28,94,95,221,254,11,193,234,208, -38,139,91,244,243,32,56,60,10,111,226,56,8,232,64,59,41,195,130,207,33,188,92,240,222,177,141,6,103,80, -213,51,91,106,141,195,157,220,121,181,159,16,242,59,30,81,135,122,45,75,109,235,210,140,104,172,6,103,35,62, -157,85,30,152,64,253,218,251,110,196,208,39,58,236,220,56,8,132,221,207,84,111,71,130,14,15,188,139,97,253, -210,61,59,220,71,24,9,195,186,210,223,208,15,82,109,40,122,43,22,187,231,66,177,13,123,219,106,152,153,121, -94,167,122,24,117,222,253,199,113,138,85,102,135,209,135,197,10,149,254,141,225,135,96,119,100,244,103,109,231,75, -212,20,101,3,176,114,183,19,114,244,154,148,39,26,44,24,40,161,128,12,230,168,25,168,213,100,10,137,250,158, -204,51,219,232,55,17,71,85,179,104,76,179,110,126,35,155,114,189,108,80,39,105,83,108,170,102,101,230,141,177, -155,38,51,122,50,95,78,155,255,43,138,230,191,139,50,109,50,171,203,228,123,54,234,12,149,11,100,195,62,76, -60,205,73,134,198,147,122,98,166,202,226,163,179,198,222,180,21,217,139,96,45,138,191,78,74,20,141,188,107,100, -131,128,52,191,42,94,245,57,57,8,130,237,145,158,132,147,133,17,157,64,80,147,177,157,183,18,79,35,135,47, -122,139,58,157,199,133,50,147,249,52,26,162,58,220,60,227,121,141,15,55,162,16,77,202,133,115,198,42,204,181, -89,216,229,239,126,65,195,215,161,243,76,60,145,250,180,255,87,49,218,10,115,229,30,19,126,145,81,137,174,224, -207,136,188,40,128,48,102,80,18,83,231,249,64,217,48,213,207,73,157,219,251,178,88,87,178,59,236,135,245,215, -34,75,79,206,148,82,116,68,60,7,189,62,224,226,138,244,186,124,22,22,106,103,85,226,210,83,18,134,139,55, -55,43,10,85,68,71,138,52,172,137,72,84,2,234,40,42,0,53,19,101,240,244,244,18,17,5,28,248,247,44, -58,195,167,246,211,52,226,163,225,112,238,215,150,60,112,1,87,214,148,154,246,64,175,209,60,142,79,79,77,23, -132,4,138,38,216,235,227,213,160,169,131,160,29,136,90,66,189,63,127,138,217,150,17,223,231,117,73,142,225,120, -237,246,16,107,242,29,239,82,157,181,246,251,75,246,70,187,204,170,208,137,172,52,184,137,187,131,223,172,178,123, -216,87,134,69,103,224,83,90,217,17,126,122,138,113,23,95,64,143,16,21,133,41,35,213,111,119,168,97,121,250, -67,186,99,141,58,159,31,217,159,218,1,177,175,140,236,233,169,108,201,14,148,48,202,109,78,236,84,122,61,24, -92,208,158,157,155,180,10,59,226,76,58,164,1,157,135,217,238,5,216,118,129,4,102,180,231,167,29,63,207,203, -77,230,28,160,52,212,188,16,206,146,74,43,103,73,171,206,254,66,1,222,63,17,100,89,102,165,78,94,118,78, -34,62,101,207,130,99,58,180,24,16,78,138,174,238,222,152,212,145,114,25,174,235,10,13,136,195,193,10,151,203, -211,211,166,41,6,202,69,194,172,64,2,250,65,163,21,202,204,44,16,70,136,226,232,78,211,84,218,62,102,43, -93,212,86,138,85,47,60,86,98,159,167,244,200,177,80,165,23,89,106,28,99,34,182,66,120,4,246,143,158,83, -188,226,255,217,55,235,71,59,41,161,164,148,170,67,170,169,250,136,157,93,124,60,142,188,192,153,194,115,11,171, -180,36,50,244,208,32,230,138,136,222,147,84,134,8,138,82,229,2,19,118,33,29,148,42,232,121,250,3,30,196, -28,201,149,64,208,6,56,236,80,65,243,176,216,24,93,142,255,237,159,219,162,4,216,74,132,182,140,39,217,148, -67,214,64,22,163,31,21,18,220,134,132,71,97,160,157,233,129,202,130,96,139,155,82,238,100,79,105,51,209,191, -70,18,200,161,130,39,22,47,133,37,108,97,12,43,152,193,2,238,84,137,54,36,71,105,154,26,206,213,157,215, -44,169,220,208,58,73,150,162,179,165,63,173,223,75,15,28,109,172,28,220,36,157,42,14,73,92,177,56,67,155, -14,103,69,145,235,164,23,23,227,152,96,34,172,138,201,236,189,117,4,54,245,106,166,203,195,181,25,93,153,182, -143,207,124,81,0,247,226,177,140,126,45,203,100,27,102,149,123,139,177,68,176,53,188,251,84,19,141,119,61,112, -122,200,104,76,206,240,187,51,4,28,187,88,133,49,231,30,124,99,186,197,39,166,219,216,61,217,14,4,255,138, -104,210,37,31,154,41,3,142,136,50,244,68,67,179,248,74,108,213,29,203,143,117,137,163,166,212,150,94,52,35, -86,138,230,52,144,4,167,216,35,70,58,175,244,9,169,125,137,218,94,254,60,31,45,81,205,196,203,209,91,78, -229,31,35,246,78,80,158,26,71,243,214,153,100,247,32,80,60,216,170,109,211,204,15,60,2,86,106,204,206,188, -84,78,86,100,178,165,247,64,45,209,173,23,77,35,22,232,0,18,220,98,16,44,56,218,221,204,235,30,218,197, -165,211,198,188,105,86,184,40,91,103,94,197,109,158,158,33,185,153,90,29,189,121,89,16,20,136,252,136,228,161, -119,76,179,84,85,234,82,140,241,172,90,70,149,186,101,57,224,14,189,183,58,74,202,180,164,132,97,108,137,104, -36,18,101,60,133,163,170,87,187,12,20,1,86,234,85,108,49,118,188,195,107,53,131,84,157,143,210,111,223,70, -146,133,32,43,5,193,189,160,55,208,67,82,226,94,72,66,225,208,88,244,67,227,74,44,8,112,49,57,61,237, -94,189,216,188,228,216,220,103,53,12,82,206,213,144,33,177,34,8,178,159,133,167,151,33,61,81,170,98,146,145, -253,5,69,170,66,116,117,68,244,146,175,156,75,81,58,242,209,173,160,248,167,12,64,88,148,21,187,90,164,119, -159,46,14,242,165,85,182,105,48,224,217,102,250,88,4,227,162,56,140,54,45,227,99,185,148,41,239,208,2,214, -223,17,18,122,156,111,251,57,138,115,211,28,106,72,72,183,93,146,180,100,70,57,231,55,184,231,65,188,116,117, -128,113,183,78,214,52,60,45,122,118,150,58,242,96,4,144,29,184,128,194,237,48,89,175,181,73,185,126,45,36, -204,21,1,59,6,206,72,181,194,136,65,211,224,160,14,13,22,36,227,108,150,243,125,150,252,236,238,162,228,84, -253,160,180,88,35,119,233,194,15,239,43,234,90,42,93,218,127,212,72,72,11,148,148,200,103,254,154,221,95,6, -241,60,42,250,180,247,122,186,243,254,50,252,70,205,135,157,156,77,73,223,218,149,152,72,122,43,156,185,245,196, -250,4,108,226,225,48,242,233,116,208,133,70,211,36,161,213,149,21,86,198,38,50,167,195,245,219,112,207,230,124, -111,14,54,70,54,114,122,227,15,24,142,51,73,247,41,115,27,212,159,3,161,111,17,143,84,173,25,214,220,49, -224,18,125,248,35,120,169,134,67,9,165,139,38,75,117,118,41,77,16,208,136,142,124,231,225,193,2,194,185,138, -105,15,106,36,82,52,36,185,82,37,190,14,225,105,67,238,188,159,12,11,175,62,108,127,13,143,127,76,101,166, -44,234,95,88,69,109,204,58,79,230,90,124,63,79,214,104,30,253,155,239,196,82,2,237,217,226,186,216,232,242, -60,169,180,144,200,89,199,31,214,194,42,207,16,23,219,11,219,13,65,135,57,134,11,62,177,235,113,179,137,61, -205,208,76,96,226,178,105,52,117,233,151,175,218,88,106,171,181,209,40,21,100,241,38,194,76,128,6,109,219,170, -175,0,70,157,96,105,98,22,186,44,234,42,223,142,181,189,50,8,247,251,199,155,107,52,189,226,82,185,144,7, -226,189,209,23,9,241,251,38,90,74,148,112,57,148,251,173,138,62,15,144,220,213,176,199,128,122,84,71,13,53, -151,227,73,252,24,237,176,242,99,155,204,174,168,218,246,243,20,171,27,250,182,192,115,182,167,150,182,220,190,179, -167,198,232,164,163,54,76,118,243,132,154,97,44,120,119,199,114,122,211,236,131,124,240,67,225,59,8,190,225,219, -118,245,61,134,134,140,189,194,126,181,232,117,179,218,106,97,101,228,34,165,183,2,70,246,11,219,23,161,185,241, -64,211,112,205,126,58,248,49,21,54,212,164,245,184,125,83,21,223,239,107,55,71,176,206,254,40,214,131,240,5, -89,13,9,60,193,51,164,28,105,92,142,93,194,2,110,225,14,94,96,3,15,240,8,87,112,15,215,240,6,23, -138,51,123,63,47,226,82,175,149,147,189,190,109,212,43,34,49,216,82,30,193,179,114,151,128,155,105,160,241,146, -251,136,68,77,158,167,18,196,214,165,216,153,164,114,178,148,35,178,19,135,255,103,123,92,56,159,122,81,101,91, -48,109,20,98,95,248,102,237,17,129,144,74,54,217,82,53,48,133,7,181,141,55,241,134,97,195,215,36,175,117, -68,91,81,6,5,65,196,119,84,48,150,52,84,110,65,226,195,85,37,151,145,24,34,150,45,136,239,16,221,231, -34,8,46,194,110,37,44,93,247,16,51,234,88,209,87,180,11,241,2,15,50,18,253,181,165,91,131,113,95,99, -234,2,231,140,175,126,149,176,9,130,77,88,213,51,49,150,190,12,84,47,56,170,108,98,233,190,107,71,46,136, -199,94,80,245,224,10,30,163,50,87,69,113,71,228,150,150,84,51,227,160,154,225,128,43,33,229,32,42,180,136, -123,171,150,162,47,147,46,194,133,182,23,186,204,94,117,58,166,141,127,42,139,21,229,247,61,134,71,241,11,220, -107,184,161,148,144,243,34,124,77,72,188,120,96,9,151,202,23,187,11,79,22,86,146,207,249,135,142,194,135,37, -13,172,214,133,209,198,254,123,150,231,55,69,109,48,192,143,173,10,9,159,80,46,178,212,99,144,170,184,52,56, -178,47,187,91,228,143,159,235,5,35,226,242,139,227,61,232,185,70,156,22,242,15,108,178,155,12,92,61,188,167, -85,45,139,58,79,207,61,210,191,174,83,103,3,74,67,95,237,122,77,35,185,166,41,93,43,168,184,25,228,154, -239,147,135,41,6,119,160,131,22,148,204,204,62,245,67,114,239,161,74,248,24,195,47,110,252,194,227,16,105,95, -38,243,229,97,21,166,219,118,93,149,84,138,193,35,150,49,143,63,157,111,250,186,229,17,75,204,190,41,104,111, -242,136,53,174,247,96,224,93,6,15,130,167,22,78,118,217,251,168,222,189,166,142,46,239,85,116,220,67,60,114, -239,92,162,247,113,255,24,176,112,249,211,181,193,232,51,253,40,237,235,155,245,72,239,123,101,224,202,37,189,18, -238,213,25,252,9,169,198,155,175,111,52,111,36,184,10,130,43,81,74,216,42,159,89,188,161,189,153,247,169,67, -194,53,218,225,250,208,14,215,199,236,112,221,179,3,87,50,105,241,254,23,242,60,56,248,110,131,213,174,102,31, -11,130,211,211,251,159,191,252,141,28,29,128,120,203,80,224,185,218,248,156,41,185,239,33,185,112,249,39,147,240, -105,95,80,138,89,249,74,220,109,143,77,178,198,88,105,203,96,54,88,211,136,219,175,119,201,156,72,230,77,241, -33,182,120,47,249,118,119,205,209,217,246,193,241,182,189,90,186,102,127,11,51,97,224,176,71,121,147,241,91,52, -121,155,126,186,128,97,204,223,192,202,143,23,227,23,78,15,119,109,100,94,42,122,58,88,14,80,141,22,97,19, -241,233,146,32,56,8,254,88,244,67,182,23,202,50,226,73,231,224,22,250,133,66,206,69,130,59,46,172,187,91, -23,143,217,142,182,56,226,47,24,232,84,174,234,126,165,146,91,109,157,161,6,103,62,196,106,87,55,143,198,63, -107,239,114,99,254,144,35,158,84,61,25,83,131,57,236,23,75,20,7,79,74,13,6,68,104,27,63,133,121,49, -79,114,42,16,137,120,244,87,248,124,10,233,131,176,187,242,177,32,82,79,64,116,156,78,218,15,16,189,239,180, -62,149,19,178,175,88,62,252,58,71,253,0,181,101,98,41,71,86,101,241,241,31,239,110,199,194,253,122,138,63, -158,110,54,155,112,243,87,97,81,46,190,255,114,118,118,246,157,36,135,173,140,142,35,138,45,44,209,35,130,96, -41,161,102,43,231,100,180,254,193,214,248,92,54,77,78,95,187,209,15,19,158,138,118,178,220,223,74,181,170,131, -160,253,117,193,178,243,241,207,109,240,172,68,103,166,166,153,203,240,139,250,28,82,181,252,114,111,144,179,194,122, -150,91,99,253,65,54,70,11,218,48,241,86,170,250,198,92,79,250,59,104,139,208,160,185,166,234,195,42,151,97, -35,145,54,205,179,164,42,17,255,63,7,65,74,46,111,87,168,136,231,118,212,52,251,53,42,183,253,241,36,169, -100,63,85,41,35,51,202,112,200,57,216,251,243,231,198,146,164,201,218,223,127,124,216,146,199,102,136,140,33,221, -14,29,132,109,26,234,76,179,246,211,221,36,195,16,150,123,2,86,22,232,181,158,211,190,217,181,8,136,196,190, -38,62,116,42,224,9,193,233,249,139,78,219,41,113,193,17,211,96,238,52,246,220,119,194,194,18,214,184,154,75, -72,165,255,74,218,181,75,99,101,62,164,36,152,33,202,167,79,148,227,8,77,225,67,157,187,41,157,45,204,221, -236,127,244,220,181,88,91,23,255,117,92,99,207,26,185,228,17,4,175,162,4,140,232,252,48,168,199,106,31,211, -251,239,86,20,140,65,80,9,122,203,17,117,162,44,53,5,54,230,180,174,153,64,244,37,187,132,164,228,134,43, -150,167,168,25,20,100,81,234,170,106,19,202,96,140,107,197,218,41,155,87,8,124,221,97,159,163,160,45,19,24, -67,187,14,84,195,120,29,31,101,222,238,73,38,103,253,156,233,121,76,166,216,78,136,166,220,117,223,179,4,23, -69,253,236,158,202,145,235,106,210,236,249,89,167,109,99,211,118,154,55,242,157,115,179,243,42,138,3,214,88,66, -10,104,179,113,123,25,12,6,41,36,147,164,107,53,159,229,180,77,250,150,224,196,13,49,237,183,148,143,66,211, -215,26,218,157,7,129,123,9,3,90,126,254,193,129,160,168,207,82,134,56,129,123,126,245,203,68,155,105,140,220, -73,47,68,201,76,180,40,29,234,171,220,29,252,6,112,69,231,128,146,121,28,251,137,42,214,194,80,131,220,254, -106,167,76,75,183,240,116,11,40,251,130,221,11,125,240,107,46,221,53,54,172,205,138,203,249,110,136,199,5,81, -240,239,239,164,207,130,57,16,76,55,68,43,107,226,209,52,255,207,202,209,48,53,142,235,126,75,51,59,76,50, -120,249,120,223,47,125,190,14,11,101,151,61,150,114,20,150,189,227,184,78,72,13,228,40,9,231,184,176,220,166, -255,253,73,178,29,59,173,225,125,206,71,155,56,182,44,75,178,44,75,178,15,226,202,204,237,214,105,28,87,38, -254,165,157,23,75,6,164,238,132,60,9,225,79,177,37,80,110,7,146,51,160,91,165,23,250,74,219,126,216,35, -117,98,220,137,168,176,140,27,150,102,20,186,98,151,252,176,232,132,69,55,48,254,35,33,154,38,160,120,132,246, -197,247,165,22,169,118,152,117,76,15,9,117,170,11,185,240,220,153,142,204,59,90,95,58,159,44,69,66,221,222, -149,196,203,85,63,140,125,213,74,14,84,28,180,150,60,252,134,107,93,92,132,60,198,85,162,163,49,21,50,134, -66,64,18,255,88,134,66,120,130,98,197,227,94,1,31,225,67,66,90,110,18,63,104,102,65,146,0,192,197,112, -66,206,156,83,98,37,162,69,173,7,23,21,196,241,117,87,114,227,186,144,181,54,23,109,108,94,250,171,103,170, -189,18,166,101,5,237,230,72,171,78,67,86,96,20,44,235,144,225,171,246,99,31,18,241,190,122,31,246,66,57, -8,100,187,42,173,165,147,255,46,29,193,112,231,255,151,146,128,147,137,204,184,57,3,130,43,138,66,21,248,96, -99,45,222,160,62,233,209,82,28,155,127,195,56,191,226,17,252,237,70,235,32,169,152,26,32,216,46,136,12,116, -32,211,112,100,180,69,49,86,201,130,193,14,248,177,152,118,42,27,240,76,246,125,65,92,178,245,155,198,198,62, -209,57,130,142,61,172,197,66,85,157,125,219,34,33,23,84,51,188,141,118,245,141,179,205,119,33,161,254,160,39, -220,170,107,117,57,78,44,180,249,85,167,109,105,195,15,125,147,191,18,212,26,253,112,177,143,53,116,244,64,158, -221,210,75,44,96,219,9,67,237,167,153,42,80,9,51,47,201,193,37,85,108,88,26,211,182,97,195,178,199,247, -155,129,10,22,124,174,221,199,76,33,99,69,186,108,69,185,184,145,14,81,43,218,195,246,201,142,175,232,57,199, -88,60,78,104,210,145,88,94,240,170,227,47,180,238,141,34,228,83,25,74,89,73,82,219,181,80,84,26,191,92, -143,130,58,218,113,55,181,234,187,234,236,206,119,81,21,3,184,64,105,44,80,137,130,220,56,8,185,221,25,224, -251,144,87,70,147,207,147,111,64,152,133,186,149,213,19,56,28,22,172,228,91,236,214,109,208,91,84,29,187,220, -4,233,151,102,19,137,210,161,189,112,246,169,199,117,97,141,109,7,182,52,181,15,90,79,184,26,193,144,35,121, -88,184,136,169,110,153,48,39,170,64,26,248,56,211,171,191,70,65,152,190,181,135,71,217,183,250,74,203,40,238, -210,99,44,130,133,188,51,62,224,121,46,130,243,194,1,211,143,2,189,144,174,155,91,43,252,97,192,214,9,250, -160,115,34,116,122,197,22,5,34,145,118,103,236,156,125,102,31,216,62,148,253,138,21,222,227,207,71,237,43,102, -239,140,251,228,77,107,101,177,223,180,4,178,239,121,107,14,184,172,179,223,157,101,4,18,65,127,241,57,19,108, -191,105,128,110,251,166,79,201,207,225,203,7,208,44,244,143,179,32,133,78,161,50,252,45,218,24,166,248,142,246, -236,237,14,29,95,244,88,161,193,231,244,61,72,21,22,93,136,75,167,54,127,244,18,145,246,249,54,251,33,158, -10,230,187,232,127,176,107,175,70,228,247,248,12,180,233,31,40,234,36,55,20,23,172,71,158,101,27,137,189,40, -7,168,62,211,169,48,158,121,166,18,182,146,79,66,120,30,13,232,215,90,242,240,207,74,248,160,98,5,8,244, -209,30,42,13,212,35,0,171,81,223,190,188,164,135,220,205,196,111,104,226,153,82,126,206,122,231,27,115,176,146, -224,151,247,52,245,42,126,30,86,167,253,23,202,121,87,193,144,201,165,71,137,212,55,211,209,0,47,120,251,1, -169,125,93,204,148,144,190,157,218,73,188,201,23,9,81,174,192,112,136,124,14,213,235,9,28,48,212,179,253,192, -202,87,105,77,74,235,136,70,137,250,206,97,167,110,121,95,4,125,157,136,57,193,115,137,138,68,232,126,107,114, -29,49,250,229,150,89,61,110,235,0,237,115,32,33,153,208,172,23,247,114,45,80,185,113,29,114,78,91,163,48, -122,208,200,224,69,236,211,86,148,147,169,159,98,177,44,81,127,76,250,61,165,53,209,181,32,166,127,96,165,23, -223,151,27,5,47,25,137,191,155,194,210,55,238,191,172,2,253,211,191,13,52,4,80,136,206,220,248,51,43,133, -35,238,106,134,159,192,101,238,194,79,107,80,194,10,208,62,255,11,251,18,104,28,220,131,196,34,70,135,33,91, -53,14,68,172,141,158,36,133,90,110,151,162,226,80,101,247,29,27,65,27,99,85,219,232,75,137,17,111,92,3, -243,76,197,194,31,120,41,124,91,74,147,242,175,46,107,19,176,32,74,170,100,64,79,159,185,192,168,6,208,82, -153,13,155,96,84,158,164,101,135,237,82,195,117,36,253,91,136,164,136,58,32,169,60,132,42,225,52,199,185,181, -14,46,132,142,166,89,12,255,158,56,187,34,7,20,148,205,179,65,36,76,250,11,46,4,138,194,90,231,24,196, -246,205,39,160,105,7,217,66,88,213,60,175,197,158,184,154,223,124,214,182,213,82,65,12,116,92,14,107,230,34, -214,232,10,131,219,246,54,77,123,154,219,206,90,81,164,214,31,77,124,18,67,194,36,173,247,214,22,49,102,140, -210,255,154,27,84,1,93,77,248,207,47,182,216,214,101,162,103,115,116,28,173,151,48,111,215,163,183,248,176,125, -185,190,110,39,97,119,100,115,209,201,31,20,252,87,80,131,197,181,138,147,126,98,244,197,49,248,241,144,199,58, -56,221,78,58,171,98,106,145,176,213,210,137,43,165,77,187,49,84,128,134,126,169,241,17,148,76,152,13,58,190, -119,173,211,115,189,23,253,184,182,246,17,173,71,106,33,59,53,222,173,173,189,131,127,118,102,22,72,197,227,115, -179,65,198,174,250,232,144,255,204,57,63,31,196,202,246,123,238,35,16,214,150,164,10,161,169,211,142,122,68,159, -249,123,163,38,5,72,185,157,71,73,146,198,106,133,46,106,133,38,22,131,36,97,159,249,249,130,89,203,160,51, -162,55,107,107,111,172,61,94,234,161,244,97,249,163,153,102,132,247,67,199,253,30,111,131,128,252,170,213,22,234, -180,15,228,142,148,2,14,91,212,106,167,44,238,51,4,189,47,179,123,12,43,196,31,94,250,152,128,103,87,36, -241,28,173,86,234,229,21,234,20,134,54,31,144,14,134,52,128,197,123,159,100,159,19,230,136,100,169,183,72,104, -240,154,177,154,161,185,27,62,205,179,50,224,225,33,233,11,74,222,45,167,223,240,122,235,214,209,166,1,81,19, -190,131,40,220,17,1,195,81,88,86,45,144,26,78,90,165,149,86,44,255,109,109,237,55,237,113,96,173,69,215, -225,229,247,107,107,223,183,188,100,210,112,211,100,149,34,55,229,171,116,198,81,215,136,182,193,89,1,206,92,81, -215,212,208,210,22,196,195,206,37,73,216,37,11,234,50,19,33,207,70,144,249,222,241,7,225,37,251,250,59,188, -124,38,50,105,210,144,49,176,150,129,10,204,179,50,23,179,46,40,52,212,93,194,50,205,91,201,189,130,146,109, -111,109,37,125,108,30,43,30,196,38,46,253,85,168,246,149,62,179,115,34,148,12,99,24,151,183,132,193,213,243, -220,79,145,159,248,176,250,186,50,254,198,75,245,174,59,43,84,15,102,142,48,19,14,181,177,121,108,26,181,44, -66,29,231,20,84,197,99,35,29,207,227,180,3,56,48,8,53,160,228,24,181,64,36,241,56,215,188,156,138,235, -162,20,83,231,72,187,153,85,87,217,236,20,204,172,129,123,76,67,53,159,138,18,146,141,6,250,47,125,25,150, -129,19,172,81,139,217,245,0,127,210,111,11,39,39,183,30,37,133,61,217,209,15,103,197,88,19,34,224,230,80, -152,96,56,123,214,54,99,235,246,1,1,46,221,70,140,43,247,108,162,136,222,177,40,29,19,216,208,104,183,121, -127,37,3,159,143,168,63,233,179,112,236,27,46,237,250,72,22,211,13,208,135,132,7,119,2,83,79,89,227,209, -212,188,17,106,244,84,90,208,123,66,159,182,171,36,113,178,255,82,255,138,73,108,57,144,233,55,81,162,55,35, -187,154,33,6,12,10,211,85,66,96,230,215,98,161,245,13,241,254,81,176,103,193,198,2,135,250,40,248,88,176, -112,79,80,239,197,161,62,130,6,174,41,73,110,92,205,101,46,198,250,208,158,152,114,250,114,34,178,92,29,101, -10,124,23,88,0,175,211,103,220,75,209,219,217,209,241,206,201,120,231,221,225,112,242,113,60,58,154,140,222,125, -28,238,158,226,151,189,225,254,206,217,225,233,228,100,184,59,58,58,130,194,201,193,209,233,240,228,243,206,225,228, -211,56,92,225,240,224,211,1,181,29,143,118,191,31,66,131,209,228,248,224,232,253,100,119,180,55,92,42,222,57, -253,16,168,104,123,240,193,15,63,15,143,78,39,227,209,217,201,238,112,50,58,62,61,24,29,81,247,195,79,199, -167,63,154,175,31,118,142,246,14,135,39,62,90,174,170,214,18,129,47,224,173,8,195,49,159,94,71,225,219,83, -161,110,119,221,25,183,180,183,205,4,50,161,78,95,128,186,96,175,140,248,15,127,22,127,100,171,52,138,54,235, -10,162,61,106,163,168,54,7,195,131,17,255,227,154,146,89,89,35,131,249,147,184,210,95,35,246,2,209,163,63, -68,236,21,86,253,97,139,253,75,78,27,188,194,130,130,132,138,159,187,114,133,6,72,87,206,112,207,126,241,140, -48,14,142,198,167,59,71,167,7,59,167,195,61,254,118,251,146,71,221,178,8,102,3,214,52,136,192,56,248,22, -84,114,175,182,194,232,120,120,196,177,61,62,180,173,14,71,99,108,242,7,40,55,207,254,39,232,242,143,230,11, -246,180,50,57,66,106,177,204,30,139,155,76,161,63,48,114,117,41,108,218,126,66,189,53,157,231,234,149,137,216, -91,238,108,109,205,41,7,52,1,236,82,225,90,83,144,210,41,126,99,29,56,131,103,187,61,48,121,47,184,175, -179,175,196,127,124,182,113,24,106,162,207,218,194,118,90,99,163,29,52,189,216,128,115,126,17,219,72,210,135,149, -70,64,57,113,33,47,225,73,193,159,107,214,14,195,101,226,139,174,131,158,211,38,41,198,192,10,200,212,246,38, -20,108,111,42,176,96,133,118,35,246,184,159,76,47,186,94,114,238,13,111,100,0,183,5,206,185,207,93,11,10, -51,72,94,114,29,184,179,8,98,126,53,153,228,232,245,24,148,122,79,158,150,157,237,118,194,212,160,167,98,7, -139,161,161,221,147,233,80,116,11,29,78,50,118,35,125,37,4,80,178,9,225,238,28,44,211,2,124,240,217,51, -101,161,68,159,196,125,21,71,235,177,240,139,209,140,41,225,63,89,143,146,136,73,183,172,90,17,108,59,193,13, -50,26,147,215,244,176,136,143,132,171,172,83,71,19,104,115,60,151,98,181,157,95,247,5,228,131,113,151,161,88, -166,147,45,209,249,90,202,216,181,187,66,59,89,251,171,59,70,97,206,184,232,127,196,31,159,233,124,78,44,28, -51,53,31,25,253,26,54,237,66,171,93,17,11,211,199,93,120,210,143,159,239,175,42,72,128,209,255,104,59,248, -207,113,36,145,24,248,248,148,201,233,4,3,100,48,138,63,254,125,123,219,77,194,39,18,71,239,92,120,107,29, -93,9,114,169,183,238,139,169,152,9,5,198,142,198,21,77,10,124,210,193,83,23,223,223,120,243,70,35,199,239, -4,83,214,105,173,152,122,141,187,202,178,86,117,165,102,95,99,126,34,174,255,133,236,104,251,244,228,5,78,154, -240,174,142,107,222,196,55,104,103,221,103,15,177,66,23,251,41,40,37,120,73,79,4,51,182,23,62,230,184,123, -74,67,238,210,1,54,55,38,119,186,181,96,85,57,123,78,87,61,201,88,11,237,207,109,207,66,79,40,42,18, -237,154,136,211,6,54,141,44,121,241,184,3,144,187,162,164,147,244,102,193,14,180,92,137,62,253,242,213,232,18, -57,69,212,173,40,19,47,206,196,85,191,224,133,23,103,42,76,156,169,162,127,159,34,26,60,136,162,238,160,196, -95,134,207,119,244,124,151,48,106,163,237,202,3,97,59,54,34,121,44,66,129,131,29,83,205,209,203,238,130,80, -242,141,71,218,22,189,186,221,12,24,238,62,156,152,108,211,22,140,153,54,246,136,174,17,94,145,36,212,196,245, -119,140,235,97,231,93,25,40,6,130,160,241,211,175,238,233,14,69,37,180,147,119,99,37,55,130,240,2,253,65, -34,184,44,150,255,160,15,11,202,141,22,91,184,177,40,3,25,131,171,221,3,76,84,74,77,166,166,165,13,57, -185,246,101,23,239,175,34,110,227,84,115,190,197,232,81,105,156,77,241,21,189,121,49,123,127,223,5,223,17,116, -43,209,218,17,144,153,191,88,248,97,113,209,57,196,235,4,168,138,43,146,108,133,206,68,244,224,38,36,226,93, -226,148,110,143,215,52,232,149,237,146,142,11,114,74,36,58,8,41,201,197,89,154,55,101,177,195,140,139,170,213, -91,85,87,241,28,102,191,63,71,172,178,106,169,114,136,159,181,52,154,123,132,169,52,89,194,126,23,71,157,188, -111,104,114,98,254,98,138,72,247,240,110,2,231,235,65,105,55,210,120,12,124,61,166,101,128,197,95,3,107,30, -128,12,197,81,77,104,79,146,209,208,215,147,93,110,160,172,192,47,157,116,128,127,235,163,51,193,40,224,164,118, -215,176,2,19,150,61,184,192,15,96,70,129,132,40,17,105,61,238,106,80,197,243,36,157,199,232,223,209,229,57, -129,154,251,45,145,244,111,223,34,224,57,189,72,189,120,162,60,88,87,180,87,212,39,12,112,66,128,50,228,40, -251,78,88,219,167,81,66,202,94,145,61,39,189,128,27,0,72,165,147,81,76,76,165,97,86,15,232,66,86,126, -100,54,6,151,25,203,56,17,158,252,160,212,243,28,79,196,103,77,19,6,234,227,134,153,3,90,46,115,150,3, -115,124,222,188,158,156,96,165,7,217,208,109,103,214,202,46,63,145,102,118,234,185,23,131,136,225,246,139,55,231, -76,139,199,40,49,82,224,33,175,5,177,91,198,119,68,219,15,211,142,187,17,141,248,56,89,116,167,190,150,22, -51,177,219,44,35,136,123,131,213,121,149,229,119,173,189,80,97,42,1,210,214,200,242,69,91,153,26,235,213,216, -229,95,36,172,186,212,43,203,121,48,210,185,78,193,3,84,223,128,46,42,193,106,67,91,36,232,225,115,198,212, -163,200,102,35,9,116,132,222,35,202,205,12,124,3,8,96,245,34,136,186,248,93,36,180,126,162,78,153,247,203, -190,222,92,244,203,54,11,168,159,148,90,134,98,90,208,17,139,127,32,14,250,228,104,95,160,34,0,164,254,112, -185,240,246,54,159,253,32,221,191,153,99,35,108,8,105,193,66,119,111,124,240,84,45,66,100,136,113,209,87,255, -82,222,14,99,67,245,89,130,63,220,188,21,173,215,187,64,109,84,232,125,83,24,92,140,36,166,204,120,69,231, -36,169,53,1,251,102,211,202,211,109,230,78,235,166,37,115,153,98,152,19,224,157,219,77,87,178,34,92,85,155, -2,129,72,109,120,109,72,3,250,203,155,7,132,149,255,25,24,119,5,206,235,168,152,12,162,229,98,151,79,244, -221,119,223,109,179,109,221,137,7,212,100,22,29,198,147,248,179,96,223,12,79,83,229,115,151,244,44,50,36,73, -225,247,101,170,59,238,239,119,130,159,147,248,3,128,6,40,169,96,69,170,92,174,69,73,189,100,69,41,228,65, -121,93,97,232,115,17,159,5,87,142,204,201,200,146,92,225,90,160,52,142,18,102,122,133,178,27,139,182,15,156, -62,16,60,108,91,219,140,198,142,142,91,157,116,131,88,106,190,84,9,59,135,14,152,96,18,198,95,193,40,251, -24,172,44,146,180,32,189,124,246,170,82,12,175,190,120,47,87,246,208,111,109,111,167,86,250,162,171,21,162,43, -244,137,116,10,73,161,40,42,145,120,64,216,221,60,211,154,238,253,18,147,181,117,111,184,58,196,232,160,96,6, -147,139,109,182,101,158,221,45,66,14,133,238,136,2,7,162,248,139,223,63,117,231,178,89,50,245,178,174,145,9, -57,140,113,70,156,83,156,24,55,169,54,254,242,235,255,178,135,20,122,77,193,253,227,95,182,182,183,254,200,222, -11,190,249,75,60,72,179,60,135,242,38,155,21,55,229,61,61,129,103,185,200,27,204,224,157,65,79,77,158,61, -52,249,172,120,136,7,189,227,76,221,158,37,77,94,205,42,217,76,171,251,162,204,160,193,53,8,124,115,61,171, -170,105,115,93,193,251,205,236,249,225,22,106,159,36,205,109,37,139,223,27,136,197,220,136,102,38,148,18,178,129, -126,110,85,81,222,52,247,153,188,19,18,234,125,104,206,27,128,90,1,243,168,195,135,172,0,40,15,85,81,98, -253,250,54,123,16,77,173,170,7,248,145,197,157,64,51,112,126,115,139,111,213,157,104,112,70,2,144,195,164,33, -119,37,158,147,110,144,74,4,11,158,138,188,154,210,191,170,155,199,230,145,238,138,131,63,169,154,39,188,175,235, -73,22,132,205,87,128,177,11,206,195,157,183,63,93,110,178,143,97,82,219,117,154,189,19,124,213,214,143,95,227, -78,84,211,67,196,187,31,226,100,176,9,244,107,242,91,209,200,108,186,89,164,222,235,102,145,232,91,4,68,226, -173,76,111,252,205,73,119,47,120,71,123,65,164,200,174,189,82,49,66,69,134,138,135,133,35,92,37,174,12,3, -50,205,150,110,79,250,109,185,159,175,255,17,156,219,87,252,5,232,204,189,136,86,15,177,70,44,122,241,204,232, -242,55,61,243,162,203,240,230,51,28,219,240,112,98,90,179,95,23,55,243,215,35,41,180,248,95,128,247,120,188, -179,63,156,68,235,2,172,190,218,175,168,94,234,13,27,134,186,65,145,179,207,20,92,65,253,175,99,53,52,207, -191,23,92,31,107,247,243,249,112,215,226,101,215,137,46,126,27,58,114,250,110,126,5,112,189,28,187,165,106,238, -198,52,2,47,166,11,211,81,64,154,1,13,202,182,252,94,64,25,25,104,66,214,69,173,248,239,130,33,71,113, -152,217,77,134,141,198,170,130,37,122,202,127,212,95,246,150,58,225,63,96,121,73,222,232,33,245,38,180,66,251, -73,176,47,130,255,7,108,216,200,103,89,93,195,10,35,148,189,42,173,111,254,131,27,54,98,116,105,13,72,116, -185,246,67,87,101,40,221,162,130,56,1,95,186,234,192,45,37,116,6,74,162,228,150,186,122,206,241,144,82,255, -35,144,169,123,248,9,222,203,74,7,245,240,93,185,19,80,250,163,97,194,103,123,62,168,180,135,44,115,48,204, -188,175,174,197,227,74,213,114,131,202,6,5,55,31,83,119,11,4,54,50,123,210,124,144,131,10,72,55,171,114, -90,205,129,188,160,199,243,187,205,66,107,149,34,193,230,240,233,106,70,229,80,239,151,170,204,111,241,152,92,140, -74,36,147,34,107,138,242,97,174,146,182,205,186,74,0,246,59,17,151,68,93,3,130,42,233,246,215,160,35,235, -55,221,62,76,105,81,234,42,87,179,185,12,215,168,44,148,24,34,248,205,169,204,154,211,106,222,104,139,241,160, -124,104,72,131,36,155,94,203,162,123,53,8,30,176,120,47,252,239,238,194,13,212,237,91,111,255,126,185,121,195, -162,183,111,214,162,100,169,169,166,44,71,111,147,13,249,39,12,145,161,209,121,8,67,133,149,142,153,164,35,43, -177,35,135,185,217,36,74,244,55,14,219,204,168,166,203,74,81,242,48,105,227,30,248,92,60,204,64,128,186,7, -214,164,59,33,102,30,193,34,42,157,69,20,86,121,118,155,164,251,16,83,144,230,30,55,237,157,209,235,167,166, -105,191,87,7,41,164,1,182,242,165,240,127,68,195,141,115,128,24,57,216,175,32,150,118,107,113,222,249,76,104, -155,18,46,89,169,213,66,143,155,7,125,237,106,252,69,108,184,64,57,143,236,39,61,143,140,163,177,219,66,234, -55,191,52,121,33,74,46,153,7,144,125,193,52,71,225,60,231,191,10,38,128,152,66,181,254,127,165,125,228,178, -191,154,115,166,160,166,194,154,236,39,115,85,160,110,130,203,164,94,54,117,252,103,15,252,91,24,153,19,50,109, -115,67,65,57,102,102,67,26,116,118,255,132,240,74,147,209,216,33,225,194,223,236,74,229,181,153,108,92,1,83, -244,150,211,247,248,85,94,165,94,15,232,229,13,152,195,144,93,205,194,213,52,205,6,123,58,47,67,67,117,121, -25,169,215,42,239,194,55,230,204,161,69,132,245,182,60,100,230,182,178,243,206,162,193,218,52,168,193,133,61,42, -13,31,48,236,211,186,61,50,21,142,47,8,58,152,51,123,245,107,173,248,131,163,216,132,250,23,254,6,239,186, -131,146,43,159,170,216,22,95,128,95,110,162,46,117,46,142,226,95,28,188,91,213,241,254,161,62,225,63,198,223, -110,83,76,201,47,217,99,170,112,75,90,113,137,238,159,91,86,192,195,118,27,95,237,102,0,87,250,190,188,106, -227,145,43,6,154,28,223,25,64,4,66,20,8,177,66,75,131,93,208,230,226,18,132,46,148,40,107,154,33,144, -78,67,38,58,181,195,213,16,190,238,226,178,77,62,1,89,158,215,130,92,114,233,143,12,30,15,166,105,46,240, -225,68,64,68,91,200,244,7,124,25,66,254,98,174,210,159,240,249,48,123,174,230,202,148,124,161,54,232,63,192, -174,77,225,131,194,210,83,52,251,11,44,78,167,84,176,167,239,34,158,146,234,72,175,169,108,252,92,230,195,175, -74,200,50,155,141,21,250,31,110,21,176,52,147,202,107,62,81,26,161,235,84,8,234,239,30,38,59,153,45,31, -178,114,58,19,169,162,98,12,133,166,37,61,238,26,159,89,42,245,171,153,137,149,96,157,92,222,180,16,12,183, -166,216,73,180,253,215,141,173,13,200,150,176,81,164,244,84,48,189,73,78,223,8,118,251,60,149,72,164,223,4, -211,174,104,103,53,239,104,207,76,174,152,118,19,30,87,82,101,179,116,95,176,142,219,48,157,152,119,139,205,39, -243,190,159,225,222,231,57,149,0,96,86,149,109,253,194,2,196,145,79,217,190,204,110,168,252,129,21,53,160,95, -76,109,197,74,49,80,130,211,189,209,39,66,100,174,88,139,91,122,203,48,120,235,222,143,4,187,71,58,141,4, -51,225,75,132,254,4,111,51,112,33,32,59,210,153,130,33,214,100,10,79,174,72,179,153,237,116,157,102,138,141, -149,44,114,245,9,59,170,225,109,94,63,8,96,127,250,85,180,207,116,65,246,153,96,51,240,245,167,159,4,155, -76,198,195,221,147,161,73,42,57,218,57,28,79,246,70,147,163,209,233,228,108,12,217,52,39,147,31,71,103,147, -243,131,195,195,201,187,225,100,255,224,100,184,151,150,106,97,110,203,126,86,252,86,196,70,217,95,75,33,192,226, -14,171,126,152,145,180,139,48,151,2,251,124,92,161,193,127,48,138,255,10,251,48,35,29,167,87,69,197,44,171, -233,227,10,47,59,140,233,242,204,9,101,64,36,52,249,29,187,157,44,7,230,215,75,50,253,170,40,132,231,116, -72,29,132,103,250,170,154,8,204,70,39,201,254,12,8,207,36,127,166,185,137,243,31,233,131,101,109,71,71,252, -222,1,109,166,153,12,133,163,77,190,63,222,48,2,11,131,187,94,82,31,56,57,95,61,241,215,52,113,160,148, -59,200,24,129,118,199,151,233,157,161,111,60,22,164,188,209,67,238,159,254,160,79,198,42,94,92,46,156,14,15, -43,202,176,6,119,170,211,233,125,79,231,186,37,98,193,140,11,75,85,99,218,173,157,102,55,54,21,49,50,169, -137,139,196,108,152,199,228,80,184,199,223,126,239,95,123,1,94,73,112,68,175,98,45,212,185,184,26,83,186,91, -205,49,227,36,3,193,115,69,54,207,47,240,5,176,88,129,224,40,110,130,65,107,107,171,45,55,110,179,218,203, -9,133,170,137,201,214,88,173,123,161,204,253,23,126,14,85,160,94,242,175,187,193,252,254,151,251,41,33,32,18, -223,43,77,227,43,162,241,144,104,28,38,235,80,189,76,215,161,66,159,235,217,131,6,125,48,58,6,142,114,40, -212,174,253,31,230,66,62,31,103,50,187,175,177,16,162,16,181,176,53,207,228,204,16,156,208,184,81,124,44,250, -161,74,221,211,105,110,226,108,254,130,23,216,212,205,83,93,155,125,163,192,57,36,220,190,240,151,152,106,12,176, -202,32,137,211,159,55,127,222,76,6,116,33,101,91,9,138,222,80,137,189,135,60,178,39,156,36,87,131,8,90, -70,41,252,70,12,182,175,155,81,98,63,150,237,211,141,90,74,184,164,123,91,34,114,101,219,252,224,216,98,107, -49,213,121,214,116,25,16,14,77,123,175,192,251,154,36,126,151,21,95,169,87,73,64,42,109,113,12,125,79,210, -40,90,29,140,195,63,216,240,182,170,21,37,237,216,10,213,107,3,108,109,97,22,100,117,215,216,214,76,54,25, -17,40,102,246,204,202,230,207,131,248,226,231,167,203,117,78,191,137,227,162,228,14,115,35,147,162,84,178,16,117, -172,144,117,168,96,226,56,24,94,71,229,6,156,243,140,104,177,238,128,149,44,226,81,226,17,101,45,66,157,24, -69,246,234,209,45,246,118,59,89,149,5,225,24,63,128,54,105,52,240,160,36,139,240,52,8,238,57,150,168,129, -196,13,167,243,38,204,240,168,6,128,232,48,135,89,23,60,250,134,12,10,36,238,226,184,108,34,220,17,205,241, -209,255,79,143,142,231,87,232,7,187,18,178,230,246,202,80,87,198,233,82,86,255,29,245,83,183,205,77,23,136, -167,9,16,75,58,74,211,95,169,213,162,46,237,240,129,97,203,192,19,248,58,208,126,151,107,89,221,199,148,51, -154,150,139,149,138,43,158,197,178,111,128,218,75,200,81,158,4,94,66,222,114,173,28,232,199,180,212,1,234,239, -182,16,110,119,180,221,0,40,66,32,48,77,131,177,176,177,80,12,223,176,77,140,39,130,28,249,94,1,96,2, -234,216,32,192,130,21,21,137,43,255,210,138,32,218,133,7,225,5,214,25,149,168,87,86,17,165,23,141,145,122, -201,111,114,244,202,34,113,164,52,202,239,41,21,89,39,116,67,89,86,163,153,119,80,183,43,147,47,5,187,138, -223,43,118,167,248,72,245,131,117,87,146,49,122,184,0,195,72,106,149,149,57,122,127,93,93,190,101,114,140,144, -3,250,206,133,8,38,126,16,49,159,150,241,22,96,176,66,238,4,85,20,124,218,85,203,38,65,210,186,133,158, -20,71,39,5,165,150,2,238,16,130,107,154,149,185,139,181,12,53,87,234,8,239,212,39,43,249,54,147,43,215, -160,244,203,127,200,126,185,190,238,146,12,137,143,174,30,240,44,49,240,93,200,166,203,99,115,16,155,85,232,147, -20,23,21,138,106,229,133,74,23,236,233,197,147,55,97,65,184,122,69,16,174,232,14,53,240,44,154,171,152,187, -19,255,68,241,161,98,167,104,8,176,3,5,18,210,15,212,119,4,10,94,124,206,102,156,84,241,97,86,171,79, -162,174,179,27,193,106,93,228,78,19,216,209,181,25,216,164,40,172,238,38,47,49,176,247,36,160,211,147,184,72, -18,214,197,1,61,163,85,121,175,59,235,58,0,91,248,85,169,145,1,145,8,20,198,225,75,49,92,77,125,104, -17,93,255,61,206,151,139,99,242,132,81,110,3,5,150,103,203,8,50,169,81,4,6,149,47,226,55,130,143,14, -57,91,66,139,177,45,227,120,80,238,84,185,99,25,250,12,133,237,183,102,85,194,230,1,6,181,226,14,109,195, -135,27,150,38,174,87,101,224,77,154,69,26,3,91,14,2,202,32,129,206,28,234,245,93,241,176,67,85,18,134, -227,134,173,116,221,101,140,17,23,140,25,249,35,222,133,138,142,67,174,8,154,172,140,92,31,1,73,92,183,38, -129,253,68,228,85,89,138,92,17,156,240,39,128,167,113,200,184,57,183,29,231,30,91,165,173,183,163,148,184,127, -80,53,204,205,206,37,247,167,234,165,227,56,253,202,66,249,71,54,40,172,249,232,14,85,118,253,137,182,46,236, -63,101,140,246,130,197,102,30,194,198,26,33,62,54,243,193,28,177,121,245,248,79,146,250,4,109,137,128,177,69, -162,81,248,83,156,97,194,201,170,202,132,0,152,25,85,231,156,233,63,219,123,210,53,183,109,36,255,231,41,104, -206,69,78,67,178,164,110,95,148,217,90,159,185,156,56,227,142,231,82,250,179,217,18,228,102,66,129,10,9,245, -49,10,223,96,95,96,127,237,43,238,35,108,85,225,32,68,145,109,217,115,31,25,79,139,0,10,87,161,80,168, -42,0,133,52,212,98,101,106,136,17,9,143,37,113,183,3,69,93,32,82,8,199,37,161,6,157,41,16,116,3, -230,182,79,59,245,217,137,2,120,246,225,164,13,132,182,31,241,93,74,252,183,169,24,84,179,153,161,81,101,56, -24,220,101,5,79,74,180,115,60,18,30,53,223,203,103,148,115,238,225,173,50,79,158,115,183,178,200,179,178,44, -20,115,153,148,79,0,123,34,130,187,51,97,55,109,243,254,140,90,0,32,46,61,200,226,250,165,65,70,80,19, -92,96,169,103,95,90,70,234,233,166,229,240,207,32,224,100,95,2,78,38,201,95,139,128,111,66,66,248,97,164, -237,210,180,155,177,108,25,56,144,255,67,182,14,128,246,3,103,4,25,108,126,82,169,86,149,152,133,149,190,46, -64,2,247,163,189,4,150,71,255,4,2,203,163,15,20,88,190,185,65,96,249,198,8,32,39,100,67,105,21,91, -94,144,164,122,69,98,203,83,148,87,217,87,40,200,140,59,243,238,174,206,132,139,247,74,37,57,74,37,95,181, -74,37,69,67,42,233,150,73,130,1,52,178,161,87,133,129,236,184,222,44,251,202,79,105,9,118,188,118,97,166, -78,223,91,174,113,51,117,137,56,157,16,36,237,52,69,60,178,108,170,105,34,155,136,104,87,9,144,120,172,104, -240,23,199,143,229,229,221,169,136,155,134,88,26,92,181,113,97,100,208,90,9,123,33,219,108,134,236,67,154,108, -29,18,162,236,227,182,175,91,140,217,7,202,74,52,185,149,104,68,115,20,247,88,16,208,195,208,85,183,112,227, -228,126,130,155,13,118,233,201,39,29,43,68,71,14,92,48,234,36,27,187,181,132,20,221,237,239,92,77,138,73, -17,93,237,177,154,212,229,118,47,44,251,64,5,123,162,152,156,218,134,237,211,195,42,6,31,63,9,58,144,28, -15,88,107,251,172,178,209,157,216,61,59,92,205,163,123,210,183,8,117,226,47,52,183,173,20,216,157,10,117,177, -171,143,19,8,63,158,159,60,146,248,15,77,103,127,25,49,81,52,196,196,253,216,21,210,217,71,118,222,202,42, -205,33,69,73,175,41,189,228,0,213,97,137,58,185,97,61,63,49,55,113,94,22,95,228,169,216,53,59,189,166, -197,252,119,180,152,255,86,198,103,146,125,38,99,144,16,158,147,33,170,61,123,155,73,2,61,228,42,171,212,239, -186,113,81,216,65,228,117,250,75,53,196,218,96,133,185,221,75,255,19,199,130,229,20,234,165,165,39,114,233,149, -166,112,20,172,156,108,126,24,237,153,81,61,15,102,91,166,22,28,87,91,29,91,91,232,235,214,229,104,18,180, -199,199,55,245,86,117,171,142,14,36,187,9,92,245,198,22,239,66,219,173,148,50,100,220,68,118,52,149,137,224, -119,46,13,59,62,35,66,150,160,180,245,89,135,12,23,6,29,37,66,75,216,26,253,124,237,81,119,123,66,191, -176,237,209,187,160,89,188,217,22,119,162,156,109,205,196,72,176,154,49,68,5,219,102,199,209,172,142,136,210,106, -108,13,231,207,229,182,225,58,12,36,25,143,186,13,56,219,215,7,169,136,29,235,117,168,38,239,45,74,221,49, -205,243,144,124,85,40,21,188,13,53,104,156,78,187,68,182,180,85,100,19,187,156,82,180,137,91,69,240,187,118, -1,139,165,150,245,212,143,168,161,67,239,192,138,94,237,45,173,170,10,113,6,56,18,44,161,125,63,59,236,127, -123,114,191,145,154,111,217,134,237,90,194,109,193,222,34,73,51,224,29,50,247,206,184,167,56,29,50,4,75,49, -191,221,177,199,134,117,143,217,123,169,180,2,68,165,22,28,57,164,190,255,66,26,232,167,174,6,122,153,164,120, -71,228,167,38,49,26,82,196,246,7,130,60,103,3,227,95,166,37,16,150,179,124,147,81,184,62,128,104,156,164, -37,65,65,239,67,66,216,241,149,150,6,210,117,209,191,118,161,9,89,55,130,39,118,71,122,204,251,243,92,240, -73,30,112,115,218,53,144,177,254,102,210,37,106,49,145,52,166,141,219,211,28,139,14,205,197,106,66,80,18,4, -69,92,104,141,150,51,122,90,52,12,85,47,212,131,197,236,11,7,113,239,112,84,18,153,55,80,167,90,232,60, -137,159,37,103,60,139,6,172,196,211,46,219,211,122,248,203,28,239,80,42,50,201,157,141,84,252,174,24,96,134, -238,13,230,43,252,169,76,98,26,111,176,77,209,58,24,132,140,242,194,231,48,100,42,25,190,71,97,213,162,12, -218,107,52,65,58,85,159,253,84,170,30,156,198,237,119,5,112,190,142,157,209,74,119,217,211,122,55,42,165,190, -9,135,250,241,24,169,158,1,159,26,172,225,114,152,100,196,129,61,126,197,103,107,188,66,212,215,151,5,198,179, -177,241,6,78,246,13,82,201,71,191,76,241,49,209,162,175,59,170,67,84,13,144,39,64,152,36,244,244,160,157, -245,135,108,16,70,138,20,241,208,61,0,153,20,150,2,146,195,144,8,201,186,241,30,151,151,41,18,31,122,149, -206,17,85,241,84,85,203,114,69,92,167,33,195,96,184,153,37,37,247,6,17,253,12,163,60,78,199,234,42,44, -69,28,69,186,192,89,159,134,255,224,192,200,70,88,41,195,42,81,210,83,192,119,162,26,170,136,9,32,141,161, -14,60,85,7,72,89,115,5,118,47,74,241,17,238,85,169,46,226,178,89,31,233,67,5,106,80,115,54,13,229, -33,68,9,252,83,128,161,185,203,59,0,228,76,115,29,2,175,78,120,155,13,20,170,148,46,0,142,244,87,8, -29,140,7,182,88,228,183,135,177,1,34,199,194,216,206,227,156,194,248,249,48,159,30,98,46,221,21,234,70,253, -168,210,93,155,87,167,63,68,10,175,161,49,196,16,135,54,71,238,130,142,28,80,12,49,141,7,188,72,153,134, -58,19,38,96,166,247,96,168,74,99,227,252,158,205,194,218,97,59,160,252,46,91,227,137,134,65,181,72,5,0, -92,111,68,156,67,8,90,115,7,250,104,39,106,90,79,84,51,168,72,137,24,173,253,248,234,1,30,192,154,53, -77,161,80,96,98,93,38,177,239,111,16,161,191,39,13,170,113,122,231,49,89,188,108,82,251,209,135,79,101,160, -91,178,253,19,88,232,157,231,18,190,144,202,138,23,184,87,90,245,108,200,21,238,45,209,171,44,109,207,137,76, -166,135,108,116,26,77,143,24,15,194,211,177,158,29,102,33,129,185,87,146,242,207,0,236,80,39,143,34,17,115, -166,171,136,15,85,228,161,201,83,196,178,213,72,55,9,6,236,241,238,17,166,16,223,136,17,108,58,98,117,182, -31,235,243,50,148,171,229,28,77,24,20,237,25,194,168,64,23,128,245,5,210,159,255,69,78,118,88,95,112,191, -43,176,45,133,30,224,182,148,214,241,69,166,10,53,93,97,53,27,247,174,151,235,103,155,215,238,195,124,43,150, -226,97,41,92,18,219,188,144,110,239,0,22,141,59,122,91,23,25,111,225,157,30,125,138,8,25,107,160,94,201, -101,202,39,121,197,172,107,146,120,183,75,85,240,115,125,32,238,199,189,44,225,63,254,19,88,194,127,236,178,132, -179,47,63,78,214,250,143,172,245,167,255,200,90,255,145,181,254,35,107,253,71,214,250,112,89,139,253,193,225,29, -233,18,205,109,79,141,167,172,54,119,118,104,17,173,23,235,9,143,54,102,104,121,167,224,182,236,94,224,105,109, -251,141,140,151,28,159,35,104,158,185,99,127,148,241,181,100,191,167,191,92,160,249,83,194,95,201,132,136,65,26, -44,224,110,130,196,21,146,229,2,15,102,181,148,211,92,146,27,7,93,185,104,58,207,13,153,5,33,239,152,248, -116,136,126,188,38,192,246,96,241,202,12,70,39,11,204,37,57,125,69,142,205,118,160,54,21,158,63,154,33,76, -18,207,16,38,179,48,116,65,193,93,181,204,155,254,214,111,170,135,62,105,149,232,22,228,244,82,169,161,13,103, -76,68,135,19,219,202,241,216,0,173,192,117,152,149,117,229,96,150,51,157,120,211,26,187,104,196,186,237,164,13, -192,70,250,32,100,171,70,20,250,14,59,111,45,252,162,17,139,114,78,253,20,8,161,252,58,46,77,140,123,62, -99,106,99,79,39,110,32,210,155,100,92,223,70,23,19,46,218,45,79,145,155,208,116,223,203,78,226,109,65,152, -134,64,93,226,79,23,215,129,155,104,94,181,91,218,206,216,59,57,97,235,81,240,241,54,1,34,117,49,46,58, -109,241,111,76,231,58,246,39,112,125,169,143,5,91,232,142,179,193,142,13,23,18,184,104,238,92,77,208,120,154, -139,182,147,108,182,104,118,209,122,162,205,166,163,214,50,71,113,41,130,14,174,108,172,118,176,20,170,183,101,216, -217,62,248,218,197,212,50,104,140,5,110,200,81,153,75,40,244,217,205,133,90,121,28,137,232,98,107,43,1,240, -248,103,12,194,196,2,68,102,48,206,77,12,230,182,159,31,143,94,91,30,118,177,16,70,99,112,51,46,66,7, -140,112,98,165,110,133,22,123,3,108,135,225,52,231,141,113,180,88,160,99,191,28,48,207,102,45,146,216,151,123, -43,206,120,168,81,103,250,211,142,234,156,89,213,57,107,85,157,61,17,151,12,148,100,232,132,16,90,147,71,107, -254,197,174,206,108,145,148,25,221,121,182,237,105,4,166,203,0,86,147,190,189,123,216,70,31,94,170,15,110,176, -245,199,228,78,156,72,59,235,173,122,22,192,63,242,146,203,74,151,46,4,94,64,113,88,89,204,233,245,41,245, -143,36,62,26,121,41,118,119,250,144,8,234,194,216,154,93,176,25,61,40,190,12,129,6,70,181,74,110,228,97, -3,234,14,41,246,205,161,217,250,219,241,147,74,174,69,8,169,168,118,224,95,230,150,128,100,146,35,193,236,93, -78,170,159,129,170,28,250,27,194,47,42,117,115,103,187,222,197,168,213,180,154,24,229,13,140,202,29,140,138,221, -93,22,38,9,55,246,130,250,9,67,62,114,227,116,185,110,229,156,14,171,51,126,224,6,29,14,43,150,138,186, -176,202,107,168,108,131,252,210,236,77,44,25,134,190,40,115,97,98,206,88,230,238,93,80,200,77,207,88,205,212, -163,107,246,206,57,247,31,61,171,204,109,227,153,136,137,167,198,199,27,21,33,98,121,251,193,0,61,212,28,27, -135,229,211,126,191,143,74,145,242,9,242,85,34,207,251,201,89,137,111,153,56,62,143,2,44,130,199,107,186,207, -169,124,204,194,52,81,165,195,216,187,21,12,239,66,241,88,40,63,37,221,41,227,210,203,65,118,207,31,138,113, -142,54,6,29,199,227,124,204,33,142,67,220,6,35,36,72,82,249,175,197,1,228,51,31,16,195,225,35,63,101, -230,35,150,85,91,161,84,0,167,103,14,135,119,168,90,40,59,29,171,248,89,76,165,177,53,253,166,99,116,25, -59,139,169,60,136,75,241,55,28,35,96,2,245,205,176,246,25,214,140,194,55,252,137,19,6,77,100,105,175,87, -63,10,87,177,196,98,150,219,27,96,250,49,101,139,139,60,38,108,162,203,178,34,40,110,215,30,178,209,60,2, -109,192,31,114,178,138,31,198,203,42,227,196,194,245,94,43,214,18,31,7,188,255,245,203,175,159,197,190,207,120, -31,4,22,120,207,193,199,75,207,37,134,95,124,254,245,51,8,163,27,50,10,63,126,245,236,209,151,47,95,127, -27,251,164,135,228,107,73,185,190,126,244,37,20,80,138,228,7,142,225,79,31,125,245,236,229,243,23,159,63,135, -200,119,201,18,86,182,44,93,80,202,147,207,95,61,121,1,177,179,180,152,101,42,230,5,220,231,130,136,12,200, -139,194,175,79,190,125,249,21,68,172,75,153,47,49,230,245,55,79,65,130,138,253,181,114,150,133,173,122,249,232, -41,190,92,224,163,171,32,244,130,196,208,76,147,9,245,56,104,41,140,39,62,246,70,125,254,14,154,138,193,5, -62,3,58,135,63,181,158,191,66,162,219,189,91,1,243,156,6,122,173,159,249,85,207,250,174,39,179,88,192,168, -69,9,252,161,47,179,105,141,86,135,136,51,114,78,18,37,12,222,81,161,189,233,69,52,99,224,2,132,196,57, -248,48,191,103,209,0,254,114,19,156,43,77,10,227,102,38,238,92,125,56,175,176,214,64,23,81,175,55,23,204, -60,27,16,165,248,137,111,209,228,85,199,99,51,156,46,122,112,235,58,75,189,54,106,59,56,11,173,88,132,61, -3,96,234,224,12,254,88,178,82,46,170,160,32,253,17,100,33,115,28,173,157,19,27,162,230,110,176,223,146,165, -226,183,41,191,140,68,181,235,213,138,137,216,86,200,39,155,42,226,200,52,208,184,193,203,243,60,155,179,60,70, -105,36,75,174,89,138,241,5,8,93,191,77,203,244,44,205,82,121,205,102,16,87,228,185,252,10,204,124,169,96, -107,29,100,9,193,166,239,222,241,226,165,152,113,150,65,24,229,29,86,194,71,42,82,124,120,228,115,106,21,168, -38,194,250,138,213,81,139,88,224,14,58,121,142,98,224,7,76,107,20,171,120,142,90,214,57,252,128,150,117,17, -115,60,97,124,13,201,27,221,193,91,183,74,134,55,54,175,235,55,4,79,226,107,204,179,140,175,33,143,163,128, -44,26,142,74,212,27,115,104,189,200,128,215,27,187,76,135,151,245,134,6,137,148,110,163,10,136,50,54,236,58, -218,28,41,167,147,68,37,167,34,95,158,149,188,184,224,133,163,250,152,67,185,234,166,34,94,223,199,57,245,36, -75,161,201,175,32,151,115,81,63,40,216,38,45,109,121,0,6,100,14,188,2,242,161,15,80,167,158,87,9,252, -141,124,177,94,158,241,162,38,68,103,144,39,206,55,204,7,153,46,57,252,156,237,84,31,229,219,5,171,40,28, -112,106,106,73,46,93,92,29,178,194,222,164,59,84,215,234,31,174,241,238,81,153,23,208,221,221,135,211,164,205, -96,177,70,111,19,133,228,194,191,21,80,30,248,224,104,47,240,177,161,228,65,109,66,206,125,49,24,78,130,55, -2,45,220,129,8,129,83,47,196,65,60,100,16,131,30,61,5,91,8,235,47,32,8,195,16,19,222,97,66,24, -70,254,192,143,176,94,125,171,24,171,175,65,43,117,39,188,84,224,50,36,186,50,123,17,44,183,60,49,165,175, -93,154,104,118,88,222,116,166,22,237,74,219,132,128,71,188,118,223,142,179,204,99,135,54,142,201,63,250,152,55, -103,183,33,204,56,166,42,40,33,67,254,229,132,226,212,8,125,128,211,92,245,183,175,200,16,61,248,136,14,167, -94,65,74,122,157,250,199,208,149,108,156,214,52,88,194,80,108,187,48,227,117,98,56,113,2,209,212,9,252,244, -211,224,20,241,190,73,231,145,100,185,70,101,148,50,237,172,20,233,147,149,106,112,209,88,100,205,39,21,174,199, -51,104,65,58,103,107,248,49,89,89,2,1,147,153,101,113,162,29,223,162,133,222,190,34,143,212,67,113,9,21, -204,25,114,99,251,38,244,218,20,6,32,238,212,200,140,24,153,89,151,101,146,30,36,71,108,103,245,235,137,137, -185,131,203,177,172,181,168,75,83,160,9,93,8,6,192,53,58,172,55,231,162,113,229,53,25,103,116,90,117,197, -26,254,96,151,150,107,74,205,51,5,178,177,90,196,182,159,4,207,196,14,145,129,187,111,172,24,153,48,55,12, -15,138,216,224,188,138,214,172,94,22,162,25,171,7,172,96,13,42,139,82,70,235,11,14,206,155,45,28,65,233, -80,56,61,87,219,112,104,23,78,10,103,186,65,153,43,182,102,51,188,135,201,96,5,102,185,158,150,103,177,38, -77,25,159,244,169,147,161,49,150,24,34,29,111,47,3,43,112,3,126,70,62,223,193,171,245,242,134,133,5,27, -181,98,103,84,101,169,171,123,22,79,207,217,73,95,229,97,186,70,75,40,207,232,53,151,103,184,26,61,211,48, -16,26,98,136,0,33,48,130,64,21,108,106,100,245,31,60,192,138,10,232,17,44,115,32,127,227,108,119,100,112, -174,136,231,105,34,147,169,68,27,242,215,196,228,241,1,215,185,138,67,251,165,10,40,246,72,155,162,241,177,32, -54,168,161,11,124,21,54,116,111,166,157,112,249,2,45,35,245,119,176,161,154,34,193,208,57,255,186,140,10,104, -152,78,6,233,183,72,175,16,218,9,6,57,84,109,149,210,149,80,222,231,153,150,72,172,179,187,232,237,155,7, -249,213,253,31,230,3,239,231,27,49,241,83,209,187,0,204,248,145,239,87,16,195,145,170,209,141,207,124,226,155, -47,74,123,203,140,223,192,168,46,187,46,213,215,165,14,125,150,139,111,148,235,223,215,171,136,212,155,28,17,89, -213,241,47,120,114,193,221,164,186,232,6,230,36,192,220,84,219,200,169,237,105,126,41,84,161,41,206,108,40,121, -224,86,250,12,255,168,116,16,0,16,164,218,175,71,135,30,190,124,51,241,147,25,158,176,69,92,224,25,123,84, -116,241,55,172,20,105,92,0,109,168,182,158,173,165,204,197,118,81,87,229,187,108,189,26,248,12,181,55,183,183, -230,19,198,246,218,150,176,76,82,209,104,202,240,238,209,117,246,227,106,228,215,153,167,8,170,86,149,118,104,172, -207,173,74,121,20,134,154,48,227,34,207,1,31,237,249,134,91,249,20,100,21,194,138,95,171,14,39,34,208,18, -239,148,51,137,115,101,128,46,135,88,97,166,205,52,103,41,126,111,43,193,163,59,119,195,211,173,209,69,52,178, -233,140,173,187,128,209,57,117,48,64,32,152,249,8,148,9,210,217,26,138,126,233,170,237,111,170,248,55,50,120, -251,243,141,218,126,233,47,57,208,212,55,175,94,62,157,212,142,80,96,90,88,231,48,62,250,108,241,25,58,99, -9,35,248,11,46,84,134,15,70,253,225,221,251,253,225,61,248,255,96,120,219,175,46,203,183,108,131,182,77,242, -113,219,184,24,67,132,5,209,59,119,50,162,97,29,105,239,146,68,135,252,144,185,23,44,177,196,218,4,193,129, -70,33,205,50,29,103,199,66,205,143,208,236,94,10,117,138,84,25,248,252,101,62,7,250,204,140,43,21,218,19, -42,1,95,225,84,244,49,237,52,116,182,46,97,226,47,242,155,161,153,12,80,187,144,132,177,144,165,52,62,51, -177,207,152,50,39,35,138,8,216,108,88,190,214,1,100,87,1,23,34,172,212,22,12,200,175,21,109,146,8,109, -250,64,63,44,252,224,193,32,226,189,7,64,96,1,127,24,247,14,239,14,192,184,124,28,195,111,8,26,25,18, -222,58,64,101,158,108,40,2,233,41,109,132,203,166,149,123,67,104,139,124,106,1,247,217,60,45,212,68,138,128, -35,22,232,224,28,230,121,198,23,210,39,115,225,220,152,36,186,10,226,56,177,101,133,6,227,120,51,61,225,237, -155,36,167,145,255,68,17,2,233,237,22,174,182,122,1,4,94,139,113,211,172,113,77,23,144,229,229,78,110,107, -126,3,128,111,139,107,60,216,107,105,142,32,59,247,102,48,199,107,161,172,240,50,165,115,192,213,244,141,93,66, -223,128,176,191,219,202,9,48,144,107,193,54,154,163,116,112,207,225,143,223,151,243,225,204,101,66,29,128,163,124, -149,28,190,115,185,14,44,235,62,96,212,63,165,117,95,113,32,204,189,130,156,110,97,9,20,133,51,57,242,127, -118,155,236,184,121,225,148,226,155,40,226,211,97,244,23,104,182,19,117,14,69,153,21,50,74,0,81,154,49,49, -164,238,104,198,172,160,16,229,204,44,234,52,181,231,129,143,139,42,250,102,101,206,250,77,105,235,64,25,248,80, -8,187,161,239,211,27,219,62,220,93,37,50,162,132,141,209,241,35,110,101,26,25,219,147,221,223,162,128,166,57, -193,56,195,69,116,30,40,166,194,54,248,67,110,206,181,199,243,164,81,133,186,152,96,119,162,13,46,234,177,152, -23,201,37,12,4,107,7,38,219,155,3,77,70,184,110,112,52,205,185,224,104,163,235,6,183,150,187,58,135,53, -225,117,103,34,195,158,147,131,44,124,221,224,214,238,231,230,65,3,160,7,170,63,154,0,187,179,146,97,208,201, -102,44,132,221,25,208,110,232,194,163,1,177,27,92,153,21,93,120,101,95,164,53,29,243,92,8,34,13,244,33, -78,11,25,12,187,118,22,223,163,225,15,93,52,160,57,183,244,180,53,205,150,177,55,57,238,214,182,64,129,97, -123,182,165,166,164,200,95,36,189,50,207,64,7,128,15,197,174,123,154,49,99,189,173,165,13,62,168,52,100,247, -88,220,135,246,36,137,237,148,7,3,150,157,159,157,221,220,4,206,164,67,99,126,247,179,81,202,27,123,56,86, -46,218,99,127,145,2,53,160,155,108,44,44,192,229,212,184,121,71,145,81,153,37,200,228,193,141,37,64,241,111, -189,89,81,196,214,96,96,0,250,88,100,105,149,51,244,21,169,141,35,207,33,1,249,61,47,198,41,237,111,63, -42,145,137,189,126,245,2,207,88,165,80,51,26,158,227,160,182,198,115,101,84,193,55,66,2,201,36,218,53,202, -98,22,99,238,18,72,132,241,150,60,130,242,188,92,44,74,232,58,23,79,18,113,145,148,148,27,53,126,237,118, -51,240,71,120,45,69,53,94,160,109,3,153,136,170,136,179,1,252,15,51,52,58,41,108,159,176,36,2,198,246, -7,22,28,175,189,133,182,233,211,211,250,129,0,176,141,167,15,11,146,78,204,249,205,244,32,62,10,237,160,169, -180,105,122,122,96,190,14,134,206,247,232,244,97,124,120,255,112,50,140,6,99,110,12,18,85,160,248,122,128,189, -207,149,156,4,26,37,153,178,194,144,88,44,225,0,103,44,173,28,28,73,145,220,252,160,52,20,132,213,94,196, -140,227,217,35,113,183,123,106,108,214,45,162,155,17,176,241,73,58,180,153,97,131,232,14,166,191,103,205,178,72, -202,115,91,103,55,43,241,195,253,58,146,229,171,213,117,15,86,214,31,110,42,20,9,106,207,18,65,62,64,245, -222,157,226,251,11,14,167,244,175,114,220,132,47,69,80,147,15,231,218,84,62,149,76,88,221,167,216,91,243,177, -106,210,169,163,5,157,214,202,206,224,95,92,205,209,242,62,18,39,175,45,97,238,45,127,76,51,59,39,99,203, -199,44,48,153,60,97,2,229,89,246,109,30,108,100,190,138,6,12,23,136,72,195,74,7,214,218,162,116,142,223, -165,115,121,206,206,248,121,114,145,66,235,252,114,153,231,82,211,242,104,16,86,104,171,162,250,145,183,26,166,234, -109,223,80,78,66,150,5,102,227,97,17,132,99,189,97,58,54,140,206,153,121,249,148,159,158,134,180,235,9,10, -76,94,27,29,121,140,181,137,160,102,102,174,55,72,193,142,6,3,107,46,114,83,138,144,81,241,219,77,42,116, -147,22,218,150,39,79,77,185,243,255,104,39,106,69,231,197,209,213,213,197,199,233,38,243,15,215,77,92,222,130, -219,110,251,105,36,109,205,52,68,51,233,128,133,150,98,157,188,206,33,39,70,89,105,234,37,5,180,32,239,176, -181,109,75,247,231,36,16,180,161,240,232,61,194,29,173,126,41,45,121,214,181,11,132,148,77,20,183,146,66,178, -163,5,50,252,240,197,166,115,92,239,184,141,146,7,67,130,45,87,137,216,234,152,15,195,98,208,121,106,56,61, -115,145,197,93,100,185,74,28,117,73,64,239,4,76,174,169,54,10,159,26,99,48,239,43,147,109,200,106,203,77, -211,112,32,176,223,77,5,208,150,43,244,168,168,83,15,5,217,142,149,98,24,9,202,87,49,137,173,69,212,117, -81,205,161,75,116,79,72,192,244,112,147,74,158,67,19,188,228,146,99,224,150,247,127,255,251,63,255,237,223,164, -106,222,146,251,137,183,202,232,18,112,123,252,124,162,101,32,106,248,148,215,7,209,79,195,168,78,234,54,248,45, -130,155,16,72,132,179,167,136,178,202,214,101,167,48,209,20,5,85,80,160,218,150,135,186,157,137,8,4,187,175, -54,60,177,151,111,7,87,63,223,80,179,128,233,66,151,191,207,83,129,174,70,217,200,217,149,28,222,13,161,233, -243,19,116,162,31,140,152,63,0,137,234,109,24,26,94,44,59,197,255,4,132,94,114,194,241,72,66,73,96,79, -198,165,27,79,97,48,159,200,18,101,227,219,176,164,167,32,224,159,99,35,100,188,150,139,222,125,230,31,112,129, -46,65,94,191,250,220,186,195,15,222,150,114,30,69,234,221,188,135,238,119,42,228,241,177,183,40,96,226,148,94, -12,182,255,38,134,29,239,217,62,190,185,228,59,17,167,24,81,185,49,223,77,49,106,3,157,28,127,39,190,19, -80,186,135,59,101,94,172,171,232,99,8,86,56,149,68,207,187,67,218,0,195,11,47,32,208,99,111,16,126,39, -54,223,9,15,254,107,54,213,59,75,37,182,243,132,164,101,82,77,30,95,75,94,6,170,248,41,149,120,138,229, -171,252,48,150,94,128,85,165,84,13,252,60,196,34,108,59,188,20,142,55,41,80,93,35,254,167,74,71,228,127, -147,94,241,236,145,252,28,167,118,144,50,202,59,77,169,2,4,172,76,61,182,61,0,88,4,38,153,90,115,112, -96,91,131,125,84,125,62,142,9,47,187,85,91,148,216,26,232,135,246,234,2,148,0,32,30,9,136,53,105,195, -62,28,198,252,68,164,75,37,249,205,86,43,159,64,229,117,102,223,237,143,125,1,68,225,51,75,121,103,249,252, -122,235,125,86,137,121,140,158,105,188,62,236,171,132,216,134,116,206,181,78,75,236,122,165,122,160,116,161,210,174, -115,202,154,150,219,153,151,136,128,187,51,209,78,194,247,205,198,144,13,7,138,101,236,203,53,84,147,172,218,144, -59,247,106,90,186,38,80,66,220,171,92,216,78,146,19,31,31,196,244,35,31,71,197,87,166,62,100,180,123,8, -14,74,29,121,17,0,168,18,78,221,109,152,93,135,239,176,94,54,221,229,255,12,29,225,131,224,140,11,96,65, -242,169,108,205,103,69,78,45,6,27,160,100,62,167,195,218,198,59,68,224,35,180,50,72,64,137,12,117,32,132, -87,224,154,134,222,151,35,12,213,146,110,213,49,58,105,191,20,209,9,32,26,187,140,127,45,225,162,110,175,249, -229,227,235,207,231,128,52,36,247,112,252,201,39,15,111,171,151,251,142,63,193,201,243,144,200,255,248,147,190,181, -235,110,244,84,136,222,21,233,124,188,130,190,224,73,158,195,59,171,43,111,52,88,93,141,207,57,218,131,208,169, -210,47,198,223,175,75,9,68,218,51,242,217,140,163,136,61,166,167,86,123,169,228,203,82,71,85,182,252,225,230, -93,178,138,134,88,146,169,104,145,241,171,234,191,150,124,158,38,94,176,76,174,122,151,168,118,68,222,209,61,128, -10,55,78,211,76,107,134,216,154,193,120,169,54,243,7,85,245,235,205,89,126,213,3,182,129,169,103,57,62,153, -219,131,152,42,194,61,255,77,175,103,228,212,65,228,13,251,120,76,83,200,222,34,89,166,217,117,244,25,207,46, -184,76,103,9,123,84,164,73,198,202,68,148,189,146,23,233,66,129,33,47,138,134,119,161,189,20,188,84,221,63, -26,212,213,27,36,193,23,146,224,187,2,143,30,245,232,13,217,232,103,15,206,238,207,239,143,116,81,215,66,158, -243,50,45,35,228,50,99,92,166,122,138,45,98,110,180,75,46,161,178,23,252,157,62,136,176,133,107,133,20,252, -172,206,229,50,99,200,153,216,207,96,88,55,237,80,45,205,171,148,157,219,162,17,71,193,237,36,95,86,125,43, -209,111,168,121,52,148,102,92,107,208,17,95,142,117,7,23,139,133,234,137,125,157,54,90,227,69,98,220,67,115, -59,176,53,220,251,83,206,13,132,209,64,131,237,166,67,23,125,179,151,191,89,229,250,109,156,130,103,228,10,106, -172,84,220,94,41,146,213,86,55,109,118,47,89,203,124,140,205,133,111,21,178,157,72,5,154,212,123,103,104,88, -214,72,159,37,217,44,128,77,55,32,205,95,123,160,144,7,14,217,133,161,65,5,65,221,25,117,65,237,18,208, -112,56,28,43,138,86,121,135,71,237,89,61,197,63,127,54,0,202,132,184,25,30,100,1,82,151,245,171,64,58, -214,235,31,150,53,98,236,113,134,141,126,143,184,71,11,142,38,81,91,208,225,45,101,67,73,132,116,242,234,179, -17,27,3,54,180,105,195,109,54,130,127,122,104,9,201,200,162,156,131,109,5,216,45,79,36,8,129,108,184,40, -194,109,8,236,251,122,41,154,64,46,117,187,148,229,210,179,109,193,200,18,132,26,152,14,132,187,84,105,243,30, -110,20,33,226,193,89,67,21,78,221,187,131,52,26,141,198,187,20,230,224,62,201,50,175,63,42,235,26,250,234, -184,196,198,45,203,78,168,26,44,74,22,80,185,85,128,125,223,116,182,7,203,227,246,188,34,90,188,145,143,118, -206,133,6,201,219,174,94,92,110,145,109,112,51,137,123,183,189,155,169,59,132,72,44,245,252,47,69,231,73,185, -226,51,224,161,116,158,180,127,15,86,5,152,242,250,44,201,166,70,103,75,109,131,225,157,251,201,153,169,112,176, -69,66,30,46,47,221,60,173,177,42,16,31,208,88,26,29,97,4,151,56,141,74,156,19,88,34,68,129,125,173, -132,90,245,12,219,90,72,238,13,6,182,201,145,166,137,186,86,250,194,25,241,135,160,7,20,28,214,160,231,248, -154,184,153,120,208,247,170,111,79,167,180,211,212,22,165,239,18,107,23,71,182,92,213,27,33,86,112,241,62,4, -28,181,112,106,119,74,186,72,234,215,139,5,14,154,211,80,47,217,180,242,83,66,189,125,226,188,103,219,74,81, -42,117,206,103,57,13,187,232,201,115,16,49,5,47,203,168,81,147,166,234,30,89,59,143,108,163,221,89,221,57, -202,117,43,71,239,229,100,192,154,144,172,183,101,163,170,175,109,83,238,242,188,139,118,3,54,220,184,203,17,221, -24,184,242,150,137,152,163,168,119,189,61,118,248,7,183,1,46,35,114,43,144,95,22,201,106,12,244,116,246,67, -42,123,72,22,152,214,83,229,225,208,201,124,61,59,31,219,132,171,8,39,185,26,201,59,219,141,118,103,190,59, -194,187,196,160,166,40,194,121,61,175,155,37,64,226,29,132,57,240,2,5,116,123,20,182,114,6,131,135,81,205, -156,22,160,95,206,199,56,120,40,88,229,82,230,75,69,122,46,50,168,27,56,95,109,211,59,197,82,83,197,225, -7,72,54,127,1,1,198,84,123,180,185,49,63,178,11,160,127,46,47,57,23,38,207,157,191,113,83,81,59,208, -10,1,168,6,183,209,170,73,95,40,100,105,125,1,12,105,94,58,143,73,159,56,126,120,27,130,42,129,50,16, -28,148,129,146,217,241,39,255,15,238,119,33,184,87,209,0,0}; +const uint32_t GUI_HTML_SIZE = 17473; +const uint8_t GUI_HTML[] PROGMEM = {31,139,8,0,0,0,0,0,2,3,76,16,197,98,44,33,236,190,95,65,57,174,12,117,103,235,238,222,30,121, +76,102,73,203,132,41,100,245,252,254,172,31,86,151,133,184,39,171,19,219,103,91,215,15,231,59,194,113,233,219, +181,213,15,38,188,161,142,150,64,178,93,19,98,213,129,201,63,132,119,177,4,54,194,58,19,19,176,150,55,215, +187,173,69,41,212,184,147,76,9,90,246,16,250,85,136,44,133,13,196,64,239,193,125,204,217,233,28,122,104,161, +245,169,52,5,18,50,26,223,74,214,120,208,83,217,228,95,49,143,244,244,46,125,188,8,94,203,196,67,15,201, +1,176,252,54,187,8,133,150,142,185,74,203,74,217,156,30,83,102,125,232,230,133,55,17,50,27,74,101,30,205, +64,121,252,151,84,17,136,91,166,15,41,148,160,230,179,233,108,74,217,148,148,241,62,43,145,178,119,249,167,44, +18,67,39,34,15,223,123,58,51,55,53,221,58,185,93,56,90,108,12,27,157,227,131,205,112,187,61,183,228,47, +14,30,208,94,206,207,161,121,238,62,141,122,133,162,190,73,187,147,244,236,206,205,112,174,175,150,252,97,121,123, +50,237,78,182,45,29,77,157,209,201,222,86,126,123,212,192,139,120,184,224,71,231,135,23,249,84,95,235,159,142, +54,134,148,66,196,14,146,150,134,2,13,203,208,253,157,39,66,1,49,66,172,130,71,251,62,20,133,214,143,233, +43,228,231,98,140,236,161,125,182,185,179,119,249,242,255,244,106,99,91,108,5,226,24,252,170,250,114,125,133,37, +27,177,98,193,195,10,180,44,67,222,245,32,199,71,104,215,38,138,46,89,198,240,198,153,179,240,54,206,35,247, +87,98,227,160,35,145,89,109,246,251,80,60,228,229,39,108,243,165,189,160,121,44,226,108,11,192,112,3,89,98, +44,53,50,229,82,148,189,110,228,255,222,25,82,148,229,196,185,61,28,0,139,175,225,12,231,201,25,90,49,254, +138,234,171,205,153,20,89,149,54,43,212,99,152,106,153,24,121,85,74,26,177,49,169,105,204,67,84,209,77,81, +155,73,241,204,70,76,6,129,12,235,102,77,6,80,15,251,172,163,183,70,240,42,201,198,156,243,215,231,74,179, +142,200,89,245,124,214,211,249,223,70,234,221,84,150,50,53,149,254,86,150,236,175,68,106,70,182,240,6,203,252, +175,156,43,38,249,68,201,237,217,109,99,18,58,250,253,162,150,122,35,53,99,82,252,49,32,98,136,136,228,120, +206,113,154,23,101,70,167,30,11,33,76,72,2,225,111,78,99,194,36,203,100,118,87,101,178,230,227,155,235,187, +255,32,88,25,154,100,121,151,172,144,207,227,163,184,69,236,7,1,29,104,207,121,88,185,115,48,207,23,188,246, +100,163,209,5,212,205,194,104,41,177,187,231,123,47,246,51,218,252,138,71,148,161,92,115,45,77,163,213,132,250, +98,116,49,113,167,83,194,3,19,168,159,123,221,79,28,244,153,12,123,51,14,2,166,14,35,49,88,225,32,195, +35,235,114,176,126,234,187,51,184,183,48,28,198,77,45,63,161,29,100,82,145,247,214,142,237,129,9,197,42,28, +44,139,113,161,210,178,201,228,56,234,173,251,215,123,170,85,97,198,209,155,201,26,133,254,201,193,143,65,237,73, +233,207,210,164,57,74,138,162,1,40,190,223,51,62,217,36,250,76,130,2,3,26,42,40,32,69,201,64,35,102, +115,72,196,231,36,45,76,43,127,178,56,170,219,101,171,218,117,251,23,222,234,117,222,162,76,178,182,218,214,237, +74,165,173,50,219,182,80,114,150,230,243,246,255,170,170,253,239,74,103,109,97,164,78,62,23,147,94,81,37,67, +50,206,134,137,166,57,43,80,121,92,206,204,92,40,252,244,218,56,168,182,38,125,17,172,66,246,215,137,70,214, +200,186,38,42,8,72,242,171,106,35,47,201,64,16,236,176,233,137,89,94,220,70,203,16,52,164,108,107,173,68, +211,240,241,139,220,161,76,211,184,18,102,150,206,163,49,138,195,142,11,55,110,240,99,123,228,162,137,94,90,99, +172,195,82,170,165,201,255,248,13,21,223,132,214,50,241,68,226,221,250,239,49,234,10,99,229,97,39,252,198,35, +141,166,224,207,136,180,200,129,208,103,136,147,166,44,71,66,133,153,124,78,154,210,124,215,213,186,230,253,97,223, +204,111,170,34,59,187,16,66,208,17,233,28,216,188,217,139,51,220,203,242,153,41,104,172,86,137,202,64,72,232, +46,94,221,78,80,40,34,58,82,36,97,77,72,34,13,40,163,168,2,148,76,84,192,211,211,75,68,24,176,227, +219,69,116,129,95,233,135,89,228,142,134,221,212,207,229,174,99,29,78,55,20,154,14,64,155,40,141,227,243,115, +211,59,33,129,162,10,14,242,216,40,84,53,14,93,135,53,28,154,195,249,51,140,182,110,227,107,218,104,50,12, +75,107,127,128,88,147,237,120,147,234,181,117,88,207,157,53,154,188,168,67,203,178,144,96,7,246,14,254,105,196, +0,118,227,96,209,24,220,41,21,239,17,63,61,197,184,138,13,208,39,68,65,97,200,200,228,207,123,148,48,63, +255,194,237,177,38,189,205,79,212,87,105,129,156,173,76,212,249,57,239,208,142,4,51,194,46,206,212,156,123,57, +24,156,144,158,156,29,116,2,59,97,76,50,164,14,157,199,145,61,48,176,235,29,9,204,228,64,79,90,122,158, +150,29,164,206,65,169,43,221,68,184,72,106,41,172,38,149,184,248,39,25,120,125,135,208,241,178,208,50,121,217, +91,142,220,41,7,26,156,210,161,217,136,246,100,104,234,182,197,160,142,152,117,184,110,106,84,32,118,71,43,156, +214,231,231,109,91,141,132,245,132,69,133,8,228,131,68,45,232,66,45,17,134,177,234,228,74,219,214,210,60,22, +43,89,53,134,179,213,192,61,86,236,16,167,228,196,146,16,218,179,204,37,246,49,16,27,198,252,6,103,31,3, +163,216,224,111,241,73,249,222,158,115,208,20,82,101,72,57,213,112,99,175,23,239,143,19,207,112,33,240,220,76, +9,201,9,13,125,36,176,84,16,210,239,196,149,33,132,76,139,146,97,192,174,184,133,18,21,125,207,191,192,3, +75,17,157,6,130,86,224,220,14,5,148,134,213,86,73,61,253,207,127,239,146,18,112,90,162,109,121,60,43,230, +206,101,13,20,49,218,81,197,193,46,112,120,100,6,186,145,28,137,34,8,118,184,200,249,158,15,132,182,96,195, +107,36,129,18,106,120,114,236,101,144,195,14,166,176,130,5,44,225,94,104,212,33,25,74,219,54,112,41,238,189, +100,73,228,134,230,137,179,12,141,45,251,170,252,90,118,100,104,83,97,225,102,217,92,56,151,196,25,133,35,212, +233,120,81,85,165,76,6,126,49,141,9,38,194,172,152,212,62,152,71,96,213,172,22,82,31,207,45,232,202,52, +195,253,142,46,50,96,27,215,231,209,55,173,147,93,88,212,182,101,83,142,96,107,120,245,161,38,154,238,7,224, +244,225,209,148,140,225,143,11,4,156,90,95,133,169,139,61,216,98,184,197,47,134,219,216,126,157,30,8,126,131, +219,184,13,62,52,18,6,44,18,97,232,139,138,118,236,11,182,19,247,142,127,204,75,44,54,33,118,212,208,136, +72,9,26,83,135,19,156,112,22,49,145,101,45,207,72,236,57,74,59,255,122,57,201,81,204,68,203,226,203,231, +252,87,200,94,9,202,99,115,222,188,179,42,217,63,48,100,15,118,98,215,182,233,145,69,192,74,76,157,49,231, +194,242,138,68,118,212,142,68,142,102,189,108,91,182,68,3,224,96,39,131,96,233,188,221,142,188,236,161,155,204, +173,52,210,182,93,225,36,239,140,121,21,119,113,122,129,232,22,98,117,242,230,117,140,32,67,100,71,196,15,181, +49,141,50,81,139,43,54,197,179,74,30,213,226,206,241,1,247,104,189,245,73,84,166,67,197,140,219,205,113,27, +177,68,17,79,96,175,30,228,46,35,65,128,181,216,176,29,250,142,55,120,41,22,144,137,203,73,246,233,211,132, +59,38,72,75,65,240,141,81,11,86,181,20,184,151,156,182,56,215,88,14,93,227,154,45,9,112,57,59,63,239, +155,129,111,94,57,223,60,68,53,116,82,23,171,161,64,100,85,16,20,95,43,143,175,64,124,76,139,106,86,144, +254,25,121,170,192,237,226,4,235,218,93,57,87,76,91,244,209,29,35,255,167,8,64,187,112,19,239,115,145,193, +125,186,60,138,151,74,168,182,69,135,119,58,147,167,60,24,39,217,177,183,73,30,159,138,165,14,243,30,53,160, +252,29,193,97,64,249,110,24,163,92,108,74,161,129,132,100,219,7,73,69,106,228,169,107,193,126,143,252,165,207, +3,140,189,117,138,182,117,195,106,160,103,46,35,15,70,0,197,145,9,8,92,14,147,245,90,170,204,229,175,21, +135,212,122,141,37,96,149,212,8,244,24,84,13,118,154,80,97,66,50,45,22,165,187,207,146,175,253,93,148,156, +139,47,20,22,27,164,206,173,251,225,125,69,85,75,45,181,249,87,137,136,36,67,78,9,125,225,175,217,195,101, +16,167,81,53,196,125,144,211,189,183,151,241,39,42,62,212,236,98,78,242,150,54,197,68,212,59,102,213,45,103, +202,7,96,19,143,199,145,15,167,163,222,53,218,54,9,141,172,13,83,60,54,145,57,31,175,127,142,15,100,46, +15,234,112,202,40,38,86,110,238,1,195,82,38,238,222,69,110,131,242,179,32,244,22,241,72,217,154,113,146,59, +5,172,209,134,223,130,107,49,30,115,208,214,155,20,229,217,154,155,32,160,30,29,249,222,195,131,2,132,35,227, +48,7,80,195,17,163,33,206,133,208,216,28,195,211,2,223,123,59,25,87,94,124,88,254,42,215,255,50,231,133, +80,35,65,119,59,149,49,235,50,73,37,251,124,153,172,81,61,242,47,159,137,36,7,90,51,213,77,181,149,250, +50,169,37,227,72,89,198,111,230,194,186,44,112,47,150,23,170,239,130,12,75,116,23,252,98,213,99,71,51,117, +94,204,133,1,19,235,182,149,84,165,95,109,164,50,84,86,75,37,145,43,40,226,109,132,145,0,21,218,149,85, +31,1,76,122,198,178,68,45,165,174,154,186,220,77,165,185,86,8,247,183,199,219,27,84,189,112,169,114,197,143, +216,251,73,47,18,236,111,109,148,115,228,48,31,243,195,82,77,207,3,196,119,61,30,16,160,26,213,98,67,201, +149,120,18,223,71,61,172,124,223,36,139,107,202,182,253,56,195,236,134,222,22,220,216,233,83,114,163,119,175,214, +82,77,140,70,58,233,220,100,159,38,84,12,99,194,187,63,21,211,219,246,224,228,163,47,2,219,32,248,132,173, +234,243,123,116,13,30,123,129,125,51,104,117,139,198,72,166,120,100,61,101,48,3,134,15,19,219,23,38,93,225, +129,170,113,57,251,249,232,203,156,169,80,146,212,227,174,165,44,126,88,215,110,79,236,186,248,229,174,7,230,19, +178,6,18,120,130,103,200,156,167,185,116,236,10,150,112,7,247,240,2,91,120,128,71,184,134,111,112,3,63,224, +86,184,200,62,140,139,56,53,40,229,248,160,110,155,12,146,72,116,182,204,245,224,89,216,75,192,142,36,80,63, +119,117,68,34,102,207,115,14,108,103,67,236,130,83,58,169,249,132,244,100,221,255,132,62,110,173,77,189,8,221, +37,76,91,129,187,111,125,177,246,136,64,136,165,152,209,165,155,206,225,65,236,226,109,188,117,176,225,38,41,27, +25,209,82,84,64,69,16,241,61,37,140,154,186,194,78,112,252,216,172,228,42,98,99,220,101,42,162,59,70,243, +185,13,130,219,176,159,9,181,173,30,98,183,117,42,236,43,26,123,129,7,30,177,225,92,110,231,96,58,148,152, +184,197,177,219,47,190,115,216,6,193,54,172,155,5,155,114,159,6,138,23,236,213,38,49,116,223,117,61,235,196, +83,207,168,120,176,9,143,18,133,203,162,108,69,100,167,114,202,153,177,83,47,176,227,50,33,97,33,106,212,136, +109,69,135,209,167,73,183,225,82,154,63,165,46,54,50,155,210,194,191,233,106,69,241,253,176,195,111,241,19,174, +214,176,93,206,161,116,147,240,49,34,246,226,129,57,92,9,159,236,46,61,90,88,113,119,206,191,119,20,119,88, +146,192,106,93,41,169,204,127,21,101,121,91,53,10,29,242,212,44,227,240,110,203,159,69,230,119,144,168,92,106, +112,98,157,247,183,200,175,207,245,130,30,113,245,193,241,30,100,42,113,79,7,249,119,22,157,153,140,108,62,124, +192,85,231,85,83,102,151,126,211,143,117,102,117,64,97,232,163,85,47,105,68,215,182,218,150,130,194,21,131,46, +231,123,103,97,194,129,91,208,81,7,74,106,118,54,245,133,187,218,67,104,120,235,195,47,182,255,226,250,33,226, +190,74,210,252,56,11,147,93,185,46,52,165,98,240,136,105,204,227,87,107,155,62,111,121,196,20,115,168,10,90, +155,61,98,142,235,45,24,220,170,3,15,130,167,14,142,247,209,251,164,220,189,164,78,78,31,68,116,218,66,252, +230,193,185,216,224,113,255,20,48,179,241,211,150,193,104,51,67,47,29,202,219,201,145,218,239,194,192,181,13,122, +26,190,137,11,248,7,66,141,87,223,80,105,94,73,112,29,4,215,76,115,216,9,31,89,188,162,189,154,15,161, +131,195,13,234,225,230,88,15,55,167,244,112,51,208,131,203,100,178,234,245,159,164,121,116,240,253,22,179,93,233, +108,44,8,206,207,191,125,253,237,95,248,228,8,196,107,134,28,207,230,198,151,14,147,125,15,41,153,141,63,5, +135,119,235,140,66,204,202,103,226,118,121,170,146,53,250,74,151,6,59,133,181,45,187,59,189,234,213,137,104,126, +8,119,136,29,222,75,190,220,93,59,239,236,234,224,120,215,93,45,125,177,191,131,5,51,112,92,163,252,224,241, +143,104,246,99,254,238,2,134,169,123,3,211,111,47,198,15,140,30,238,59,207,188,18,244,181,176,206,65,37,106, +196,169,200,157,46,9,130,35,231,143,217,208,101,7,174,204,35,55,232,13,92,193,48,81,40,93,146,96,143,11, +235,254,214,205,133,233,122,59,236,185,23,12,52,42,155,117,111,40,229,22,59,171,168,209,133,119,177,198,230,205, +147,233,215,198,155,220,212,61,228,176,39,209,204,166,84,96,142,135,201,18,249,193,147,16,163,17,33,218,197,79, +97,89,165,73,73,9,34,33,143,126,199,239,83,72,15,194,246,202,231,175,74,60,1,225,177,50,233,30,32,6, +239,180,62,148,211,102,159,177,188,249,119,142,234,1,42,203,88,206,39,74,20,241,233,63,239,238,166,204,254,123, +138,127,158,110,183,219,112,251,123,88,233,229,231,223,46,46,46,62,19,231,176,227,209,233,141,108,7,57,90,68, +16,228,28,26,167,229,146,148,54,60,216,26,191,121,219,150,244,218,141,118,152,184,33,235,6,249,225,86,106,68, +19,4,221,191,11,202,25,159,251,187,13,158,5,235,213,212,182,41,15,63,200,207,33,19,249,135,107,163,178,23, +152,215,220,26,243,15,210,49,106,80,133,137,215,82,61,84,230,122,54,92,65,93,132,10,213,53,23,111,102,93, +26,54,97,89,219,62,115,202,18,241,247,28,4,25,153,188,89,161,32,158,187,94,219,30,230,40,221,246,199,227, +36,146,195,80,100,126,51,109,25,143,93,12,246,246,252,190,176,36,110,138,238,255,31,239,182,100,177,5,110,70, +151,238,186,22,66,181,45,85,166,5,88,117,153,89,129,46,204,15,8,20,175,208,106,61,165,67,177,171,16,16, +145,125,140,124,108,69,224,6,4,39,211,23,153,117,67,162,130,61,194,225,169,83,223,83,223,51,5,57,172,113, +182,228,144,113,255,74,218,151,75,83,97,222,132,36,88,224,150,119,79,148,211,8,85,225,93,221,85,83,178,88, +170,251,197,255,200,212,150,88,59,235,255,77,220,96,205,26,217,224,17,4,27,166,1,61,186,60,118,234,169,56, +248,244,225,221,138,156,49,8,106,70,45,159,80,37,234,184,38,199,198,152,214,23,19,184,61,119,38,193,41,184, +225,140,114,67,148,12,50,178,212,178,174,187,128,50,154,226,92,181,182,194,118,51,4,190,238,119,95,34,163,29, +17,152,66,55,15,148,195,120,25,159,36,222,173,113,135,78,249,177,195,231,119,58,140,221,128,112,242,125,255,158, +197,92,82,52,140,238,25,159,216,170,38,43,158,159,101,214,21,54,93,165,249,39,127,117,177,217,90,21,249,129, +147,88,66,2,232,162,113,119,25,140,70,25,36,179,164,47,53,159,249,188,11,250,138,224,216,159,68,116,88,82, +62,50,73,175,53,180,154,6,129,109,152,1,201,223,255,225,128,80,182,206,18,134,40,129,253,126,244,207,68,23, +105,12,223,115,207,132,118,68,36,211,118,235,134,239,143,254,3,184,166,115,128,118,52,78,253,69,21,75,102,168, +64,238,254,181,19,166,195,91,121,188,21,232,33,99,223,152,60,250,55,215,254,123,21,54,106,229,210,249,190,203, +36,7,86,185,255,223,73,158,149,163,64,48,125,23,181,44,137,70,219,94,179,170,243,109,238,109,154,54,219,74, +208,61,94,188,73,32,29,17,78,92,157,94,98,94,64,169,103,36,5,148,91,229,46,250,202,230,126,150,162,37, +210,61,39,82,192,234,158,97,173,71,209,83,236,155,119,88,122,132,165,103,96,106,73,16,109,123,34,240,72,247, +22,63,209,206,164,122,54,107,102,59,220,18,117,147,66,254,63,123,95,191,214,198,237,52,122,43,176,111,158,60, +171,131,66,108,210,207,117,54,126,8,33,9,45,129,20,72,104,235,242,163,139,45,195,54,70,235,238,202,36,20, +251,14,206,13,156,191,206,45,158,75,56,51,35,105,165,181,101,151,228,253,254,232,7,222,149,70,35,105,52,26, +141,102,164,89,207,156,233,200,252,214,218,251,12,115,163,157,193,223,187,18,123,57,240,253,216,23,173,100,64,197, +78,107,206,195,60,92,235,226,60,100,49,46,152,246,198,20,56,48,228,2,42,241,135,103,200,132,71,200,86,105, +188,158,67,38,100,48,146,114,231,241,88,15,86,79,157,1,94,116,39,244,185,51,74,44,120,180,168,116,183,87, +128,31,95,87,85,110,14,243,178,210,234,162,245,205,151,254,234,153,104,171,132,41,89,64,185,9,210,170,81,144, +231,232,5,203,26,100,120,167,237,216,251,68,188,119,94,198,155,208,25,4,210,93,165,150,210,236,203,142,35,152, +209,249,151,59,146,128,147,137,212,184,9,7,130,75,242,66,229,248,96,125,45,94,167,94,232,222,146,31,59,189, +35,63,127,26,193,207,78,180,1,156,138,71,3,4,7,109,188,130,10,202,36,236,25,173,155,24,75,54,227,176, +3,190,201,7,13,96,131,158,151,29,159,17,231,116,253,233,212,250,62,209,56,130,134,61,132,226,33,80,167,223, +214,141,40,103,4,25,222,70,59,120,99,108,243,77,72,40,63,244,19,216,127,181,184,60,102,22,219,228,162,89, +214,186,31,58,230,252,74,80,106,116,194,201,126,171,161,162,49,89,118,149,119,176,128,183,25,71,251,166,30,84, +129,66,152,123,135,28,102,53,245,54,45,141,201,117,184,105,135,199,183,155,129,8,22,233,68,155,143,185,196,129, +21,201,188,22,229,252,70,218,69,45,105,15,219,33,61,190,160,231,62,250,226,113,66,147,140,196,244,60,45,124, +9,82,31,8,200,67,54,149,221,178,44,74,18,219,149,80,148,26,47,135,35,167,142,54,220,13,172,248,46,26, +187,243,29,20,197,128,46,144,26,11,20,162,119,51,15,67,223,238,12,10,218,98,21,70,146,79,216,29,16,102, +166,174,202,226,35,24,28,96,160,211,22,191,114,27,244,186,169,110,184,220,4,233,40,179,137,68,238,208,86,56, +251,180,158,234,196,10,203,118,109,106,98,31,180,156,112,16,65,151,35,89,88,82,17,107,88,198,29,171,2,105, +32,115,164,87,127,221,4,97,235,38,11,143,180,111,213,133,230,81,201,248,113,140,73,140,205,26,253,131,49,239, +139,208,188,112,200,204,163,64,43,164,171,230,202,50,127,24,177,53,130,142,245,153,8,125,188,162,69,142,72,164, +221,39,126,202,223,243,151,252,53,164,253,129,0,175,240,207,15,218,86,204,159,27,243,201,131,90,203,226,63,106, +14,228,127,165,181,58,224,78,157,253,233,52,35,224,8,250,137,79,185,224,175,65,229,102,88,7,213,89,166,167, +144,3,105,49,253,226,44,72,160,82,0,134,159,89,237,195,20,207,104,207,94,239,208,241,69,247,21,10,188,79, +94,1,87,97,82,79,156,57,177,249,139,119,16,233,117,218,230,63,197,3,193,125,19,253,79,118,237,213,13,249, +51,254,4,210,116,139,188,78,229,166,74,5,95,39,203,178,245,196,246,84,87,161,147,97,32,140,101,158,75,198, +23,206,147,80,59,15,186,244,215,106,242,240,203,21,100,64,113,142,39,64,145,17,13,214,3,64,171,155,222,62, +59,163,135,190,155,137,119,168,226,153,212,244,148,175,159,110,78,64,75,130,191,233,186,166,94,145,158,134,197,105, +103,73,122,218,20,48,164,114,233,94,34,245,205,116,52,200,243,180,206,64,106,15,243,145,18,101,83,79,181,163, +131,112,51,70,148,203,209,29,82,222,134,224,214,5,118,24,224,108,61,176,242,21,90,146,210,58,162,155,68,117, +247,97,167,110,199,62,15,219,58,161,46,194,231,14,42,18,161,59,181,202,117,192,233,111,106,7,107,61,181,48, +64,123,168,160,69,42,52,95,143,215,251,154,161,250,198,116,152,166,180,53,10,55,15,10,153,118,209,240,105,45, +202,241,212,175,177,152,231,168,39,172,179,46,181,36,26,10,26,244,215,92,121,254,253,114,51,79,21,39,246,119, +83,184,244,149,251,159,23,145,126,117,79,164,97,132,66,52,230,198,215,92,121,27,144,197,19,126,2,151,185,158, +127,172,65,10,203,64,175,211,111,248,207,129,194,193,61,72,44,98,128,240,102,141,99,161,88,43,61,44,1,40, +183,75,145,113,8,216,229,99,33,40,99,180,106,235,125,81,232,241,198,53,16,214,147,88,248,29,87,194,215,165, +52,41,191,117,167,54,69,172,136,146,146,117,233,233,125,42,160,1,10,104,41,205,134,77,112,74,103,137,106,12, +123,169,241,58,146,126,23,38,233,154,192,70,122,13,42,132,147,28,167,86,59,232,9,237,77,179,45,252,158,57, +189,162,159,66,69,246,156,13,54,194,28,127,193,133,64,146,91,235,20,183,86,190,250,4,52,109,52,54,23,86, +52,79,42,241,66,92,76,46,223,107,221,106,46,33,86,221,5,183,102,95,196,186,185,194,180,173,221,166,105,79, +115,219,105,43,146,196,250,141,241,79,162,75,152,184,245,218,234,34,70,141,145,250,87,143,6,1,160,169,9,127, +211,94,139,183,206,152,158,205,209,219,104,67,193,188,221,136,30,225,67,251,108,99,195,78,194,102,207,38,162,113, +126,80,164,127,128,24,204,135,42,102,164,50,33,240,91,180,227,161,172,163,205,120,61,233,172,136,169,4,227,139, +169,231,46,149,54,237,70,81,1,26,250,169,198,70,160,184,48,27,116,124,111,106,167,167,122,47,250,195,195,135, +63,160,246,72,37,202,6,196,243,135,15,159,195,47,255,100,22,72,153,198,167,102,131,140,85,225,17,236,248,125, +154,166,167,192,3,182,222,83,191,1,97,105,73,162,16,138,58,233,168,123,244,62,125,101,196,164,0,46,183,243, +136,177,36,150,11,116,145,11,52,177,45,96,140,191,79,79,103,220,106,6,141,30,61,120,248,240,129,213,199,149, +238,74,7,150,63,154,105,208,34,250,109,152,223,227,54,48,200,31,90,108,161,76,123,73,230,200,82,192,101,139, +74,109,203,252,58,67,212,47,203,236,26,221,10,241,203,101,153,12,44,187,130,197,19,212,90,169,150,21,212,201, +13,109,94,35,29,12,105,160,21,175,124,146,189,103,220,17,201,82,111,198,168,243,122,96,245,128,246,93,247,105, +158,169,128,133,135,184,47,200,121,87,41,253,117,235,109,120,29,157,78,129,213,132,111,32,10,87,68,200,176,23, +118,168,102,72,13,199,173,165,229,86,76,255,241,225,195,31,181,197,129,215,26,93,99,44,255,122,248,240,175,122, +44,121,105,70,19,79,149,154,209,44,87,210,25,123,93,97,179,77,155,37,36,165,146,170,166,130,150,182,192,30, +118,46,149,212,58,54,163,42,51,17,178,108,4,7,223,187,254,224,68,44,111,236,240,250,35,145,149,230,24,50, +58,214,50,16,129,253,76,246,197,168,137,10,21,117,119,96,153,230,109,153,122,9,138,183,91,45,214,193,226,177, +76,131,173,137,149,191,10,85,190,208,231,118,78,4,122,166,204,192,245,107,194,224,234,9,188,230,112,157,251,184, +58,26,24,255,198,115,112,195,198,10,181,14,51,71,152,9,135,210,216,60,162,1,98,142,133,124,227,20,169,80, +96,12,106,88,30,7,13,196,129,78,200,174,164,131,241,51,108,36,94,231,154,200,129,24,230,82,12,156,33,237, +114,84,92,100,163,19,80,179,186,238,49,9,65,126,204,37,28,54,234,234,159,100,57,46,131,39,8,81,137,209, +176,139,127,146,187,153,227,147,43,225,169,149,162,122,67,119,166,234,11,7,214,156,96,175,124,116,194,199,101,106, +221,194,233,90,49,33,69,21,18,172,78,149,66,6,3,64,97,1,123,40,56,206,58,218,110,129,135,19,71,183, +177,226,181,189,136,153,109,210,75,131,111,243,2,122,110,192,72,93,54,13,196,195,47,229,204,190,24,0,172,212, +67,53,235,40,183,25,76,165,123,214,158,76,229,93,205,210,126,137,77,77,186,250,236,161,226,145,35,77,196,239, +80,189,208,215,194,184,46,128,118,44,188,60,20,152,254,210,42,176,26,18,141,12,135,31,165,69,253,66,232,27, +127,69,73,220,212,89,86,191,228,37,150,236,150,201,157,144,104,81,201,46,70,216,2,14,137,73,64,221,2,35, +213,108,166,101,30,241,223,141,224,183,130,31,11,236,234,141,72,143,5,15,215,4,112,75,187,122,3,171,64,69, +7,245,142,139,73,217,23,199,250,226,160,24,164,148,115,36,178,190,58,128,185,127,35,48,1,94,7,183,180,159, +195,183,119,7,111,183,143,142,183,159,239,239,158,255,112,124,120,112,126,248,252,135,221,157,19,204,121,177,251,114, +251,221,254,201,249,209,238,206,225,193,1,36,158,239,29,156,236,30,189,223,222,63,127,115,28,6,216,223,123,179, +71,101,143,15,119,126,220,133,2,135,231,111,247,14,94,157,239,28,190,216,157,75,222,62,121,29,0,180,53,248, +232,119,223,239,30,156,156,31,31,190,59,218,217,61,63,124,123,178,119,120,64,213,239,190,121,123,242,139,201,125, +189,125,240,98,127,247,200,111,150,3,213,146,42,144,3,22,147,48,30,147,181,186,9,119,31,115,117,181,227,238, +217,37,235,109,46,112,16,170,100,9,214,25,95,209,227,173,175,197,19,190,72,163,232,113,85,128,199,9,84,254, +226,113,119,119,239,48,125,242,80,149,153,172,112,128,211,143,226,66,231,70,124,9,209,163,173,136,175,24,170,173, +22,255,219,145,54,237,10,51,10,18,42,190,109,242,21,42,65,77,62,67,187,65,239,22,113,236,29,28,159,108, +31,156,236,109,159,236,190,72,31,181,207,210,168,153,22,193,108,64,72,211,16,232,71,218,2,32,247,106,1,14, +223,238,30,164,88,30,31,234,82,251,135,199,88,100,11,210,205,179,159,5,85,62,49,57,88,211,194,228,8,137, +102,153,221,228,151,153,66,155,100,228,96,201,117,91,103,161,220,26,128,109,115,197,68,92,159,175,236,225,67,223, +180,91,222,218,229,202,149,38,71,169,91,124,140,134,226,148,174,118,125,105,243,90,164,254,186,113,33,62,251,126, +229,110,168,136,190,239,11,91,122,221,26,109,36,90,143,13,58,103,155,177,133,74,202,88,40,4,148,19,189,242, +12,158,36,252,184,98,117,55,220,109,128,230,166,85,164,180,81,139,209,185,3,60,213,126,12,9,237,199,18,180, +104,125,121,2,86,127,255,64,191,104,90,234,83,175,123,135,6,113,157,160,226,122,185,115,37,200,213,81,166,10, +106,195,71,219,64,104,63,170,61,138,44,47,93,165,237,2,137,106,108,249,25,151,221,117,25,59,92,28,149,253, +245,50,217,21,205,68,111,135,30,187,158,174,112,67,40,126,78,109,119,70,158,65,14,126,128,236,150,78,194,68, +111,196,117,17,71,27,177,240,147,81,149,146,240,203,54,34,22,241,210,45,171,150,5,235,74,112,147,142,10,237, +144,30,102,241,129,112,192,250,248,42,131,50,111,39,165,88,44,231,195,46,105,124,208,247,179,43,230,233,100,83, +244,153,49,105,116,235,29,161,13,189,157,197,93,171,48,247,108,244,47,182,31,159,233,142,80,44,220,96,234,113, +228,244,215,12,211,14,148,218,17,177,48,117,124,8,79,250,227,219,235,139,2,14,225,232,95,212,29,252,231,56, +42,145,24,248,248,49,43,7,231,232,164,131,94,60,249,190,221,118,147,240,35,177,163,119,55,189,86,196,46,4, +185,255,106,69,105,32,70,66,129,178,163,219,138,42,5,62,105,7,46,115,10,212,131,7,186,113,233,7,193,165, +53,156,75,46,87,141,174,180,67,43,155,92,243,82,183,252,72,12,255,134,119,180,142,124,180,100,36,141,139,89, +251,86,47,227,75,212,179,174,179,113,44,209,204,127,2,66,9,94,146,35,193,141,238,133,143,125,220,193,37,33, +147,109,23,139,27,181,63,105,205,120,33,71,183,201,162,53,27,161,80,213,109,123,187,4,70,158,153,104,199,120, +189,54,177,104,100,201,139,87,46,102,92,21,116,240,37,185,156,241,61,205,87,162,67,127,211,69,15,23,105,220, +234,74,72,230,249,186,82,217,201,211,220,243,117,229,198,215,85,208,175,79,17,141,30,88,81,87,160,240,47,199, +231,15,244,252,129,113,42,163,245,202,61,97,43,54,44,185,45,66,206,139,183,6,204,209,203,238,196,144,243,141, +85,220,38,173,220,242,6,246,8,62,158,152,116,211,26,141,149,110,246,154,176,102,94,193,24,21,113,245,189,77, +1,91,227,93,26,44,6,131,160,254,211,95,93,211,7,100,149,144,53,193,245,149,76,25,194,59,108,16,36,130, +59,73,115,239,58,28,42,215,91,44,225,250,34,13,102,114,240,250,151,168,116,42,21,25,152,146,214,237,229,202, +171,102,187,223,137,184,246,149,77,210,22,167,71,165,219,108,146,47,232,205,21,121,227,237,162,17,47,162,174,57, +90,27,35,50,243,19,11,223,53,47,26,23,137,29,3,21,113,161,143,244,161,65,19,173,200,140,88,124,206,28, +226,182,147,211,41,90,134,155,164,75,5,25,70,152,118,132,150,100,102,85,230,77,218,214,225,169,143,162,150,91, +69,83,240,236,103,127,221,70,188,176,98,169,112,13,255,84,211,104,226,17,166,208,100,9,219,126,28,117,250,29, +67,147,35,243,19,147,87,124,29,227,35,56,123,19,114,187,225,198,109,24,215,109,90,6,120,252,46,176,230,1, +202,144,47,215,184,23,75,82,26,58,122,178,151,155,218,117,166,232,182,5,252,90,59,161,113,136,193,72,106,147, +17,207,241,208,180,135,23,198,3,6,35,71,66,40,108,180,238,119,209,45,226,9,75,38,49,218,152,116,122,159, +80,77,252,146,72,250,71,143,16,241,132,94,74,189,120,34,63,88,115,184,151,212,161,22,208,61,105,208,166,145, +247,29,179,214,79,135,108,70,20,37,125,174,244,156,126,128,32,41,29,143,226,225,88,234,102,49,70,51,182,244, +189,195,32,61,102,60,75,137,240,100,139,165,154,39,120,43,63,155,78,195,72,253,182,225,233,5,205,151,125,222, +135,193,241,199,102,245,1,9,203,61,56,12,205,114,118,173,244,199,147,104,102,167,158,123,49,13,49,163,189,52, +122,207,32,191,137,152,225,2,175,241,196,136,115,105,233,91,81,215,131,19,18,233,76,61,126,203,102,205,169,175, +185,197,76,236,250,164,19,248,222,65,235,188,200,250,31,106,125,161,192,227,12,72,91,195,203,189,26,152,10,235, +213,216,157,1,97,188,56,211,43,203,105,208,219,186,65,14,12,20,223,208,92,20,130,197,166,214,72,98,40,234, +148,169,27,145,141,14,75,160,35,212,30,209,249,208,64,30,96,0,173,23,81,84,249,95,130,209,250,137,50,101, +210,81,29,189,185,232,168,250,36,82,135,25,30,138,105,65,199,86,60,197,54,232,219,171,29,40,149,42,104,212, +214,217,204,219,219,188,247,29,133,247,60,231,35,172,27,107,198,67,241,63,94,122,162,22,49,114,108,113,222,145, +127,203,111,251,177,161,250,136,225,159,212,188,229,181,229,61,71,105,148,235,125,83,24,93,140,36,166,211,249,146, +238,106,98,105,69,200,238,236,209,246,164,205,221,141,225,68,113,119,90,13,207,37,120,119,135,147,133,147,25,14, +212,30,195,192,70,109,122,101,72,2,250,203,155,135,132,171,207,67,227,194,240,172,110,138,57,197,52,159,236,206, +52,61,123,246,172,205,219,186,18,15,169,57,221,180,31,159,199,239,5,191,51,99,154,72,127,116,73,206,226,128, +176,4,254,46,167,186,27,253,215,13,7,236,121,252,18,80,3,150,68,240,60,145,238,188,135,162,90,178,92,138, +114,79,14,11,116,191,206,226,79,193,149,35,115,60,50,199,87,184,22,72,221,198,18,102,122,129,188,27,139,186, +14,156,62,224,192,172,75,219,83,149,62,207,201,197,73,215,141,75,61,46,5,227,167,80,1,23,188,132,254,23, +49,174,31,93,21,231,44,201,73,46,127,90,41,20,195,171,47,222,106,204,198,157,90,247,118,98,165,35,154,82, +33,186,64,155,72,35,145,4,138,164,148,18,47,41,187,232,55,181,234,222,81,120,96,92,215,134,171,67,140,6, +10,110,90,210,107,243,150,121,118,145,140,92,19,154,61,10,92,202,74,151,230,191,153,159,203,180,100,234,101,93, +55,38,160,60,147,196,60,37,95,53,110,82,173,15,232,143,127,206,30,82,232,53,5,247,143,223,180,218,173,39, +252,149,72,31,255,35,238,38,89,191,15,233,211,108,148,95,202,107,122,2,203,114,222,159,226,41,226,17,212,52, +237,103,227,105,127,148,143,227,238,250,219,76,93,189,99,211,126,49,42,202,233,160,184,206,101,6,5,134,192,240, +211,225,168,40,6,211,97,1,239,151,163,219,241,21,64,195,189,192,171,162,204,255,154,130,63,232,82,76,71,66, +41,81,78,161,158,43,149,203,203,233,117,86,126,16,37,192,189,158,158,78,1,107,1,131,71,21,142,179,28,176, +140,139,92,34,124,117,149,141,197,180,82,197,24,254,148,249,7,129,106,224,228,242,10,223,138,15,98,138,51,18, +144,192,93,13,50,87,226,93,237,41,82,137,112,193,83,222,47,6,244,171,170,233,205,244,134,226,213,193,79,169, +166,31,49,102,216,199,50,167,214,124,2,28,59,140,245,182,31,253,122,246,152,255,16,38,117,29,37,238,185,72, +23,117,253,120,213,232,68,21,61,68,105,51,35,102,221,199,64,191,105,255,74,76,203,108,240,56,79,188,215,199, +57,211,145,12,4,243,86,166,7,110,115,50,191,23,252,64,123,65,164,200,142,13,235,24,161,32,67,193,195,195, +94,54,90,25,186,164,154,205,69,112,250,113,190,158,119,159,133,231,106,133,189,0,141,185,189,104,241,34,109,196, +163,165,247,86,231,243,244,204,139,206,194,155,207,176,111,195,107,19,215,146,125,152,95,78,86,123,82,104,241,239, +129,245,248,120,251,229,238,121,180,33,64,235,171,124,64,185,172,54,44,24,170,6,89,206,62,147,115,5,229,191, +246,213,208,60,255,75,164,250,106,189,127,166,16,119,45,222,9,63,209,108,223,166,246,222,62,159,92,0,94,239, +156,223,28,152,139,218,70,232,197,96,102,42,10,112,51,52,131,78,124,254,37,32,141,20,52,81,86,121,5,39, +115,4,199,17,197,110,102,151,25,22,58,86,5,44,209,131,244,23,157,243,98,174,146,244,39,76,151,0,106,162, +60,164,66,11,180,95,5,255,89,164,247,31,6,140,31,154,85,21,172,48,66,218,112,109,29,243,27,220,176,209, +64,43,171,64,162,34,221,9,133,235,144,186,68,1,126,130,116,46,220,130,91,74,232,30,86,137,156,171,52,120, +63,197,139,82,157,31,128,76,205,11,88,240,46,11,237,212,195,119,233,110,97,233,76,51,8,239,237,29,37,101, +47,122,246,65,49,115,185,94,137,155,5,80,181,73,105,221,60,53,153,137,139,68,129,133,204,158,180,223,237,131, +8,72,30,23,114,80,76,128,188,32,199,251,31,30,231,90,170,228,12,139,67,214,197,136,210,1,238,31,133,236, +95,225,85,189,24,133,72,86,138,108,154,203,241,68,177,186,204,134,100,128,251,57,0,16,117,13,10,2,210,229, +135,32,35,171,7,243,117,80,106,46,53,200,197,104,82,134,33,10,139,37,222,150,249,244,164,204,166,39,197,100, +170,53,198,61,57,158,146,4,97,143,189,146,121,51,60,9,94,242,120,37,252,124,23,244,3,101,123,235,209,247, +103,143,47,121,244,232,193,195,136,205,21,213,148,77,209,218,100,143,29,48,142,141,161,222,121,13,6,128,133,138, +121,73,215,102,98,71,14,19,93,37,98,58,47,133,109,102,84,81,192,212,136,204,62,229,230,53,140,115,62,30, +1,3,53,47,205,149,238,150,154,121,4,141,72,57,141,40,44,242,236,54,73,215,33,6,192,205,235,169,41,239, +148,94,255,120,156,182,123,53,26,133,52,192,82,62,23,254,51,155,225,250,217,197,22,57,220,43,26,150,52,161, +210,180,145,77,205,54,41,105,201,149,22,11,235,169,121,208,161,95,227,159,197,166,115,148,167,145,205,210,243,136, +246,177,243,37,74,253,230,167,178,37,94,242,146,123,8,65,138,49,54,19,206,114,254,135,224,2,136,41,100,109, +255,151,82,31,34,239,44,158,123,147,72,118,124,226,191,154,112,133,186,136,146,233,157,94,54,181,255,231,5,216, +183,208,51,39,202,164,62,159,10,194,49,51,27,210,160,177,251,87,196,39,205,169,202,6,9,103,254,102,183,244, +203,156,211,65,11,189,229,244,45,126,62,226,245,117,160,151,215,225,20,186,236,32,251,14,210,20,235,190,177,7, +55,16,171,59,151,145,120,165,38,77,252,70,157,217,183,13,225,235,45,175,49,153,3,182,214,89,80,88,209,121, +71,123,3,179,167,133,12,116,251,212,102,143,145,12,251,23,4,93,14,170,86,230,158,203,116,236,40,54,212,188, +238,111,240,6,141,38,185,244,177,91,196,122,96,151,27,202,51,106,203,149,76,127,118,248,110,154,214,63,148,39, +233,47,241,221,85,130,215,2,20,191,73,36,110,73,139,180,68,243,207,21,207,225,161,93,251,87,155,167,144,11, +29,179,175,216,4,99,53,7,73,142,239,28,50,128,16,57,98,44,80,211,224,61,218,92,156,1,211,133,14,235, +154,98,136,164,81,144,139,6,116,24,12,241,235,42,206,236,225,147,91,224,229,73,37,200,36,151,252,194,225,113, +111,144,244,5,62,28,9,240,104,3,79,255,132,47,187,195,161,232,171,228,87,124,222,207,110,97,57,48,41,63, +83,25,180,31,96,213,38,241,74,98,234,9,170,253,57,38,39,99,74,120,161,227,33,15,72,116,36,3,74,59, +190,149,253,221,79,74,148,50,27,29,43,180,63,220,72,94,169,172,84,94,241,161,212,13,26,38,66,80,125,215, +48,217,73,109,121,157,201,193,72,36,146,146,209,21,154,40,122,220,49,54,179,164,164,87,59,19,11,193,27,231, +137,147,92,112,220,154,98,37,81,251,219,205,214,230,86,196,173,23,41,57,17,92,111,146,147,7,130,95,221,14, +74,36,210,143,130,107,83,180,211,154,183,181,101,102,34,185,54,19,190,45,74,149,141,146,215,130,55,204,134,201, +185,121,183,173,121,97,222,95,102,184,247,185,77,74,64,48,42,100,13,223,183,8,177,231,3,14,199,246,46,41, +125,204,243,10,154,159,15,44,96,33,57,8,193,193,139,195,55,212,144,76,242,186,109,201,21,71,231,173,123,63, +16,252,26,233,116,40,184,113,95,34,246,143,240,54,2,19,2,14,71,82,73,232,98,69,170,240,249,5,73,54, +179,157,174,146,145,228,199,170,204,251,234,13,86,116,14,111,147,106,44,96,248,147,119,162,126,166,32,221,159,4, +31,129,173,63,121,33,248,249,249,241,238,206,209,174,57,84,114,176,189,127,124,254,226,240,252,224,240,228,252,221, +49,156,166,57,58,255,229,240,221,249,233,222,254,254,249,243,221,243,151,123,71,187,47,18,37,103,38,98,247,177, +76,175,68,108,132,253,176,20,2,244,222,176,232,135,25,73,187,8,27,152,216,31,71,159,30,142,142,139,164,185, +111,231,190,176,83,225,241,117,12,17,102,24,199,32,33,14,115,12,98,86,230,228,118,129,29,252,177,157,27,118, +199,215,1,174,210,35,232,56,198,77,135,208,20,93,50,45,86,113,211,231,205,213,176,16,105,74,39,186,22,248, +28,26,50,200,202,144,251,216,220,17,104,49,174,64,144,187,195,138,250,146,202,233,226,45,65,208,253,3,169,169, +195,140,30,99,119,229,153,222,57,218,178,99,65,194,22,45,218,254,141,17,202,50,90,236,236,108,230,100,110,88, +176,133,229,107,88,14,59,1,232,164,183,47,57,157,160,15,75,222,128,216,158,151,142,51,110,76,88,170,56,166, +221,218,73,118,105,143,34,70,230,104,34,170,129,250,88,146,196,109,217,5,254,237,172,255,189,21,96,197,1,71, +180,42,86,66,157,138,139,99,58,238,86,165,120,226,36,3,62,112,73,238,24,252,124,14,212,31,192,80,55,72, +59,131,80,47,92,40,185,121,149,85,222,153,80,0,101,230,180,198,34,108,79,154,24,28,254,25,170,0,28,251, +251,106,240,142,193,242,122,20,56,68,226,11,169,105,188,75,52,190,36,26,135,201,122,41,151,210,21,202,161,205, +245,221,88,163,222,59,124,11,35,154,66,162,54,237,255,132,223,146,120,155,149,217,117,133,137,227,172,172,132,133, +124,87,142,12,193,169,25,7,50,61,22,157,16,208,252,13,57,51,17,193,200,73,159,32,153,126,172,42,179,111, +20,56,39,133,219,23,254,35,38,136,46,130,116,89,156,252,246,248,183,199,172,75,65,49,107,32,72,122,64,41, +54,22,122,100,111,89,149,169,236,70,80,50,74,224,111,196,97,251,250,56,98,54,83,213,79,7,114,238,192,37, +197,142,137,200,148,109,207,7,199,182,181,182,165,250,172,55,5,36,194,174,105,235,21,88,95,25,243,171,44,210, +5,184,162,84,93,200,181,149,135,242,89,18,69,139,157,113,237,15,22,188,42,42,69,135,118,44,64,177,170,131, +181,46,204,131,67,221,84,182,245,32,155,19,17,200,102,246,222,204,227,223,186,113,239,183,143,103,27,41,253,101, +110,20,203,212,181,220,240,164,144,170,204,69,21,75,28,58,20,77,113,28,116,175,163,176,132,145,243,148,104,177, +225,144,41,30,165,17,243,136,242,48,66,25,27,69,54,252,105,139,63,106,179,69,94,112,116,81,93,40,147,68, +93,15,11,155,133,167,65,112,207,49,71,13,36,110,248,56,47,227,102,140,42,64,136,6,115,152,117,193,235,119, +56,64,129,131,187,216,47,123,16,238,144,230,248,206,191,156,28,61,158,92,160,29,236,66,148,85,106,195,150,186, +180,148,2,195,250,239,40,159,154,101,46,155,72,60,73,64,109,69,39,124,103,30,202,81,180,180,221,135,1,155, +71,206,32,183,171,237,46,195,178,184,142,233,204,104,162,102,11,128,11,150,69,213,49,72,109,32,116,228,39,129, +129,208,235,81,83,93,253,152,40,237,160,126,214,154,241,249,222,54,29,160,136,129,208,76,167,232,11,59,22,138, +227,27,150,193,104,56,220,145,111,5,2,227,80,199,2,161,33,152,23,145,168,73,204,173,8,162,94,120,16,95, +96,157,145,76,174,88,69,164,94,52,118,228,50,187,201,225,138,69,226,80,234,38,191,162,163,200,250,64,55,164, +101,21,106,37,123,85,189,50,249,92,240,65,166,23,146,127,148,233,142,236,132,96,23,15,99,172,227,2,236,223, +71,113,176,105,203,156,49,194,17,208,113,31,34,152,248,193,134,249,180,140,91,208,130,5,114,51,20,81,144,245, +65,206,171,4,172,54,11,29,201,20,141,20,116,180,20,218,158,95,130,177,120,97,238,34,148,161,230,2,140,240, +110,158,114,149,182,121,185,16,138,165,163,158,150,29,181,177,225,14,25,210,56,58,56,12,114,163,241,59,247,200, +220,24,155,248,111,188,64,155,164,232,21,200,170,133,231,42,157,241,163,165,55,111,194,140,176,187,130,17,118,41, +142,27,88,22,117,56,232,185,137,127,34,65,73,224,123,168,8,240,109,160,140,236,4,224,29,129,130,193,215,249, +40,37,81,188,159,85,234,141,168,170,236,82,240,74,39,185,219,4,182,119,245,9,108,18,20,86,118,147,149,24, +134,247,36,32,211,89,156,51,198,155,109,64,203,104,33,175,117,101,77,3,96,141,191,144,186,49,192,18,129,196, +56,28,152,195,65,234,139,147,104,250,95,79,211,249,228,24,45,97,138,206,54,144,99,121,52,223,64,94,234,38, +194,0,201,165,237,59,132,76,219,56,151,66,139,177,77,195,115,135,241,158,116,215,50,244,29,10,91,111,197,11, +198,39,129,1,170,217,29,202,134,47,55,204,77,92,15,164,235,77,154,89,18,195,176,108,7,132,1,131,202,92, +211,171,15,249,120,155,64,24,199,126,195,158,185,242,7,166,102,23,244,25,249,61,222,1,64,55,66,46,9,138, +44,244,92,95,1,97,174,90,115,128,29,60,155,133,148,162,175,8,79,56,11,240,233,54,100,169,185,59,14,28, +231,160,75,11,183,173,148,184,30,171,10,230,102,35,208,254,158,92,118,29,167,83,88,44,79,179,110,110,213,71, +119,177,179,161,64,212,176,176,159,45,99,212,23,108,107,38,161,214,88,37,196,111,205,164,59,193,214,172,188,254, +195,18,159,160,53,17,208,183,72,52,10,103,197,25,240,85,32,80,2,56,192,76,175,26,119,93,115,102,212,202, +220,50,35,50,30,207,210,229,65,28,13,66,228,16,129,75,130,3,237,107,16,29,138,204,181,207,4,22,90,72, +2,120,254,249,172,13,140,118,63,230,59,146,248,31,232,68,80,205,93,31,45,34,112,55,247,27,94,138,172,194, +125,245,182,92,163,230,175,21,125,42,57,88,195,91,101,224,85,21,126,101,201,90,173,203,2,154,143,89,181,3, +212,147,9,220,157,97,203,121,91,108,246,169,5,0,226,243,131,42,111,15,45,49,98,199,112,241,74,238,113,188, +188,154,123,28,47,179,127,6,3,103,247,101,224,172,155,253,107,49,240,42,34,176,207,99,109,159,167,253,130,85, +96,224,64,255,7,49,28,3,239,199,222,8,114,112,126,18,214,122,43,209,7,180,52,99,222,146,194,189,127,47, +133,101,255,63,129,194,178,255,153,10,203,219,21,10,203,91,171,128,28,147,13,37,168,182,188,35,77,245,13,169, +45,47,80,95,229,159,80,145,233,44,45,187,184,58,19,45,254,86,43,41,80,43,249,20,212,74,202,57,173,100, +185,78,2,40,94,200,185,125,21,139,229,146,235,205,114,83,199,74,173,192,2,24,86,102,92,254,253,245,26,191, +80,88,197,9,66,56,109,103,94,197,35,75,169,158,38,114,158,16,225,45,1,144,211,169,6,255,194,244,113,178, +124,69,46,210,102,78,45,141,223,132,164,48,10,104,179,9,123,39,67,54,67,254,57,77,118,65,17,73,247,113, +237,91,165,198,4,161,194,26,77,81,107,52,42,56,138,171,23,4,140,114,244,102,185,114,35,93,233,29,244,20, +212,75,79,209,93,178,66,132,75,208,130,225,178,234,212,198,18,82,174,110,127,112,53,41,187,165,107,255,138,213, +196,225,93,177,176,220,3,42,190,39,137,103,228,183,13,79,15,183,49,248,242,73,16,38,114,218,226,129,246,185, +205,198,138,204,213,179,195,237,60,150,77,250,128,82,167,254,69,230,182,211,2,87,228,66,93,252,205,151,41,132, +95,46,79,246,37,254,135,166,179,127,25,53,81,205,169,137,247,20,87,56,38,95,214,249,90,87,113,67,234,52, +189,121,237,165,0,168,37,150,168,235,21,235,249,181,52,55,113,14,203,31,138,92,46,154,157,78,105,49,127,79, +139,249,75,153,238,74,254,90,166,160,33,252,65,134,168,96,241,160,73,2,163,244,106,171,212,251,229,180,40,235, +65,20,46,255,80,15,177,49,88,97,105,255,210,127,215,179,96,57,164,64,212,106,77,22,106,173,178,200,81,177, +242,138,69,44,185,103,65,253,137,50,215,50,90,112,252,221,106,167,182,133,158,6,151,163,110,28,78,79,87,245, +86,119,203,37,199,146,175,2,215,189,169,209,251,208,181,43,165,98,92,216,196,37,77,229,42,126,223,224,97,23, +36,130,241,12,181,173,215,75,116,56,22,47,193,8,45,225,19,140,53,118,143,186,195,25,155,101,221,30,227,5, +29,165,119,77,117,39,41,120,99,38,38,138,59,193,144,148,188,41,142,147,190,75,72,242,89,199,26,206,129,167, +155,134,107,22,75,103,60,10,26,112,154,215,7,9,197,130,245,154,233,201,187,78,185,11,166,121,193,116,172,10, +218,130,135,72,131,198,233,124,153,202,150,7,85,54,181,40,41,85,72,221,42,227,247,97,5,139,231,181,232,113, +31,114,195,160,226,113,173,122,133,91,10,103,237,144,102,188,228,138,103,232,247,115,195,254,111,207,238,43,185,121, +189,110,216,162,37,188,70,188,54,204,242,17,200,14,85,172,93,136,53,146,116,40,16,28,199,188,92,176,199,50, +215,99,254,183,92,58,227,37,207,45,56,74,72,99,44,127,69,59,208,31,252,29,232,199,44,199,59,34,211,197, +189,146,11,14,21,235,232,221,32,248,175,243,74,48,230,45,223,100,20,118,199,22,109,160,182,44,46,233,27,149, +240,238,197,107,203,225,207,204,59,174,232,67,19,177,86,130,103,181,71,26,252,85,131,66,138,110,17,11,123,218, +53,150,169,121,230,210,103,106,213,149,52,166,106,238,136,45,162,102,246,98,53,17,40,139,227,50,45,205,142,86, +112,250,188,41,99,186,23,140,20,32,254,220,35,220,37,142,74,166,138,57,210,233,22,122,159,229,31,101,23,98, +148,180,120,133,7,117,154,211,186,253,176,0,39,170,97,147,194,57,82,233,121,198,129,50,116,111,176,24,227,207, +204,102,230,233,29,182,41,153,196,45,198,169,44,60,182,25,215,217,240,188,197,102,161,205,160,189,70,19,231,61, +253,184,153,43,221,131,179,52,124,87,0,231,107,199,27,173,124,81,60,77,22,147,114,234,155,207,253,120,140,212, +204,128,87,150,106,184,28,102,35,146,192,107,226,147,232,79,240,10,209,166,185,44,208,233,119,108,68,114,178,111, +208,150,124,235,97,14,212,234,150,155,166,163,230,141,170,1,246,4,8,155,133,145,30,204,7,3,24,111,177,68, +179,34,164,174,3,144,205,225,57,16,153,49,98,36,102,233,222,169,62,230,200,124,24,217,186,64,82,165,61,93, +45,47,52,115,157,49,142,175,236,174,159,85,2,156,147,244,211,78,138,52,239,232,171,176,148,240,85,98,16,246, +55,105,248,55,54,172,110,132,149,114,172,18,53,61,13,252,117,226,160,202,148,0,242,20,234,192,83,117,64,148, +137,208,96,223,38,121,218,223,4,94,208,23,113,121,127,19,40,100,94,28,168,61,88,134,250,16,146,4,254,211, +128,204,222,229,109,1,113,122,133,121,131,168,78,120,155,13,54,84,57,93,0,220,50,79,12,58,152,182,106,180, +40,111,159,164,22,136,130,27,99,59,159,21,244,142,143,79,139,222,19,44,101,186,66,221,112,31,118,250,166,46, +107,242,159,34,135,59,104,124,227,64,67,87,162,240,65,183,60,80,124,227,134,14,120,145,50,103,166,16,102,96, +161,149,20,194,174,164,54,0,63,239,51,23,52,30,72,254,13,159,224,137,134,214,12,148,92,0,184,189,83,105, +1,111,208,154,175,31,230,110,162,230,110,162,218,65,69,78,196,100,19,75,216,12,112,11,214,172,94,14,72,65, +136,45,51,137,189,90,161,66,191,162,29,212,220,233,157,7,100,241,114,89,193,163,15,63,200,216,180,164,249,227, +68,224,194,39,27,158,75,109,197,139,253,43,173,102,54,20,154,246,53,211,235,34,161,79,154,116,123,79,248,214, +89,210,251,138,139,152,157,117,204,236,176,34,5,230,94,69,155,127,14,96,79,76,246,86,162,82,193,77,21,233, +19,157,248,196,150,41,83,25,52,210,117,227,22,127,176,120,132,137,197,138,37,138,247,182,184,43,246,167,59,47, +67,165,2,231,104,88,92,134,11,176,164,196,16,128,238,2,233,143,255,34,39,59,234,88,112,167,37,182,165,52, +3,28,202,9,142,47,10,85,168,233,19,86,115,231,223,245,242,99,125,11,23,62,44,170,213,82,60,44,133,75, +98,40,18,106,211,3,88,54,239,232,53,47,50,174,227,157,30,115,138,8,197,109,172,191,212,203,117,92,244,25, +175,67,147,164,139,93,154,197,63,74,115,75,239,94,150,240,191,254,19,88,194,255,90,102,9,231,127,126,153,174, +245,63,186,214,47,159,175,107,253,143,174,245,63,186,214,255,232,90,255,163,107,241,159,60,217,145,95,163,185,205, +92,168,118,242,163,121,247,205,143,218,220,21,201,157,29,90,177,84,113,187,94,190,192,235,139,217,50,189,22,248, +73,132,249,51,119,252,103,153,30,75,46,20,254,149,240,87,112,165,210,107,201,75,149,130,54,88,168,244,39,137, +43,36,207,21,30,204,242,241,4,173,160,11,199,126,165,154,15,158,203,120,13,162,0,4,35,66,218,200,208,49, +182,7,209,107,51,24,157,44,176,151,228,204,21,57,222,95,128,186,155,225,249,163,62,194,100,240,3,48,35,7, +131,87,27,204,170,229,196,111,129,50,198,18,28,99,210,106,213,45,46,232,107,169,150,55,220,152,72,181,36,136, +237,204,139,216,0,173,192,117,152,87,174,114,48,203,217,78,156,7,83,135,115,169,126,59,201,1,216,204,71,185, +63,158,75,194,216,97,87,65,228,55,243,169,64,102,23,123,148,72,126,155,86,54,197,63,159,209,171,83,207,186, +254,75,98,156,100,2,253,181,90,119,83,97,203,83,226,103,204,135,239,229,199,169,108,40,194,52,4,250,18,127, +62,188,141,253,76,251,101,189,107,215,25,123,239,135,5,143,130,119,230,24,144,190,35,172,150,218,226,207,109,231, +150,248,39,112,125,113,199,130,107,232,240,217,96,223,134,139,13,80,243,158,171,46,26,79,115,21,58,201,86,163, +230,55,193,19,109,231,46,85,200,1,170,75,137,4,161,98,83,109,128,37,52,107,34,75,92,220,131,94,1,74, +93,199,115,99,129,14,57,194,121,13,72,119,87,35,173,245,113,100,162,155,166,43,97,58,253,103,12,66,183,6, +72,236,96,92,57,190,61,119,143,95,78,222,26,31,118,177,80,118,199,224,23,28,50,15,204,208,217,217,72,145, +44,246,70,217,130,192,153,159,55,54,208,98,137,129,253,10,160,60,239,7,52,177,63,239,189,113,198,67,141,166, +208,47,11,91,231,81,189,117,30,133,182,206,184,21,174,56,108,146,161,19,165,50,59,121,180,230,223,44,238,153, +107,34,141,236,222,185,223,140,52,50,157,2,22,161,54,235,139,131,33,254,88,203,205,193,13,62,249,146,210,89, +224,96,67,167,222,158,197,240,31,69,201,229,149,207,23,10,47,160,120,162,44,21,244,5,44,253,31,105,124,18, +71,94,169,128,167,15,152,192,33,227,19,126,195,251,244,81,243,107,198,96,115,239,182,228,86,31,182,160,174,115, +186,111,30,207,186,103,47,78,42,133,22,145,72,84,220,118,224,95,238,99,64,54,41,144,97,238,141,39,55,159, +162,154,121,252,215,134,95,220,212,13,60,119,189,71,81,183,211,154,167,168,152,163,168,156,167,168,84,139,94,22, +46,137,54,245,5,245,99,142,114,100,229,116,185,13,74,78,95,212,153,56,112,173,37,1,43,174,53,119,97,149, +183,80,217,29,202,75,235,155,184,230,248,246,67,85,72,155,114,193,71,190,239,130,222,252,252,17,119,66,61,185, +229,151,222,185,255,100,119,102,111,27,247,85,74,50,53,125,38,234,123,74,250,179,195,144,116,167,97,138,244,77, +166,174,128,185,11,12,147,249,216,197,113,198,77,60,140,8,254,80,40,80,124,176,177,64,185,48,130,134,78,166, +98,45,233,179,88,108,30,28,30,236,166,81,196,197,230,241,9,232,37,105,132,247,106,43,124,223,223,59,216,133, +119,12,150,69,239,207,143,118,183,127,60,124,119,146,70,164,45,23,19,69,165,14,182,127,4,4,149,204,62,8, +124,127,181,253,102,247,240,229,254,222,75,72,188,204,174,65,254,142,242,33,229,236,236,29,237,236,67,106,63,47, +251,35,157,178,15,183,142,32,97,4,68,160,247,119,199,39,135,111,32,97,82,169,226,26,83,222,189,125,177,125, +2,101,38,116,95,151,90,117,184,253,2,227,235,71,24,208,6,99,245,112,52,38,76,148,254,140,102,166,210,232, +188,173,170,111,90,183,223,182,35,62,242,94,91,17,175,148,141,38,199,207,245,227,41,116,4,95,135,200,188,3, +248,227,246,170,99,21,139,192,253,0,224,85,218,95,78,244,231,114,205,231,113,39,93,140,249,51,57,75,50,248, +67,79,214,241,138,59,231,68,112,10,176,145,100,252,131,184,37,255,234,48,233,115,8,99,65,42,9,60,216,223, +139,164,5,127,133,125,29,232,221,0,166,245,109,218,149,126,240,190,102,234,128,110,146,71,143,6,138,219,208,247, +73,142,143,248,77,151,98,182,228,219,44,130,46,43,8,23,254,137,190,218,89,119,176,207,234,165,29,123,6,192, +212,193,62,252,169,153,78,135,89,2,68,230,33,30,49,238,5,11,187,66,3,142,102,220,59,236,183,228,185,124, +159,139,143,137,154,53,100,182,181,118,213,21,138,46,152,235,4,134,102,194,13,186,168,174,138,209,128,23,41,174, +168,163,236,150,231,152,94,130,226,240,62,175,242,139,124,148,171,91,222,135,180,178,40,212,27,48,85,229,146,79, +204,43,207,8,54,191,188,20,229,161,236,11,62,74,245,154,205,43,120,200,101,142,31,207,216,163,86,129,122,173, +234,120,167,38,105,152,146,23,152,162,31,113,136,101,101,180,226,113,58,192,157,194,21,252,192,78,225,38,21,120, +74,246,22,178,239,76,7,215,215,43,142,183,14,111,221,183,248,142,211,91,44,115,13,63,109,96,17,39,223,93, +176,13,23,11,144,130,27,143,64,94,89,219,194,146,72,225,115,187,32,156,7,117,82,9,73,214,14,235,146,237, +177,104,58,13,83,9,66,121,120,81,137,242,70,148,158,250,110,15,150,234,219,118,120,165,29,103,220,206,40,135, +38,31,65,169,216,241,64,92,242,187,188,170,241,1,24,176,57,72,18,180,226,10,158,123,245,28,101,240,55,137, +228,228,250,66,148,142,17,189,65,238,122,207,48,31,84,126,45,224,231,98,161,250,164,104,34,214,73,56,224,212, +212,138,194,146,248,251,160,25,246,38,95,228,186,80,140,179,185,111,247,84,69,9,221,93,252,0,153,51,94,215, +84,163,239,235,48,10,67,31,4,148,27,17,4,139,139,35,108,40,69,1,235,82,128,90,124,101,221,248,92,161, +149,54,198,125,65,60,84,27,105,155,67,10,70,165,84,32,164,234,59,239,49,99,12,51,46,49,131,177,36,106, +69,9,214,107,110,198,98,245,14,116,166,239,53,87,26,92,50,226,43,107,79,231,69,45,19,115,122,10,241,68, +179,31,114,213,185,80,180,141,52,25,1,142,41,5,190,193,86,11,143,5,222,120,70,49,190,59,98,126,118,91, +198,76,83,170,130,50,70,40,191,188,183,52,183,138,11,208,180,208,253,221,212,108,200,240,146,83,120,157,23,113, +78,123,19,253,31,23,192,214,105,238,120,176,130,161,104,134,225,18,46,147,117,189,151,164,231,189,76,167,173,51, +164,251,93,62,72,36,47,12,41,147,156,155,128,155,200,159,188,210,131,75,97,224,173,110,60,195,213,186,15,45, +200,7,124,2,63,182,40,207,224,197,22,230,163,52,51,193,91,209,202,108,39,98,70,220,131,105,25,33,22,28, +165,113,253,109,229,137,69,22,139,198,212,24,89,85,104,84,135,221,146,244,97,111,164,246,200,125,133,48,179,247, +72,5,226,154,72,135,77,131,102,116,169,21,0,39,24,116,221,158,237,101,216,77,83,176,79,39,46,199,124,46, +166,233,117,45,53,165,145,153,10,197,152,83,19,235,71,130,231,106,129,201,32,100,53,86,140,66,88,88,129,7, +40,238,112,94,37,19,238,150,133,164,207,221,128,149,124,142,203,96,124,104,125,193,193,57,111,208,8,176,3,114, +250,236,235,92,80,54,214,45,189,233,6,56,199,124,194,251,120,151,144,195,10,204,11,51,45,47,82,195,154,50, +61,222,164,78,50,187,225,183,76,218,105,46,3,99,8,101,125,65,113,203,33,50,243,245,138,133,5,27,53,230, +23,84,101,101,170,219,77,123,87,252,120,83,151,225,166,198,154,81,118,233,139,36,187,184,26,237,26,24,120,107, +227,27,1,194,203,22,188,204,226,59,71,172,205,239,191,199,138,74,232,17,44,115,235,109,134,179,189,214,74,85, +122,64,50,61,94,23,100,253,66,113,196,203,84,191,104,105,24,11,82,99,75,146,122,6,90,177,68,48,230,95, +166,58,22,106,31,55,243,238,57,190,35,174,76,40,48,147,154,84,196,28,38,27,84,225,50,255,68,208,238,21, +173,246,101,189,143,26,155,128,233,220,40,32,117,124,182,228,247,243,239,139,79,223,125,24,180,214,30,220,169,110, +148,203,71,55,64,136,40,137,162,25,164,8,100,98,12,27,51,232,70,246,137,242,126,231,54,212,93,226,112,59, +172,145,193,10,26,104,33,223,234,104,181,239,198,73,140,26,124,129,116,155,185,244,125,145,221,8,63,203,161,246, +41,71,92,95,147,26,53,54,162,200,11,0,240,62,167,180,170,49,91,94,99,94,20,31,165,174,51,199,219,92, +80,113,203,111,211,46,254,209,249,160,14,32,200,236,126,29,126,178,6,11,155,25,253,254,89,55,202,250,116,118, +52,193,187,210,136,131,4,44,254,171,187,113,163,82,216,132,32,194,139,137,82,133,108,226,252,84,93,142,38,99, +80,219,55,55,55,133,79,21,251,8,60,112,91,99,184,206,114,57,215,166,246,55,95,221,142,254,28,111,69,174, +112,15,65,205,98,19,134,110,121,208,38,106,187,68,110,195,130,195,162,0,194,132,203,181,27,229,52,228,140,157, +25,179,249,49,109,68,182,138,113,246,228,178,29,185,77,198,181,138,141,110,220,19,92,226,172,106,97,192,30,94, +218,9,214,43,120,142,207,61,32,2,174,206,90,226,108,125,253,13,59,51,140,161,55,139,146,49,0,134,29,202, +50,96,12,197,28,183,16,8,100,4,2,77,20,237,253,24,234,192,184,199,4,36,6,153,155,208,237,111,120,153, +34,54,129,190,21,204,245,185,176,36,85,167,131,127,200,43,207,241,79,90,234,253,209,72,168,53,252,136,126,254, +244,187,78,110,252,212,152,38,210,188,35,158,170,71,249,163,118,71,120,233,228,43,122,42,59,125,72,43,208,181, +246,191,212,134,224,2,254,198,237,175,31,229,208,112,151,170,83,76,150,88,200,18,152,149,187,152,230,51,22,23, +28,193,128,198,197,252,62,254,220,223,149,15,103,233,175,50,254,253,193,221,66,116,19,16,28,117,196,151,8,3, +177,68,28,35,172,176,217,199,234,119,126,135,134,73,10,80,59,119,171,133,230,16,36,47,92,168,72,218,46,177, +190,8,146,60,17,79,184,127,59,18,49,58,251,129,0,194,67,94,61,56,206,221,96,166,28,179,174,71,115,4, +84,91,231,162,235,98,32,162,100,100,227,160,144,67,167,130,225,103,61,181,137,121,103,204,243,59,70,185,28,22, +171,161,185,140,113,91,165,136,50,140,231,247,227,77,133,77,132,53,122,18,235,39,54,211,206,17,208,202,103,228, +158,80,96,144,66,222,26,9,226,44,80,193,84,183,124,246,164,11,54,195,13,248,255,105,218,234,194,241,153,71, +109,46,81,184,159,207,155,151,239,168,203,73,68,13,19,17,31,228,165,158,230,9,200,245,18,35,139,131,24,26, +137,161,138,200,78,119,101,173,44,203,16,9,142,189,2,88,216,217,221,245,142,69,216,59,113,150,68,59,122,16, +201,20,81,195,57,115,19,64,224,125,20,151,231,89,181,12,130,81,81,133,74,107,187,23,0,156,148,183,120,162, +182,230,23,7,25,114,138,96,137,119,82,155,191,85,78,7,112,103,189,97,189,68,12,97,135,178,216,202,46,136, +183,91,197,239,140,188,11,10,249,145,90,189,8,28,123,249,189,27,30,1,253,162,51,82,77,180,52,196,66,99, +40,224,227,200,0,3,206,173,36,250,167,199,100,46,45,74,79,142,70,54,137,214,12,150,124,113,35,253,164,43, +192,96,23,243,36,3,106,24,65,200,145,43,147,62,175,215,213,164,226,86,255,160,185,119,21,71,80,4,237,77, +51,238,169,26,148,55,137,181,148,68,245,112,69,151,123,161,38,103,106,97,125,26,209,40,223,89,163,67,34,106, +153,43,211,250,184,244,9,106,140,102,134,118,70,168,175,95,197,52,217,161,36,254,80,236,112,19,70,60,155,171, +66,159,246,175,221,187,150,4,142,242,131,50,251,8,100,231,97,96,50,21,58,104,109,51,92,14,78,150,68,7, +78,38,197,21,224,214,208,232,74,56,139,227,210,66,100,135,116,37,180,65,114,57,184,51,83,186,50,100,175,92, +3,91,4,90,44,151,23,213,118,76,87,76,27,52,87,21,64,51,167,131,215,246,206,21,224,100,5,117,240,214, +28,138,218,4,149,185,81,196,26,24,152,155,22,24,24,118,19,129,253,17,13,63,243,201,0,210,52,171,214,140, +121,207,225,88,205,133,129,74,6,168,142,52,231,86,110,17,36,209,48,123,84,21,35,216,139,192,131,150,192,143, +140,172,197,234,130,216,90,159,133,13,37,56,162,187,103,7,178,180,158,215,15,31,234,73,184,178,119,119,177,55, +197,80,237,89,254,229,37,29,208,156,117,116,148,243,52,26,230,104,204,6,48,68,22,51,120,178,145,210,81,53, +213,86,17,178,184,8,107,136,208,146,184,99,149,168,218,94,97,1,54,17,101,85,239,13,49,124,163,177,205,188, +132,12,148,220,162,236,228,228,34,222,174,80,82,189,59,218,199,53,49,135,154,209,42,158,198,78,71,19,218,166, +115,141,119,156,37,151,104,86,169,202,126,138,165,43,96,8,46,2,101,20,149,57,28,14,43,232,186,144,59,153, +188,201,42,42,141,6,7,19,29,51,142,182,240,102,135,110,188,66,211,10,138,12,93,145,224,45,248,23,11,204, +117,210,57,184,17,19,1,99,251,99,11,142,116,42,89,221,244,222,153,139,177,79,170,100,73,170,131,61,2,153, +111,164,95,177,122,208,116,94,47,63,219,176,79,27,109,239,121,235,236,105,250,228,59,84,39,90,29,97,237,33, +179,88,11,111,210,126,11,173,180,192,134,150,44,105,140,145,64,213,52,0,78,163,229,65,32,7,162,87,8,255, +97,49,155,221,139,135,113,60,31,209,129,157,101,51,2,91,17,208,163,172,214,142,27,105,52,217,97,131,232,26, +99,116,207,154,85,153,85,87,84,231,106,193,17,177,251,117,100,84,140,199,183,143,96,249,252,176,10,41,50,212, +61,49,194,218,143,214,5,127,102,223,95,41,56,163,255,224,95,178,174,168,52,186,29,95,22,223,125,211,242,54, +88,187,42,118,252,36,132,49,221,247,36,87,245,14,171,188,239,254,202,109,198,206,188,189,214,153,219,82,181,230, +246,22,149,191,183,56,255,15,183,183,64,53,69,207,123,225,236,108,254,61,120,204,179,126,153,142,19,83,22,152, +12,170,48,63,138,209,232,164,136,239,84,49,78,90,28,197,126,98,96,165,131,117,150,46,83,226,52,31,168,43, +126,33,174,178,155,28,90,19,85,215,69,161,12,171,110,129,53,162,243,171,169,159,2,179,89,15,72,243,14,111, +198,248,40,182,110,141,97,204,58,122,131,217,234,88,57,230,77,172,162,39,206,96,168,96,203,201,197,179,180,112, +38,77,145,98,109,42,118,178,202,143,151,168,248,87,173,86,189,149,244,115,74,198,9,125,179,73,165,105,210,208, +88,10,229,153,197,59,248,47,176,141,56,175,183,17,231,95,188,141,184,248,156,109,196,224,243,183,17,190,168,64, +39,222,253,54,15,141,102,89,238,232,206,3,25,1,211,142,56,86,38,92,9,217,181,59,139,249,77,68,9,85, +23,13,81,226,144,54,117,242,43,90,216,125,90,216,250,190,138,86,235,102,180,138,229,180,116,73,235,162,178,22, +67,133,30,41,70,7,39,98,201,190,96,209,192,182,134,26,245,181,223,40,185,209,38,216,106,156,201,70,199,34, +24,15,75,206,51,43,177,185,79,44,225,19,203,237,184,76,151,20,244,78,193,44,234,25,131,231,153,53,50,139, +77,109,10,102,220,217,65,230,183,242,10,251,29,216,173,105,188,202,140,138,242,108,210,122,23,151,40,42,55,227, +18,91,203,136,123,194,156,240,196,231,182,29,82,20,215,208,215,165,174,160,9,107,217,71,129,47,235,107,255,239, +255,254,159,255,29,173,218,23,174,203,251,169,169,121,108,142,109,216,147,216,93,163,203,80,195,123,194,157,201,62, +99,137,206,90,109,13,28,198,171,8,72,140,115,79,85,99,60,154,84,203,181,155,57,149,78,191,42,220,108,21, +204,180,179,143,62,206,239,180,223,20,123,249,123,235,211,131,59,106,22,72,87,232,242,31,69,46,49,234,38,223, +242,156,155,237,111,24,52,125,0,34,168,84,241,22,143,90,176,108,254,206,152,21,186,114,169,26,159,161,242,138, +46,178,109,5,152,192,254,140,107,47,30,230,224,17,177,37,234,184,143,97,77,206,65,81,191,194,70,168,116,162, +134,143,190,227,209,134,144,24,29,227,221,209,94,29,104,62,254,189,82,131,36,209,159,144,123,234,63,231,82,61, +123,182,54,44,97,226,84,107,41,248,20,22,40,236,2,73,71,143,47,155,145,165,207,48,97,230,167,252,214,195, +164,59,232,100,231,55,249,155,4,236,107,232,112,3,204,186,138,77,124,131,165,76,103,209,151,206,33,175,133,239, +195,181,152,64,159,129,95,236,55,121,247,155,92,131,127,230,155,186,118,145,43,108,231,49,105,189,180,197,120,126, +171,68,21,107,244,61,194,120,134,248,117,121,24,203,181,24,171,202,169,26,248,121,74,40,108,59,214,208,244,171, +65,177,70,243,143,198,142,196,127,155,127,18,163,109,181,135,83,59,206,57,149,237,229,88,1,1,207,76,61,174, +61,0,88,198,54,155,90,179,177,81,183,6,251,168,251,252,44,37,186,44,84,237,72,226,106,192,31,114,249,197, +184,212,67,58,50,16,159,227,13,247,13,45,30,101,50,191,214,170,91,127,60,142,8,84,221,142,234,79,216,167, +145,44,164,136,120,205,121,23,197,224,182,241,169,82,137,101,236,126,209,6,64,184,239,102,194,54,100,249,92,171, +150,217,70,39,99,221,3,189,167,169,234,117,78,155,190,138,122,230,97,56,38,127,38,214,147,240,239,102,35,227, +237,150,22,25,247,149,26,166,73,86,253,47,188,43,38,129,174,41,84,5,239,133,23,252,80,178,27,225,183,33, +163,36,194,81,137,180,93,206,8,218,213,26,131,221,86,236,199,99,163,5,55,125,52,11,26,60,172,151,243,145, +227,255,137,98,194,79,167,184,0,150,164,136,202,112,57,171,81,25,125,215,2,101,131,1,157,91,182,129,18,226, +8,161,181,97,1,48,114,220,186,32,188,1,215,60,244,119,37,224,31,90,166,235,109,21,29,58,223,85,255,191, +183,235,88,115,216,4,194,119,63,5,233,219,144,37,185,70,218,212,75,234,11,228,136,37,100,43,81,251,36,220, +62,62,189,123,24,64,8,220,210,115,113,65,3,211,254,25,202,142,151,168,20,134,6,149,225,117,4,238,150,50, +157,47,191,61,255,144,10,163,1,220,159,227,201,228,125,170,46,177,251,114,2,193,243,46,225,255,229,196,51,165, +118,92,135,66,180,109,243,52,110,132,46,80,16,52,91,52,39,20,250,205,41,222,81,56,206,137,2,223,255,36, +254,117,223,49,1,82,60,44,204,18,241,66,219,88,222,58,138,115,70,203,78,55,245,102,252,128,111,73,19,5, +48,210,192,40,43,232,169,255,186,164,105,78,208,83,73,78,248,8,251,139,8,205,87,130,234,153,91,162,13,210, +4,32,141,31,151,170,38,192,239,251,23,190,169,79,88,164,13,120,186,169,225,246,88,44,90,250,8,74,7,56, +198,195,223,239,252,8,5,222,34,206,132,188,56,35,101,94,156,163,239,105,113,160,44,79,200,219,55,109,78,138, +183,142,84,29,238,104,155,103,138,12,114,81,20,44,155,147,250,122,84,234,207,253,145,189,49,146,31,3,4,183, +45,84,48,97,121,157,106,244,209,231,155,117,186,14,245,80,231,138,237,104,151,119,17,100,153,24,166,41,172,210, +34,244,134,211,196,82,48,251,153,110,117,61,131,99,107,101,20,248,216,239,88,89,188,65,102,122,251,72,184,149, +223,166,186,33,94,175,78,167,141,25,193,11,182,146,180,236,189,193,82,1,151,226,73,87,14,126,29,73,67,90, +198,90,193,44,203,148,38,230,162,214,104,15,191,169,133,191,72,217,10,56,238,254,11,200,185,15,12,215,12,70, +43,27,23,222,80,35,192,155,90,95,75,210,210,66,254,87,164,88,237,101,113,87,145,198,81,211,116,71,100,207, +234,24,196,21,159,213,55,163,68,94,193,65,56,222,192,113,176,54,122,66,138,228,105,182,20,162,161,23,116,32, +237,147,5,187,231,103,109,10,69,181,8,239,81,93,3,40,8,130,88,33,90,245,13,230,183,187,34,149,63,63, +242,5,50,69,91,2,245,48,2,234,108,188,144,69,183,34,111,214,141,134,49,101,18,92,95,205,139,229,132,163, +33,106,6,154,125,160,206,192,72,197,172,190,186,230,130,15,100,129,121,22,184,105,4,94,48,28,113,20,242,64, +184,62,118,194,15,13,37,76,44,2,223,130,172,125,118,41,64,247,125,89,93,17,141,232,118,144,101,227,217,72, +16,26,64,40,199,220,182,154,131,74,211,119,198,21,16,161,254,86,163,194,230,125,237,164,48,12,227,107,132,89, +182,39,69,129,188,176,27,57,120,170,190,130,95,141,5,1,53,146,69,36,19,204,205,206,247,195,15,7,101,49, +171,27,55,174,36,22,31,230,209,251,177,224,66,222,168,122,56,58,176,125,122,12,113,52,69,143,209,253,44,26, +97,212,221,191,133,115,210,53,52,97,184,149,101,169,222,106,33,220,223,123,186,246,132,143,230,188,193,205,15,22, +107,178,25,24,250,14,132,16,76,47,247,115,218,197,172,32,243,128,182,82,56,135,6,202,32,140,58,136,9,24, +81,52,37,251,182,19,92,117,132,57,19,201,202,247,141,200,145,198,196,200,85,126,130,136,248,229,9,207,132,19, +71,210,29,92,172,205,77,124,174,122,207,84,179,220,198,148,131,244,107,176,222,203,200,38,171,162,16,172,2,147, +247,76,216,232,70,166,182,67,210,54,146,55,78,22,224,52,75,80,68,248,205,124,42,77,111,110,251,198,70,86, +217,164,158,166,52,169,165,219,43,204,118,98,137,89,209,174,139,46,56,105,84,99,121,172,57,7,161,175,163,250, +158,151,71,41,195,63,204,100,34,53,1,172,221,181,81,239,233,3,109,123,122,190,54,251,64,22,112,123,58,146, +63,60,56,161,146,84,41,129,187,219,92,223,193,11,28,231,31,35,249,11,251,250,216,146,38,22,120,218,252,150, +51,12,176,128,103,88,141,7,174,99,245,62,217,197,230,193,41,130,32,87,158,92,184,66,219,145,127,237,97,27, +12,42,68,129,14,97,244,32,37,96,180,0,154,87,244,164,136,166,225,243,205,204,48,216,33,28,147,83,150,159, +104,26,75,231,249,34,80,25,171,75,9,61,215,24,160,6,196,171,157,159,111,67,121,96,49,251,11,43,155,127, +99,1,163,217,206,249,195,254,144,46,4,254,41,59,82,90,13,125,22,255,179,168,176,59,208,27,2,132,222,167, +112,170,41,63,193,34,75,239,23,210,252,128,242,244,11,185,159,248,242,125,42,190,170,7,178,131,162,19,29,89, +89,124,57,249,29,215,25,90,174,230,208,0,0}; void startGui(AsyncWebServerRequest *request) { diff --git a/src/websocket.cpp b/src/websocket.cpp index 450ffa8..8096411 100644 --- a/src/websocket.cpp +++ b/src/websocket.cpp @@ -107,7 +107,9 @@ void onWsEvent( else if (!strcmp(event, "rotate")) { bool isRight = (bool)!strcmp(wsRequest["direction"], "right"); - Screen.rotate(Screen.currentRotation + (90 * (isRight ? 1 : -1))); + + Screen.currentRotation = isRight ? (Screen.currentRotation > 3 ? 1 : Screen.currentRotation + 1) : (Screen.currentRotation <= 0 ? 3 : Screen.currentRotation - 1); + Screen.render(); } else if (!strcmp(event, "info"))