diff --git a/harnesses/gtauri/.tauriignore b/harnesses/gtauri/.tauriignore
new file mode 100644
index 0000000..5f22405
--- /dev/null
+++ b/harnesses/gtauri/.tauriignore
@@ -0,0 +1 @@
+frontend/dist/img/
diff --git a/harnesses/gtauri/Cargo.lock b/harnesses/gtauri/Cargo.lock
new file mode 100644
index 0000000..dc914ca
--- /dev/null
+++ b/harnesses/gtauri/Cargo.lock
@@ -0,0 +1,4539 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "adler2"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2fb6cfd47bf496ff64095c20eaba0c201404ee38714d4142fcfa1dc334fcc7a"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b5c1865780388bfa186411ab5f247819487fc4864c6e9c3106611fa347586e1"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.104"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
+
+[[package]]
+name = "atk"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b"
+dependencies = [
+ "atk-sys",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "base64"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
+
+[[package]]
+name = "bit-set"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa"
+dependencies = [
+ "hybrid-array",
+]
+
+[[package]]
+name = "block2"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5"
+dependencies = [
+ "objc2",
+]
+
+[[package]]
+name = "brotli"
+version = "9.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "627b7cfb0578f0eafce087a90fcd40add1231900b69e4d4de2d456260a4f5d81"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34c6783f42c21c952ad7112b354f0ba2f10760e9decea5b1b60523d6e270faaf"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bs58"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
+
+[[package]]
+name = "bytemuck"
+version = "1.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "byteorder-lite"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
+
+[[package]]
+name = "bytes"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cairo-rs"
+version = "0.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
+dependencies = [
+ "bitflags 2.13.2",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "camino"
+version = "1.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbbad30e4b4c14a39e3cc8aed085a12a327257c316619c93581e017bc52be591"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.21",
+]
+
+[[package]]
+name = "cargo_toml"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82f4b26e751e711a5302649417f2da046dce6391b2ea30a4820f37462314f0b9"
+dependencies = [
+ "semver",
+ "serde",
+ "toml 1.1.8+spec-1.1.0",
+]
+
+[[package]]
+name = "cc"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0"
+dependencies = [
+ "find-msvc-tools",
+ "shlex",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfb"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a347dcabdae9c31b0825fd6a8bed285ec9c2acb89c47827126d52fa4f59cece3"
+dependencies = [
+ "fnv",
+ "uuid",
+ "web-time",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
+
+[[package]]
+name = "chrono"
+version = "0.4.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
+dependencies = [
+ "iana-time-zone",
+ "num-traits",
+ "serde",
+ "windows-link",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
+
+[[package]]
+name = "cookie"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87"
+dependencies = [
+ "time",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "core-graphics"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97"
+dependencies = [
+ "bitflags 2.13.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
+dependencies = [
+ "bitflags 2.13.2",
+ "core-foundation",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ba106e844045ddc02c20768ac4b0b7cb45f2cc2ecbd833ac9f5dacb183c2055"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
+dependencies = [
+ "hybrid-array",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa",
+ "phf",
+ "smallvec",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d045de693cb712d0b22c6a64be5b953f67b3ce00ab5ad3dd5d8b441886ab8e1a"
+dependencies = [
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "ctor"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "914a755b7c2d4af2bdcff7ce1739e2db9a1b81a9b07123d8015786ae03c0980d"
+
+[[package]]
+name = "darling"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff"
+dependencies = [
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "dbus"
+version = "0.9.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e"
+dependencies = [
+ "libc",
+ "libdbus-sys",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "defmt"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a0795ac740cb54d7b3775c9c17345f6aaecf884c01733b39d6017738e0e3e1"
+dependencies = [
+ "bitflags 1.3.2",
+ "defmt-macros",
+]
+
+[[package]]
+name = "defmt-macros"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "840bb056bd99c495c9188198a258ab787c79f306d864db3e6e8451442d6d8366"
+dependencies = [
+ "defmt-parser",
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "defmt-parser"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71958f69fb2de856c5dd51ac9377e986ca1aa5919f931bf5395a807277f889a0"
+dependencies = [
+ "thiserror 2.0.21",
+]
+
+[[package]]
+name = "deranged"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "derive_more"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
+dependencies = [
+ "derive_more-impl",
+]
+
+[[package]]
+name = "derive_more-impl"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common 0.1.7",
+]
+
+[[package]]
+name = "digest"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
+dependencies = [
+ "block-buffer 0.12.1",
+ "const-oid",
+ "crypto-common 0.2.2",
+]
+
+[[package]]
+name = "dirs"
+version = "7.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d57d423b3c82e89b9a24ca3091fee61f456a26edbd28d26c65906f4bc1dcd8f"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "dispatch2"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
+dependencies = [
+ "bitflags 2.13.2",
+ "block2",
+ "libc",
+ "objc2",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "dlopen2"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4"
+dependencies = [
+ "dlopen2_derive",
+ "libc",
+ "once_cell",
+ "winapi",
+]
+
+[[package]]
+name = "dlopen2_derive"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "dom_query"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fac5fca71e65e94cc718a6e2af65d6e0f9c6027751c2aa562fbb5087fda639bc"
+dependencies = [
+ "bit-set",
+ "cssparser",
+ "foldhash",
+ "html5ever",
+ "precomputed-hash",
+ "selectors",
+ "tendril",
+]
+
+[[package]]
+name = "dpi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "dtoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590"
+
+[[package]]
+name = "dtoa-short"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87"
+dependencies = [
+ "dtoa",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
+
+[[package]]
+name = "embed-resource"
+version = "3.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6168487b5e7eb2673e6efe1200b1848016e436a6ca0b8031bf04bd9d493a249f"
+dependencies = [
+ "cc",
+ "memchr",
+ "rustc_version",
+ "toml 1.1.8+spec-1.1.0",
+ "vswhom",
+ "winreg",
+]
+
+[[package]]
+name = "embed_plist"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
+
+[[package]]
+name = "equivalent"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826"
+
+[[package]]
+name = "erased-serde"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e59b668157f32d3459d4bd634861a06ffa2503a461ca5f0916b9f0252605e66"
+dependencies = [
+ "serde",
+ "serde_core",
+ "typeid",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
+dependencies = [
+ "memoffset",
+ "rustc_version",
+]
+
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48"
+
+[[package]]
+name = "flate2"
+version = "1.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.9.1",
+ "zlib-rs",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foldhash"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
+
+[[package]]
+name = "foreign-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d"
+
+[[package]]
+name = "futures-task"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd"
+
+[[package]]
+name = "futures-util"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "slab",
+]
+
+[[package]]
+name = "gcd"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a"
+
+[[package]]
+name = "gdk"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691"
+dependencies = [
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gdkwayland-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69"
+dependencies = [
+ "gdk-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gdkx11"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe"
+dependencies = [
+ "gdk",
+ "gdkx11-sys",
+ "gio",
+ "glib",
+ "libc",
+ "x11",
+]
+
+[[package]]
+name = "gdkx11-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d"
+dependencies = [
+ "gdk-sys",
+ "glib-sys",
+ "libc",
+ "system-deps",
+ "x11",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi 5.3.0",
+ "wasip2",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi 6.0.0",
+]
+
+[[package]]
+name = "gio"
+version = "0.18.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
+dependencies = [
+ "bitflags 2.13.2",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.18.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro-crate 2.0.2",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b"
+
+[[package]]
+name = "gobject-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gtauri"
+version = "0.1.0"
+dependencies = [
+ "http",
+ "image",
+ "kamadak-exif",
+ "log",
+ "rusqlite",
+ "serde",
+ "serde_json",
+ "sha1",
+ "tauri",
+ "tauri-build",
+ "tauri-runtime-wry",
+ "turbojpeg",
+]
+
+[[package]]
+name = "gtk"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a"
+dependencies = [
+ "atk",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk-sys",
+ "gtk3-macros",
+ "libc",
+ "pango",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
+dependencies = [
+ "foldhash",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a596f1b20ed2cc5ecac41a164aaebc7258057060f06c0cf7a2ba3991ee7990fb"
+dependencies = [
+ "hashbrown 0.17.1",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "html5ever"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46a1761807faccc9a19e86944bbf40610014066306f96edcdedc2fb714bcb7b8"
+dependencies = [
+ "log",
+ "markup5ever",
+]
+
+[[package]]
+name = "http"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0"
+dependencies = [
+ "bytes",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c"
+dependencies = [
+ "bytes",
+ "http",
+]
+
+[[package]]
+name = "http-body-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "http",
+ "http-body",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+[[package]]
+name = "hybrid-array"
+version = "0.4.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "hyper"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c3e324da4c95177d6291d4c8730197c0d1822f8a9766814a4a44fa5ab797c9c"
+dependencies = [
+ "atomic-waker",
+ "bytes",
+ "futures-core",
+ "http",
+ "http-body",
+ "httparse",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
+ "tokio",
+ "want",
+]
+
+[[package]]
+name = "hyper-util"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff"
+dependencies = [
+ "base64 0.23.1",
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "http",
+ "http-body",
+ "httparse",
+ "hyper",
+ "ipnet",
+ "libc",
+ "percent-encoding",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "log",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ico"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d75e94d66081e4d8dcd098bd8dc5254800fea14a26389b298410158d834de167"
+dependencies = [
+ "byteorder",
+ "png",
+]
+
+[[package]]
+name = "icu_collections"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd"
+dependencies = [
+ "displaydoc",
+ "potential_utf",
+ "utf8_iter",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locale_core"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599"
+dependencies = [
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc"
+
+[[package]]
+name = "icu_properties"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locale_core",
+ "icu_properties_data",
+ "icu_provider",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf"
+
+[[package]]
+name = "icu_provider"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514"
+dependencies = [
+ "displaydoc",
+ "icu_locale_core",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerotrie",
+ "zerovec",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
+dependencies = [
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
+]
+
+[[package]]
+name = "image"
+version = "0.25.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104"
+dependencies = [
+ "bytemuck",
+ "byteorder-lite",
+ "moxcms",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.17.1",
+ "serde",
+ "serde_core",
+]
+
+[[package]]
+name = "infer"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4200d433cbd5178df7797c9c2e75b348b728e39631cf14520d1e2fc424201f4"
+dependencies = [
+ "cfb",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0"
+
+[[package]]
+name = "itoa"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
+
+[[package]]
+name = "javascriptcore-rs"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "javascriptcore-rs-sys",
+]
+
+[[package]]
+name = "javascriptcore-rs-sys"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "jiff"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b005715dcbeb0089a3c0dab99f2ff1cc3b2525323552703d648585d342a383"
+dependencies = [
+ "defmt",
+ "jiff-core",
+ "jiff-static",
+ "jiff-tzdb-platform",
+ "log",
+ "portable-atomic",
+ "portable-atomic-util",
+ "serde_core",
+ "windows-link",
+]
+
+[[package]]
+name = "jiff-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e52fe76043ccecc9005d2305ebaadf7d7fc0cc89ca6baa10a94d6bc68c7128c"
+dependencies = [
+ "defmt",
+ "log",
+]
+
+[[package]]
+name = "jiff-static"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cc9817253cf7c7ee4684451bd327e88d6f3658014e54a29198625590650695c"
+dependencies = [
+ "jiff-core",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "jiff-tzdb"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa8377070c6bae868759445e5a77f66d84f0b72f3a054bfb00e6d038b8282da7"
+
+[[package]]
+name = "jiff-tzdb-platform"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8"
+dependencies = [
+ "jiff-tzdb",
+]
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys 0.3.1",
+ "log",
+ "thiserror 1.0.69",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
+dependencies = [
+ "jni-sys 0.4.1",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
+dependencies = [
+ "jni-sys-macros",
+]
+
+[[package]]
+name = "jni-sys-macros"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
+dependencies = [
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dc09d2154098bbf4ef54eab6b117a3c24cbbffe94046b16ee6d6d4510584d3a"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-patch"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7421438de105a0827e44fadd05377727847d717c80ce29a229f85fd04c427b72"
+dependencies = [
+ "jsonptr",
+ "serde",
+ "serde_json",
+ "thiserror 2.0.21",
+]
+
+[[package]]
+name = "jsonptr"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5a3cc660ba5d72bce0b3bb295bf20847ccbb40fd423f3f05b61273672e561fe"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "kamadak-exif"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1130d80c7374efad55a117d715a3af9368f0fa7a2c54573afc15a188cd984837"
+dependencies = [
+ "mutate_once",
+]
+
+[[package]]
+name = "keyboard-types"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d"
+dependencies = [
+ "bitflags 2.13.2",
+ "serde",
+]
+
+[[package]]
+name = "libappindicator"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a"
+dependencies = [
+ "glib",
+ "gtk",
+ "gtk-sys",
+ "libappindicator-sys",
+ "log",
+]
+
+[[package]]
+name = "libappindicator-sys"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
+dependencies = [
+ "gtk-sys",
+ "libloading",
+ "once_cell",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.191"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libredox"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.39.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14a5f01b87b92705d07b433c06f96cbc764637d81a0bffb5734ce17cf0f9a2b3"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "litemap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae"
+
+[[package]]
+name = "lock_api"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c"
+
+[[package]]
+name = "markup5ever"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de"
+dependencies = [
+ "log",
+ "tendril",
+ "web_atoms",
+]
+
+[[package]]
+name = "memchr"
+version = "2.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
+
+[[package]]
+name = "memoffset"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
+dependencies = [
+ "adler2",
+ "simd-adler32",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c"
+dependencies = [
+ "adler2",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "1.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "moxcms"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b"
+dependencies = [
+ "num-traits",
+ "pxfm",
+]
+
+[[package]]
+name = "muda"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cca139e57da4383727f189e43e66e84fa372347027fc996f9f1a007ec0a37996"
+dependencies = [
+ "crossbeam-channel",
+ "dpi",
+ "gtk",
+ "keyboard-types",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+ "once_cell",
+ "png",
+ "serde",
+ "thiserror 2.0.21",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "mutate_once"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af"
+
+[[package]]
+name = "ndk"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
+dependencies = [
+ "bitflags 2.13.2",
+ "jni-sys 0.3.1",
+ "log",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle",
+ "thiserror 1.0.69",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.6.0+11769913"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
+dependencies = [
+ "jni-sys 0.3.1",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
+
+[[package]]
+name = "num-conv"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26"
+dependencies = [
+ "num_enum_derive",
+ "rustversion",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8"
+dependencies = [
+ "proc-macro-crate 3.5.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "objc2"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08849bbd4767dfae9457696856ae1c84fe4e0281bbe4a7abff2d0e06fb7981f8"
+dependencies = [
+ "objc2-encode",
+ "objc2-exception-helper",
+]
+
+[[package]]
+name = "objc2-app-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
+dependencies = [
+ "bitflags 2.13.2",
+ "block2",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-foundation",
+ "objc2-quartz-core",
+]
+
+[[package]]
+name = "objc2-cloud-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c"
+dependencies = [
+ "bitflags 2.13.2",
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-core-data"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa"
+dependencies = [
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-core-foundation"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
+dependencies = [
+ "bitflags 2.13.2",
+ "dispatch2",
+ "objc2",
+]
+
+[[package]]
+name = "objc2-core-graphics"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
+dependencies = [
+ "bitflags 2.13.2",
+ "dispatch2",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-io-surface",
+]
+
+[[package]]
+name = "objc2-core-image"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006"
+dependencies = [
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-core-location"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009"
+dependencies = [
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-core-text"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d"
+dependencies = [
+ "bitflags 2.13.2",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
+
+[[package]]
+name = "objc2-exception-helper"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc2-foundation"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
+dependencies = [
+ "bitflags 2.13.2",
+ "block2",
+ "objc2",
+ "objc2-core-foundation",
+]
+
+[[package]]
+name = "objc2-io-surface"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
+dependencies = [
+ "bitflags 2.13.2",
+ "objc2",
+ "objc2-core-foundation",
+]
+
+[[package]]
+name = "objc2-quartz-core"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f"
+dependencies = [
+ "bitflags 2.13.2",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-ui-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
+dependencies = [
+ "bitflags 2.13.2",
+ "block2",
+ "objc2",
+ "objc2-cloud-kit",
+ "objc2-core-data",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-core-image",
+ "objc2-core-location",
+ "objc2-core-text",
+ "objc2-foundation",
+ "objc2-quartz-core",
+ "objc2-user-notifications",
+]
+
+[[package]]
+name = "objc2-user-notifications"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e"
+dependencies = [
+ "objc2",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "objc2-web-kit"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f"
+dependencies = [
+ "bitflags 2.13.2",
+ "block2",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "pango"
+version = "0.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4"
+dependencies = [
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-link",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+
+[[package]]
+name = "phf"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+ "serde",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
+dependencies = [
+ "fastrand",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"
+
+[[package]]
+name = "plist"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327a4cb2ad49dc48adfdc9da89e22c64d488b508c67a044d71ba729e4521a285"
+dependencies = [
+ "base64 0.23.1",
+ "indexmap 2.14.2",
+ "quick-xml",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "png"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61"
+dependencies = [
+ "bitflags 2.13.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.8.9",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
+
+[[package]]
+name = "portable-atomic-util"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715"
+dependencies = [
+ "portable-atomic",
+]
+
+[[package]]
+name = "potential_utf"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661"
+dependencies = [
+ "zerovec",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24"
+dependencies = [
+ "toml_datetime 0.6.3",
+ "toml_edit 0.20.2",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"
+dependencies = [
+ "toml_edit 0.25.17+spec-1.1.0",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pxfm"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea"
+
+[[package]]
+name = "quick-xml"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41b1177fdf999d2321d3fb46ff47159d9c1fb9ad66a4879f8c50a0b504615e9b"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r-efi"
+version = "5.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
+[[package]]
+name = "r-efi"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
+
+[[package]]
+name = "raw-window-handle"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
+dependencies = [
+ "bitflags 2.13.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0"
+dependencies = [
+ "libredox",
+ "thiserror 2.0.21",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "regex"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
+
+[[package]]
+name = "reqwest"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029"
+dependencies = [
+ "base64 0.23.1",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "js-sys",
+ "log",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "sync_wrapper",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tower-http",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+]
+
+[[package]]
+name = "rsqlite-vfs"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "353b74f9810d5b085b6c42c9d86a5f0fdb795553235cdd48753b32e3809d18a7"
+dependencies = [
+ "thiserror 2.0.21",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.41.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da9bba6f3506135e120a6586df05be18b48d18896600646a4bec8f993d91a594"
+dependencies = [
+ "bitflags 2.13.2",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+ "sqlite-wasm-rs",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schemars"
+version = "0.8.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
+dependencies = [
+ "dyn-clone",
+ "indexmap 1.9.3",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "schemars"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab508826f74a77ca9d5aba6ff19b522583ee3eaf28a19384ff3d0e5835fadf6e"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "selectors"
+version = "0.38.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d"
+dependencies = [
+ "bitflags 2.13.2",
+ "cssparser",
+ "derive_more",
+ "log",
+ "new_debug_unreachable",
+ "phf",
+ "phf_codegen",
+ "precomputed-hash",
+ "rustc-hash",
+ "servo_arc",
+ "smallvec",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
+dependencies = [
+ "serde",
+ "serde_core",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.229"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
+dependencies = [
+ "serde_core",
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-untagged"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
+dependencies = [
+ "erased-serde",
+ "serde",
+ "serde_core",
+ "typeid",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.229"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.229"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.154"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6"
+dependencies = [
+ "itoa",
+ "memchr",
+ "serde",
+ "serde_core",
+ "zmij",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e7523beb55eece201a2356bee0bbca0d1ab466c14c07703b2e0ee6d42cb0c2c"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df9adc193c780ef8f159aee8b61e2d5801aaa555e6eb0947fe45530ec506296f"
+dependencies = [
+ "base64 0.23.1",
+ "bs58",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.14.2",
+ "jiff",
+ "schemars 0.9.0",
+ "schemars 1.2.3",
+ "serde_core",
+ "serde_json",
+ "serde_with_macros",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e17bbc68e28663bbbb90df47e058aa7eda4fb445b89fe70457bb94fbccf6e49"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "serialize-to-javascript"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
+dependencies = [
+ "serde",
+ "serde_json",
+ "serialize-to-javascript-impl",
+]
+
+[[package]]
+name = "serialize-to-javascript-impl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "servo_arc"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "sha1"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214"
+dependencies = [
+ "cfg-if",
+ "cpufeatures 0.3.1",
+ "digest 0.11.3",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+dependencies = [
+ "cfg-if",
+ "cpufeatures 0.2.17",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "shlex"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"
+
+[[package]]
+name = "siphasher"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256"
+
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
+name = "smallvec"
+version = "1.16.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8"
+
+[[package]]
+name = "socket2"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
+dependencies = [
+ "libc",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "softbuffer"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3"
+dependencies = [
+ "bytemuck",
+ "js-sys",
+ "ndk",
+ "objc2",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-foundation",
+ "objc2-quartz-core",
+ "raw-window-handle",
+ "redox_syscall",
+ "tracing",
+ "wasm-bindgen",
+ "web-sys",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "soup3"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f"
+dependencies = [
+ "futures-channel",
+ "gio",
+ "glib",
+ "libc",
+ "soup3-sys",
+]
+
+[[package]]
+name = "soup3-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "sqlite-wasm-rs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36bd8e29bf08189a005b2df1df99823aa0861cabe9044e5f31ed54ca292ee618"
+dependencies = [
+ "cc",
+ "rsqlite-vfs",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+
+[[package]]
+name = "static_vcruntime"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff7589a1859b09232522bb9edf076ca7fcf14ded96685d3fa629db73023ffbb7"
+
+[[package]]
+name = "string_cache"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901"
+dependencies = [
+ "new_debug_unreachable",
+ "parking_lot",
+ "phf_shared",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "swift-rs"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cefd87076fd385308ee4aff597256c902f1fbb4d031de1558efc12f8ffefadd9"
+dependencies = [
+ "base64 0.21.7",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.119"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "3.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
+dependencies = [
+ "cfg-expr",
+ "heck 0.5.0",
+ "pkg-config",
+ "toml 0.8.2",
+ "version-compare",
+]
+
+[[package]]
+name = "tao"
+version = "0.37.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5777b06fe6435126ae8d816eba269e050e1e10d302cf5461e9c49eccabc3548"
+dependencies = [
+ "bitflags 2.13.2",
+ "block2",
+ "core-foundation",
+ "core-graphics",
+ "crossbeam-channel",
+ "dbus",
+ "dispatch2",
+ "dlopen2",
+ "dpi",
+ "gdkwayland-sys",
+ "gdkx11-sys",
+ "gtk",
+ "jni",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
+ "objc2-ui-kit",
+ "parking_lot",
+ "percent-encoding",
+ "raw-window-handle",
+ "tao-macros",
+ "unicode-segmentation",
+ "url",
+ "windows",
+ "windows-core",
+ "windows-version",
+ "x11-dl",
+]
+
+[[package]]
+name = "tao-macros"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
+
+[[package]]
+name = "tauri"
+version = "2.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb0244332cfb9cee7e2a568bf5da29a36ed8fdbd717f6f47a66b6b7b358c072"
+dependencies = [
+ "anyhow",
+ "bytes",
+ "cookie",
+ "dirs",
+ "dunce",
+ "embed_plist",
+ "getrandom 0.3.4",
+ "glob",
+ "gtk",
+ "heck 0.5.0",
+ "http",
+ "jni",
+ "libc",
+ "log",
+ "mime",
+ "muda",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-foundation",
+ "objc2-ui-kit",
+ "objc2-web-kit",
+ "percent-encoding",
+ "plist",
+ "raw-window-handle",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "serialize-to-javascript",
+ "swift-rs",
+ "tauri-build",
+ "tauri-macros",
+ "tauri-runtime",
+ "tauri-runtime-wry",
+ "tauri-utils",
+ "thiserror 2.0.21",
+ "tokio",
+ "tray-icon",
+ "url",
+ "webkit2gtk",
+ "webview2-com",
+ "window-vibrancy",
+ "windows",
+]
+
+[[package]]
+name = "tauri-build"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adddb0e648752aaac5da9c3c3c6a68e1e87cab55e3b757b18a9441ef8c3ac614"
+dependencies = [
+ "anyhow",
+ "cargo_toml",
+ "dirs",
+ "glob",
+ "heck 0.5.0",
+ "json-patch",
+ "schemars 0.8.22",
+ "semver",
+ "serde",
+ "serde_json",
+ "static_vcruntime",
+ "strsim",
+ "tauri-utils",
+ "tauri-winres",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-codegen"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb37631cf71dab5e8ab55e1bdd701e18a52653d90b78e71d0e5598b1e0a61316"
+dependencies = [
+ "base64 0.23.1",
+ "brotli",
+ "ico",
+ "json-patch",
+ "plist",
+ "png",
+ "proc-macro2",
+ "quote",
+ "semver",
+ "serde",
+ "serde_json",
+ "sha2",
+ "syn 2.0.119",
+ "tauri-utils",
+ "thiserror 2.0.21",
+ "time",
+ "url",
+ "uuid",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-macros"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cc38db58854c10fb5f91a887ed8bf82d3239bb92b5d8db86eda09e96d9963d1"
+dependencies = [
+ "heck 0.5.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+ "tauri-codegen",
+ "tauri-utils",
+]
+
+[[package]]
+name = "tauri-runtime"
+version = "2.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c55766d99cea69055904d1735b93c2049302b2e09effd462120deb5581d78e9"
+dependencies = [
+ "cookie",
+ "dpi",
+ "gtk",
+ "http",
+ "jni",
+ "objc2",
+ "objc2-ui-kit",
+ "objc2-web-kit",
+ "raw-window-handle",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "thiserror 2.0.21",
+ "url",
+ "webkit2gtk",
+ "webview2-com",
+ "windows",
+]
+
+[[package]]
+name = "tauri-runtime-wry"
+version = "2.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1aa9d8b7a120f879f44fdc1053f7b7dbf416bf0bbc6a72b714dec46b782b52f"
+dependencies = [
+ "gtk",
+ "http",
+ "jni",
+ "log",
+ "objc2",
+ "objc2-app-kit",
+ "percent-encoding",
+ "raw-window-handle",
+ "softbuffer",
+ "tao",
+ "tauri-runtime",
+ "tauri-utils",
+ "url",
+ "webkit2gtk",
+ "webview2-com",
+ "windows",
+ "wry",
+]
+
+[[package]]
+name = "tauri-utils"
+version = "2.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "362ab21cd4cc713f2a02b1a9b5688198b1541cfb6907c4281e9190e0f0ef4aa3"
+dependencies = [
+ "anyhow",
+ "brotli",
+ "cargo_metadata",
+ "ctor",
+ "dom_query",
+ "dunce",
+ "glob",
+ "http",
+ "infer",
+ "json-patch",
+ "log",
+ "memchr",
+ "phf",
+ "plist",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "schemars 0.8.22",
+ "semver",
+ "serde",
+ "serde-untagged",
+ "serde_json",
+ "serde_with",
+ "swift-rs",
+ "thiserror 2.0.21",
+ "toml 1.1.8+spec-1.1.0",
+ "url",
+ "urlpattern",
+ "uuid",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-winres"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c52bb6904475a6ca662f15ef787f18ade61d5740a1ee12c45d3b748efdb6f796"
+dependencies = [
+ "dunce",
+ "embed-resource",
+ "toml 1.1.8+spec-1.1.0",
+]
+
+[[package]]
+name = "tendril"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08"
+dependencies = [
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl 1.0.69",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"
+dependencies = [
+ "thiserror-impl 2.0.21",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "time"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134"
+dependencies = [
+ "deranged",
+ "num-conv",
+ "powerfmt",
+ "serde_core",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
+
+[[package]]
+name = "time-macros"
+version = "0.2.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee"
+
+[[package]]
+name = "tokio"
+version = "1.54.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3"
+dependencies = [
+ "bytes",
+ "libc",
+ "mio",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e464cf451ba96ebfc6f9b6542f17ee8b8956e33f1e40d9690624e59d7a7f8a4b"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+dependencies = [
+ "serde",
+ "serde_spanned 0.6.9",
+ "toml_datetime 0.6.3",
+ "toml_edit 0.20.2",
+]
+
+[[package]]
+name = "toml"
+version = "1.1.8+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d"
+dependencies = [
+ "indexmap 2.14.2",
+ "serde_core",
+ "serde_spanned 1.1.2",
+ "toml_datetime 1.1.2+spec-1.1.0",
+ "toml_parser",
+ "toml_writer",
+ "winnow 1.0.4",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "1.1.2+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.14.2",
+ "toml_datetime 0.6.3",
+ "winnow 0.5.40",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+dependencies = [
+ "indexmap 2.14.2",
+ "serde",
+ "serde_spanned 0.6.9",
+ "toml_datetime 0.6.3",
+ "winnow 0.5.40",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.25.17+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3641d5bbb5349a79e1020a242d251efbc546ad8048d133958323ce9c40a9c9c"
+dependencies = [
+ "indexmap 2.14.2",
+ "toml_datetime 1.1.2+spec-1.1.0",
+ "toml_parser",
+ "winnow 1.0.4",
+]
+
+[[package]]
+name = "toml_parser"
+version = "1.1.5+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c"
+dependencies = [
+ "winnow 1.0.4",
+]
+
+[[package]]
+name = "toml_writer"
+version = "1.1.3+spec-1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06bdbd8cfc056b8d2e2e85f29b56a3bdbecb527cef81eb39e3e7b98af4652770"
+
+[[package]]
+name = "tower"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840"
+dependencies = [
+ "bitflags 2.13.2",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "pin-project-lite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "url",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+[[package]]
+name = "tracing"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tray-icon"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b9c52859a94554803ccd4a24b98f74148ebc73b90676d783f3490b1bff9d72"
+dependencies = [
+ "crossbeam-channel",
+ "dirs",
+ "libappindicator",
+ "muda",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-foundation",
+ "once_cell",
+ "png",
+ "serde",
+ "thiserror 2.0.21",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "turbojpeg"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81313fcd64aaa30ddfd59eaa122968136b2dd9cd41d9619b126cf71e67a01702"
+dependencies = [
+ "gcd",
+ "libc",
+ "thiserror 1.0.69",
+ "turbojpeg-sys",
+]
+
+[[package]]
+name = "turbojpeg-sys"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b5a974bc59382d35927e3a07eef2ba9a24fe7227cefe52ec44b508e1b90f86"
+dependencies = [
+ "anyhow",
+ "cmake",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "typeid"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
+
+[[package]]
+name = "typenum"
+version = "1.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
+
+[[package]]
+name = "url"
+version = "2.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "urlpattern"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df16f50ef4cc145211879a3867ba757076b25dfee812040dcb0658bd9ae7904b"
+dependencies = [
+ "icu_properties",
+ "regex",
+ "serde",
+ "url",
+]
+
+[[package]]
+name = "utf8_iter"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af3bd9d3e571c26fcce9d033b87ea5ab061b8d2ffe9b7a5675d810d68f03edf0"
+dependencies = [
+ "utf_types",
+]
+
+[[package]]
+name = "utf_types"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a3b425286980a367278453f3b6d28cdcb134b574e5a35824a6ff5eebad50bb6"
+
+[[package]]
+name = "uuid"
+version = "1.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a0e2d11620c50695fe12bbbfde96b3477fe606e7284c22d505c12ce51214514"
+dependencies = [
+ "getrandom 0.4.3",
+ "js-sys",
+ "serde_core",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version-compare"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "vswhom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
+dependencies = [
+ "libc",
+ "vswhom-sys",
+]
+
+[[package]]
+name = "vswhom-sys"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec4cdd0dd910afe868b7ef477227d8d538b46b3075031afee8a9f2acb0a2ed0b"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.1+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+[[package]]
+name = "wasip2"
+version = "1.0.4+wasi-0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
+dependencies = [
+ "wit-bindgen",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0181c14ddd6c7b8b0b0132a5f1ea2f32be0d893cd3ea97b6e3b28886b8a3d1c"
+dependencies = [
+ "cfg-if",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e14e0327cb5368ad60ccb22d04a9827a693c95a926d8d125e9fa39e0baec501"
+dependencies = [
+ "js-sys",
+ "tokio",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e931a02a39abdbf66966fc35902b5ed58344750a70885bed4ebb3d8eaf28ed9"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ca4b54280e455bd831e33a6b8e734baf432fe63fbc35c42ac14ce67a043a53a"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b1f9c3798725016c6ee5f2f57869ec0831e8bbc0ab0310a86e787e97f41389e"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "wasm-streams"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7d179596ff5ec0f6de4db64d54011bde6289cc49603d3a6e4ce3f329207ab88"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web-time"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "web_atoms"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3"
+dependencies = [
+ "phf",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+]
+
+[[package]]
+name = "webkit2gtk"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk",
+ "gtk-sys",
+ "javascriptcore-rs",
+ "libc",
+ "once_cell",
+ "soup3",
+ "webkit2gtk-sys",
+]
+
+[[package]]
+name = "webkit2gtk-sys"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "javascriptcore-rs-sys",
+ "libc",
+ "pkg-config",
+ "soup3-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "webview2-com"
+version = "0.39.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f89fca7a704cee10dcb3654c1dbb8941d1783132f1917358af75bec37a7d7e6"
+dependencies = [
+ "webview2-com-macros",
+ "webview2-com-sys",
+ "windows",
+ "windows-core",
+]
+
+[[package]]
+name = "webview2-com-macros"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "webview2-com-sys"
+version = "0.39.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3a07132775117d6065853d9d1178157b8c90e228de47129d6bce2c7edebedfb"
+dependencies = [
+ "thiserror 2.0.21",
+ "windows",
+ "windows-core",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+dependencies = [
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "window-vibrancy"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "111e51caca442cafd9bab396628ac4d814880eaea4e63dfd76a12e9f342b5580"
+dependencies = [
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+ "objc2-quartz-core",
+ "raw-window-handle",
+ "windows-sys 0.61.2",
+ "windows-version",
+]
+
+[[package]]
+name = "windows"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
+dependencies = [
+ "windows-collections",
+ "windows-core",
+ "windows-future",
+ "windows-numerics",
+]
+
+[[package]]
+name = "windows-collections"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
+dependencies = [
+ "windows-core",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-future"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
+dependencies = [
+ "windows-core",
+ "windows-link",
+ "windows-threading",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.119",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+[[package]]
+name = "windows-numerics"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
+dependencies = [
+ "windows-core",
+ "windows-link",
+]
+
+[[package]]
+name = "windows-result"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-threading"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-version"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "winnow"
+version = "0.5.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winnow"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.56.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d6f32a0ff4a9f6f01231eb2059cc85479330739333e0e58cadf03b6af2cca10"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.61.2",
+]
+
+[[package]]
+name = "wit-bindgen"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
+
+[[package]]
+name = "writeable"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
+
+[[package]]
+name = "wry"
+version = "0.57.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759c50ddad0ef9913bb5496cb9d509a50433a3b78cb0238d61105526589cf0e9"
+dependencies = [
+ "base64 0.23.1",
+ "block2",
+ "cookie",
+ "crossbeam-channel",
+ "dirs",
+ "dom_query",
+ "dpi",
+ "dunce",
+ "gdkx11",
+ "gtk",
+ "http",
+ "javascriptcore-rs",
+ "jni",
+ "libc",
+ "ndk",
+ "objc2",
+ "objc2-app-kit",
+ "objc2-core-foundation",
+ "objc2-foundation",
+ "objc2-ui-kit",
+ "objc2-web-kit",
+ "percent-encoding",
+ "raw-window-handle",
+ "sha2",
+ "soup3",
+ "tao-macros",
+ "thiserror 2.0.21",
+ "url",
+ "webkit2gtk",
+ "webkit2gtk-sys",
+ "webview2-com",
+ "windows",
+ "windows-core",
+ "windows-version",
+ "x11-dl",
+]
+
+[[package]]
+name = "x11"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "yoke"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3"
+dependencies = [
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+ "synstructure",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+ "synstructure",
+]
+
+[[package]]
+name = "zerotrie"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.11.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 3.0.9",
+]
+
+[[package]]
+name = "zlib-rs"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112"
+
+[[package]]
+name = "zmij"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
diff --git a/harnesses/gtauri/Cargo.toml b/harnesses/gtauri/Cargo.toml
new file mode 100644
index 0000000..75df6ed
--- /dev/null
+++ b/harnesses/gtauri/Cargo.toml
@@ -0,0 +1,27 @@
+[package]
+name = "gtauri"
+version = "0.1.0"
+description = "gallery on Tauri"
+authors = ["gmp"]
+edition = "2021"
+
+[lib]
+name = "gtauri_lib"
+crate-type = ["staticlib", "cdylib", "rlib"]
+
+[build-dependencies]
+tauri-build = { version = "2", features = [] }
+
+[dependencies]
+tauri = { version = "2", features = [] }
+tauri-runtime-wry = "2"
+serde = { version = "1", features = ["derive"] }
+serde_json = "1"
+log = { version = "0.4", features = ["std"] }
+http = "1"
+# gallery engine (shared with the egui build):
+rusqlite = { version = "0.41", features = ["bundled"] }
+turbojpeg = { version = "1.5.1", features = ["cmake"] }
+kamadak-exif = "0.6"
+sha1 = "0.11"
+image = { version = "0.25", default-features = false, features = ["png"] }
diff --git a/harnesses/gtauri/app-icon.png b/harnesses/gtauri/app-icon.png
new file mode 100644
index 0000000..784f320
Binary files /dev/null and b/harnesses/gtauri/app-icon.png differ
diff --git a/harnesses/gtauri/build.rs b/harnesses/gtauri/build.rs
new file mode 100644
index 0000000..e3e0195
--- /dev/null
+++ b/harnesses/gtauri/build.rs
@@ -0,0 +1,27 @@
+// tauri::generate_context!() embeds `frontendDist` at compile time. Without
+// rerun directives cargo does NOT rebuild the .so when frontend files change
+// (observed: stale grid code survived a "successful" rebuild). Directory-level
+// rerun-if-changed only tracks the dir mtime (add/remove/rename, NOT content
+// edits), so list every file explicitly.
+fn walk(p: &std::path::Path) {
+ for e in std::fs::read_dir(p).unwrap() {
+ let e = e.unwrap();
+ let path = e.path();
+ if path.is_dir() {
+ walk(&path);
+ } else {
+ println!("cargo:rerun-if-changed={}", path.display());
+ }
+ }
+}
+
+fn main() {
+ walk(std::path::Path::new("frontend/dist"));
+ println!("cargo:rerun-if-changed=tauri.conf.json");
+
+ // tauri_build::build() inspects the TARGET env var itself (build scripts
+ // run on the HOST, so a cfg(target_os) gate would disable it). For
+ // android targets it emits `cargo:rustc-cfg=mobile`, which is what
+ // activates `#[cfg_attr(mobile, tauri::mobile_entry_point)]`.
+ tauri_build::build();
+}
diff --git a/harnesses/gtauri/capabilities/default.json b/harnesses/gtauri/capabilities/default.json
new file mode 100644
index 0000000..4c8eddd
--- /dev/null
+++ b/harnesses/gtauri/capabilities/default.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "../gen/schemas/desktop-schema.json",
+ "identifier": "default",
+ "description": "tttest: FR batching + lifecycle logs from the webview",
+ "windows": [
+ "main"
+ ],
+ "permissions": [
+ "core:default"
+ ]
+}
\ No newline at end of file
diff --git a/harnesses/gtauri/frontend/dist/img/000.jpg b/harnesses/gtauri/frontend/dist/img/000.jpg
new file mode 100644
index 0000000..1236c42
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/000.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/001.jpg b/harnesses/gtauri/frontend/dist/img/001.jpg
new file mode 100644
index 0000000..dabf8c5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/001.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/002.jpg b/harnesses/gtauri/frontend/dist/img/002.jpg
new file mode 100644
index 0000000..107dede
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/002.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/003.jpg b/harnesses/gtauri/frontend/dist/img/003.jpg
new file mode 100644
index 0000000..6d8d694
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/003.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/004.jpg b/harnesses/gtauri/frontend/dist/img/004.jpg
new file mode 100644
index 0000000..53884f4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/004.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/005.jpg b/harnesses/gtauri/frontend/dist/img/005.jpg
new file mode 100644
index 0000000..161d5b2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/005.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/006.jpg b/harnesses/gtauri/frontend/dist/img/006.jpg
new file mode 100644
index 0000000..179f269
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/006.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/007.jpg b/harnesses/gtauri/frontend/dist/img/007.jpg
new file mode 100644
index 0000000..bf469d1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/007.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/008.jpg b/harnesses/gtauri/frontend/dist/img/008.jpg
new file mode 100644
index 0000000..fe21453
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/008.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/009.jpg b/harnesses/gtauri/frontend/dist/img/009.jpg
new file mode 100644
index 0000000..8d44752
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/009.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/010.jpg b/harnesses/gtauri/frontend/dist/img/010.jpg
new file mode 100644
index 0000000..6c951b2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/010.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/011.jpg b/harnesses/gtauri/frontend/dist/img/011.jpg
new file mode 100644
index 0000000..ddfdb79
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/011.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/012.jpg b/harnesses/gtauri/frontend/dist/img/012.jpg
new file mode 100644
index 0000000..e1addd1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/012.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/013.jpg b/harnesses/gtauri/frontend/dist/img/013.jpg
new file mode 100644
index 0000000..e5e2069
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/013.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/014.jpg b/harnesses/gtauri/frontend/dist/img/014.jpg
new file mode 100644
index 0000000..e58c15c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/014.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/015.jpg b/harnesses/gtauri/frontend/dist/img/015.jpg
new file mode 100644
index 0000000..7da20ae
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/015.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/016.jpg b/harnesses/gtauri/frontend/dist/img/016.jpg
new file mode 100644
index 0000000..32e0b04
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/016.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/017.jpg b/harnesses/gtauri/frontend/dist/img/017.jpg
new file mode 100644
index 0000000..f21878f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/017.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/018.jpg b/harnesses/gtauri/frontend/dist/img/018.jpg
new file mode 100644
index 0000000..1cb684b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/018.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/019.jpg b/harnesses/gtauri/frontend/dist/img/019.jpg
new file mode 100644
index 0000000..ace62dd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/019.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/020.jpg b/harnesses/gtauri/frontend/dist/img/020.jpg
new file mode 100644
index 0000000..fa6832e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/020.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/021.jpg b/harnesses/gtauri/frontend/dist/img/021.jpg
new file mode 100644
index 0000000..0b6ce0c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/021.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/022.jpg b/harnesses/gtauri/frontend/dist/img/022.jpg
new file mode 100644
index 0000000..c486250
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/022.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/023.jpg b/harnesses/gtauri/frontend/dist/img/023.jpg
new file mode 100644
index 0000000..2c81615
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/023.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/024.jpg b/harnesses/gtauri/frontend/dist/img/024.jpg
new file mode 100644
index 0000000..1c91698
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/024.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/025.jpg b/harnesses/gtauri/frontend/dist/img/025.jpg
new file mode 100644
index 0000000..69abde3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/025.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/026.jpg b/harnesses/gtauri/frontend/dist/img/026.jpg
new file mode 100644
index 0000000..165d4e2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/026.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/027.jpg b/harnesses/gtauri/frontend/dist/img/027.jpg
new file mode 100644
index 0000000..df939ee
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/027.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/028.jpg b/harnesses/gtauri/frontend/dist/img/028.jpg
new file mode 100644
index 0000000..2752af2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/028.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/029.jpg b/harnesses/gtauri/frontend/dist/img/029.jpg
new file mode 100644
index 0000000..f751e40
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/029.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/030.jpg b/harnesses/gtauri/frontend/dist/img/030.jpg
new file mode 100644
index 0000000..4dc4653
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/030.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/031.jpg b/harnesses/gtauri/frontend/dist/img/031.jpg
new file mode 100644
index 0000000..f6887af
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/031.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/032.jpg b/harnesses/gtauri/frontend/dist/img/032.jpg
new file mode 100644
index 0000000..1e3a2e5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/032.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/033.jpg b/harnesses/gtauri/frontend/dist/img/033.jpg
new file mode 100644
index 0000000..bc87571
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/033.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/034.jpg b/harnesses/gtauri/frontend/dist/img/034.jpg
new file mode 100644
index 0000000..b8c556b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/034.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/035.jpg b/harnesses/gtauri/frontend/dist/img/035.jpg
new file mode 100644
index 0000000..f5ef78b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/035.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/036.jpg b/harnesses/gtauri/frontend/dist/img/036.jpg
new file mode 100644
index 0000000..7891819
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/036.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/037.jpg b/harnesses/gtauri/frontend/dist/img/037.jpg
new file mode 100644
index 0000000..a432b93
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/037.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/038.jpg b/harnesses/gtauri/frontend/dist/img/038.jpg
new file mode 100644
index 0000000..cd6f4a1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/038.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/039.jpg b/harnesses/gtauri/frontend/dist/img/039.jpg
new file mode 100644
index 0000000..c403800
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/039.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/040.jpg b/harnesses/gtauri/frontend/dist/img/040.jpg
new file mode 100644
index 0000000..c53b08b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/040.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/041.jpg b/harnesses/gtauri/frontend/dist/img/041.jpg
new file mode 100644
index 0000000..3ad9a1a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/041.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/042.jpg b/harnesses/gtauri/frontend/dist/img/042.jpg
new file mode 100644
index 0000000..0e85183
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/042.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/043.jpg b/harnesses/gtauri/frontend/dist/img/043.jpg
new file mode 100644
index 0000000..5d2fc2c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/043.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/044.jpg b/harnesses/gtauri/frontend/dist/img/044.jpg
new file mode 100644
index 0000000..30ecee9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/044.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/045.jpg b/harnesses/gtauri/frontend/dist/img/045.jpg
new file mode 100644
index 0000000..6333e33
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/045.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/046.jpg b/harnesses/gtauri/frontend/dist/img/046.jpg
new file mode 100644
index 0000000..7907dc8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/046.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/047.jpg b/harnesses/gtauri/frontend/dist/img/047.jpg
new file mode 100644
index 0000000..0801273
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/047.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/048.jpg b/harnesses/gtauri/frontend/dist/img/048.jpg
new file mode 100644
index 0000000..6ae8975
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/048.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/049.jpg b/harnesses/gtauri/frontend/dist/img/049.jpg
new file mode 100644
index 0000000..eb66484
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/049.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/050.jpg b/harnesses/gtauri/frontend/dist/img/050.jpg
new file mode 100644
index 0000000..e634ae9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/050.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/051.jpg b/harnesses/gtauri/frontend/dist/img/051.jpg
new file mode 100644
index 0000000..00ca024
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/051.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/052.jpg b/harnesses/gtauri/frontend/dist/img/052.jpg
new file mode 100644
index 0000000..a7468a9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/052.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/053.jpg b/harnesses/gtauri/frontend/dist/img/053.jpg
new file mode 100644
index 0000000..dfee9aa
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/053.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/054.jpg b/harnesses/gtauri/frontend/dist/img/054.jpg
new file mode 100644
index 0000000..ca7bd30
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/054.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/055.jpg b/harnesses/gtauri/frontend/dist/img/055.jpg
new file mode 100644
index 0000000..fafd645
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/055.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/056.jpg b/harnesses/gtauri/frontend/dist/img/056.jpg
new file mode 100644
index 0000000..5c59fcb
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/056.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/057.jpg b/harnesses/gtauri/frontend/dist/img/057.jpg
new file mode 100644
index 0000000..22e8e24
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/057.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/058.jpg b/harnesses/gtauri/frontend/dist/img/058.jpg
new file mode 100644
index 0000000..8fd2002
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/058.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/059.jpg b/harnesses/gtauri/frontend/dist/img/059.jpg
new file mode 100644
index 0000000..51633df
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/059.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/060.jpg b/harnesses/gtauri/frontend/dist/img/060.jpg
new file mode 100644
index 0000000..5d5a977
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/060.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/061.jpg b/harnesses/gtauri/frontend/dist/img/061.jpg
new file mode 100644
index 0000000..4ae146b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/061.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/062.jpg b/harnesses/gtauri/frontend/dist/img/062.jpg
new file mode 100644
index 0000000..3a3d6bc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/062.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/063.jpg b/harnesses/gtauri/frontend/dist/img/063.jpg
new file mode 100644
index 0000000..98267c3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/063.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/064.jpg b/harnesses/gtauri/frontend/dist/img/064.jpg
new file mode 100644
index 0000000..03c5452
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/064.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/065.jpg b/harnesses/gtauri/frontend/dist/img/065.jpg
new file mode 100644
index 0000000..22dd269
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/065.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/066.jpg b/harnesses/gtauri/frontend/dist/img/066.jpg
new file mode 100644
index 0000000..6e833cc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/066.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/067.jpg b/harnesses/gtauri/frontend/dist/img/067.jpg
new file mode 100644
index 0000000..668e611
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/067.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/068.jpg b/harnesses/gtauri/frontend/dist/img/068.jpg
new file mode 100644
index 0000000..0723817
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/068.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/069.jpg b/harnesses/gtauri/frontend/dist/img/069.jpg
new file mode 100644
index 0000000..23056d5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/069.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/070.jpg b/harnesses/gtauri/frontend/dist/img/070.jpg
new file mode 100644
index 0000000..2e71f16
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/070.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/071.jpg b/harnesses/gtauri/frontend/dist/img/071.jpg
new file mode 100644
index 0000000..c844f19
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/071.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/072.jpg b/harnesses/gtauri/frontend/dist/img/072.jpg
new file mode 100644
index 0000000..c5b542d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/072.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/073.jpg b/harnesses/gtauri/frontend/dist/img/073.jpg
new file mode 100644
index 0000000..8842b6f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/073.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/074.jpg b/harnesses/gtauri/frontend/dist/img/074.jpg
new file mode 100644
index 0000000..491b787
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/074.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/075.jpg b/harnesses/gtauri/frontend/dist/img/075.jpg
new file mode 100644
index 0000000..0d14115
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/075.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/076.jpg b/harnesses/gtauri/frontend/dist/img/076.jpg
new file mode 100644
index 0000000..af6128f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/076.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/077.jpg b/harnesses/gtauri/frontend/dist/img/077.jpg
new file mode 100644
index 0000000..22132ec
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/077.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/078.jpg b/harnesses/gtauri/frontend/dist/img/078.jpg
new file mode 100644
index 0000000..29f7059
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/078.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/079.jpg b/harnesses/gtauri/frontend/dist/img/079.jpg
new file mode 100644
index 0000000..2fae328
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/079.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/080.jpg b/harnesses/gtauri/frontend/dist/img/080.jpg
new file mode 100644
index 0000000..9f91a40
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/080.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/081.jpg b/harnesses/gtauri/frontend/dist/img/081.jpg
new file mode 100644
index 0000000..362b422
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/081.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/082.jpg b/harnesses/gtauri/frontend/dist/img/082.jpg
new file mode 100644
index 0000000..11c0a09
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/082.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/083.jpg b/harnesses/gtauri/frontend/dist/img/083.jpg
new file mode 100644
index 0000000..171259b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/083.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/084.jpg b/harnesses/gtauri/frontend/dist/img/084.jpg
new file mode 100644
index 0000000..f6702bc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/084.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/085.jpg b/harnesses/gtauri/frontend/dist/img/085.jpg
new file mode 100644
index 0000000..978aa0d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/085.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/086.jpg b/harnesses/gtauri/frontend/dist/img/086.jpg
new file mode 100644
index 0000000..3e1679e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/086.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/087.jpg b/harnesses/gtauri/frontend/dist/img/087.jpg
new file mode 100644
index 0000000..7f9177f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/087.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/088.jpg b/harnesses/gtauri/frontend/dist/img/088.jpg
new file mode 100644
index 0000000..e0b0fe7
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/088.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/089.jpg b/harnesses/gtauri/frontend/dist/img/089.jpg
new file mode 100644
index 0000000..d2f1856
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/089.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/090.jpg b/harnesses/gtauri/frontend/dist/img/090.jpg
new file mode 100644
index 0000000..f341b81
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/090.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/091.jpg b/harnesses/gtauri/frontend/dist/img/091.jpg
new file mode 100644
index 0000000..adebe5a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/091.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/092.jpg b/harnesses/gtauri/frontend/dist/img/092.jpg
new file mode 100644
index 0000000..38dc969
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/092.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/093.jpg b/harnesses/gtauri/frontend/dist/img/093.jpg
new file mode 100644
index 0000000..900e7ae
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/093.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/094.jpg b/harnesses/gtauri/frontend/dist/img/094.jpg
new file mode 100644
index 0000000..700a6de
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/094.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/095.jpg b/harnesses/gtauri/frontend/dist/img/095.jpg
new file mode 100644
index 0000000..1e7f21e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/095.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/096.jpg b/harnesses/gtauri/frontend/dist/img/096.jpg
new file mode 100644
index 0000000..3cf45aa
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/096.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/097.jpg b/harnesses/gtauri/frontend/dist/img/097.jpg
new file mode 100644
index 0000000..130435d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/097.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/098.jpg b/harnesses/gtauri/frontend/dist/img/098.jpg
new file mode 100644
index 0000000..19c1f0f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/098.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/099.jpg b/harnesses/gtauri/frontend/dist/img/099.jpg
new file mode 100644
index 0000000..e88a24b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/099.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/100.jpg b/harnesses/gtauri/frontend/dist/img/100.jpg
new file mode 100644
index 0000000..659983f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/100.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/101.jpg b/harnesses/gtauri/frontend/dist/img/101.jpg
new file mode 100644
index 0000000..5f8d343
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/101.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/102.jpg b/harnesses/gtauri/frontend/dist/img/102.jpg
new file mode 100644
index 0000000..4a08d12
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/102.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/103.jpg b/harnesses/gtauri/frontend/dist/img/103.jpg
new file mode 100644
index 0000000..189f6d8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/103.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/104.jpg b/harnesses/gtauri/frontend/dist/img/104.jpg
new file mode 100644
index 0000000..c77a308
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/104.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/105.jpg b/harnesses/gtauri/frontend/dist/img/105.jpg
new file mode 100644
index 0000000..c9c4de2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/105.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/106.jpg b/harnesses/gtauri/frontend/dist/img/106.jpg
new file mode 100644
index 0000000..41fbd01
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/106.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/107.jpg b/harnesses/gtauri/frontend/dist/img/107.jpg
new file mode 100644
index 0000000..4a94218
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/107.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/108.jpg b/harnesses/gtauri/frontend/dist/img/108.jpg
new file mode 100644
index 0000000..9ff840c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/108.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/109.jpg b/harnesses/gtauri/frontend/dist/img/109.jpg
new file mode 100644
index 0000000..f8c3e71
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/109.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/110.jpg b/harnesses/gtauri/frontend/dist/img/110.jpg
new file mode 100644
index 0000000..149448d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/110.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/111.jpg b/harnesses/gtauri/frontend/dist/img/111.jpg
new file mode 100644
index 0000000..975b5c1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/111.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/112.jpg b/harnesses/gtauri/frontend/dist/img/112.jpg
new file mode 100644
index 0000000..c81fd67
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/112.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/113.jpg b/harnesses/gtauri/frontend/dist/img/113.jpg
new file mode 100644
index 0000000..3c700f1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/113.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/114.jpg b/harnesses/gtauri/frontend/dist/img/114.jpg
new file mode 100644
index 0000000..21f8977
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/114.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/115.jpg b/harnesses/gtauri/frontend/dist/img/115.jpg
new file mode 100644
index 0000000..7b96f8b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/115.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/116.jpg b/harnesses/gtauri/frontend/dist/img/116.jpg
new file mode 100644
index 0000000..bdeaab5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/116.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/117.jpg b/harnesses/gtauri/frontend/dist/img/117.jpg
new file mode 100644
index 0000000..d718b2d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/117.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/118.jpg b/harnesses/gtauri/frontend/dist/img/118.jpg
new file mode 100644
index 0000000..b61b9c8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/118.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/119.jpg b/harnesses/gtauri/frontend/dist/img/119.jpg
new file mode 100644
index 0000000..541818d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/119.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/120.jpg b/harnesses/gtauri/frontend/dist/img/120.jpg
new file mode 100644
index 0000000..4c2e82e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/120.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/121.jpg b/harnesses/gtauri/frontend/dist/img/121.jpg
new file mode 100644
index 0000000..0ef05f8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/121.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/122.jpg b/harnesses/gtauri/frontend/dist/img/122.jpg
new file mode 100644
index 0000000..9575859
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/122.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/123.jpg b/harnesses/gtauri/frontend/dist/img/123.jpg
new file mode 100644
index 0000000..d7e5287
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/123.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/124.jpg b/harnesses/gtauri/frontend/dist/img/124.jpg
new file mode 100644
index 0000000..47e1a6f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/124.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/125.jpg b/harnesses/gtauri/frontend/dist/img/125.jpg
new file mode 100644
index 0000000..32de754
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/125.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/126.jpg b/harnesses/gtauri/frontend/dist/img/126.jpg
new file mode 100644
index 0000000..db2fa1f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/126.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/127.jpg b/harnesses/gtauri/frontend/dist/img/127.jpg
new file mode 100644
index 0000000..9fff447
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/127.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/128.jpg b/harnesses/gtauri/frontend/dist/img/128.jpg
new file mode 100644
index 0000000..f59316c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/128.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/129.jpg b/harnesses/gtauri/frontend/dist/img/129.jpg
new file mode 100644
index 0000000..d8d058e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/129.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/130.jpg b/harnesses/gtauri/frontend/dist/img/130.jpg
new file mode 100644
index 0000000..5bf7ac4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/130.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/131.jpg b/harnesses/gtauri/frontend/dist/img/131.jpg
new file mode 100644
index 0000000..820a899
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/131.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/132.jpg b/harnesses/gtauri/frontend/dist/img/132.jpg
new file mode 100644
index 0000000..6f88ceb
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/132.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/133.jpg b/harnesses/gtauri/frontend/dist/img/133.jpg
new file mode 100644
index 0000000..c00554b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/133.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/134.jpg b/harnesses/gtauri/frontend/dist/img/134.jpg
new file mode 100644
index 0000000..464ddfb
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/134.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/135.jpg b/harnesses/gtauri/frontend/dist/img/135.jpg
new file mode 100644
index 0000000..de7d013
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/135.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/136.jpg b/harnesses/gtauri/frontend/dist/img/136.jpg
new file mode 100644
index 0000000..a9b3a86
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/136.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/137.jpg b/harnesses/gtauri/frontend/dist/img/137.jpg
new file mode 100644
index 0000000..3b7f034
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/137.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/138.jpg b/harnesses/gtauri/frontend/dist/img/138.jpg
new file mode 100644
index 0000000..9d5ed31
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/138.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/139.jpg b/harnesses/gtauri/frontend/dist/img/139.jpg
new file mode 100644
index 0000000..3ea1de8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/139.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/140.jpg b/harnesses/gtauri/frontend/dist/img/140.jpg
new file mode 100644
index 0000000..cff9596
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/140.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/141.jpg b/harnesses/gtauri/frontend/dist/img/141.jpg
new file mode 100644
index 0000000..314cde7
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/141.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/142.jpg b/harnesses/gtauri/frontend/dist/img/142.jpg
new file mode 100644
index 0000000..851ac53
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/142.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/143.jpg b/harnesses/gtauri/frontend/dist/img/143.jpg
new file mode 100644
index 0000000..8420030
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/143.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/144.jpg b/harnesses/gtauri/frontend/dist/img/144.jpg
new file mode 100644
index 0000000..3db135d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/144.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/145.jpg b/harnesses/gtauri/frontend/dist/img/145.jpg
new file mode 100644
index 0000000..e8dd52c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/145.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/146.jpg b/harnesses/gtauri/frontend/dist/img/146.jpg
new file mode 100644
index 0000000..9fb0395
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/146.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/147.jpg b/harnesses/gtauri/frontend/dist/img/147.jpg
new file mode 100644
index 0000000..f162493
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/147.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/148.jpg b/harnesses/gtauri/frontend/dist/img/148.jpg
new file mode 100644
index 0000000..f1bdb50
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/148.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/149.jpg b/harnesses/gtauri/frontend/dist/img/149.jpg
new file mode 100644
index 0000000..12f5453
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/149.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/150.jpg b/harnesses/gtauri/frontend/dist/img/150.jpg
new file mode 100644
index 0000000..c3fd108
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/150.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/151.jpg b/harnesses/gtauri/frontend/dist/img/151.jpg
new file mode 100644
index 0000000..d2df22d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/151.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/152.jpg b/harnesses/gtauri/frontend/dist/img/152.jpg
new file mode 100644
index 0000000..65d13ad
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/152.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/153.jpg b/harnesses/gtauri/frontend/dist/img/153.jpg
new file mode 100644
index 0000000..9d1b68f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/153.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/154.jpg b/harnesses/gtauri/frontend/dist/img/154.jpg
new file mode 100644
index 0000000..65912f1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/154.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/155.jpg b/harnesses/gtauri/frontend/dist/img/155.jpg
new file mode 100644
index 0000000..198db68
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/155.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/156.jpg b/harnesses/gtauri/frontend/dist/img/156.jpg
new file mode 100644
index 0000000..58e1750
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/156.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/157.jpg b/harnesses/gtauri/frontend/dist/img/157.jpg
new file mode 100644
index 0000000..8852e43
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/157.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/158.jpg b/harnesses/gtauri/frontend/dist/img/158.jpg
new file mode 100644
index 0000000..3686bc9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/158.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/159.jpg b/harnesses/gtauri/frontend/dist/img/159.jpg
new file mode 100644
index 0000000..2b8fe68
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/159.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/160.jpg b/harnesses/gtauri/frontend/dist/img/160.jpg
new file mode 100644
index 0000000..8521e5e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/160.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/161.jpg b/harnesses/gtauri/frontend/dist/img/161.jpg
new file mode 100644
index 0000000..e6625ef
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/161.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/162.jpg b/harnesses/gtauri/frontend/dist/img/162.jpg
new file mode 100644
index 0000000..a5319a5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/162.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/163.jpg b/harnesses/gtauri/frontend/dist/img/163.jpg
new file mode 100644
index 0000000..8f05ce3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/163.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/164.jpg b/harnesses/gtauri/frontend/dist/img/164.jpg
new file mode 100644
index 0000000..6af71fd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/164.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/165.jpg b/harnesses/gtauri/frontend/dist/img/165.jpg
new file mode 100644
index 0000000..af249f6
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/165.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/166.jpg b/harnesses/gtauri/frontend/dist/img/166.jpg
new file mode 100644
index 0000000..088b78f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/166.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/167.jpg b/harnesses/gtauri/frontend/dist/img/167.jpg
new file mode 100644
index 0000000..79a6327
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/167.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/168.jpg b/harnesses/gtauri/frontend/dist/img/168.jpg
new file mode 100644
index 0000000..3a35e41
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/168.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/169.jpg b/harnesses/gtauri/frontend/dist/img/169.jpg
new file mode 100644
index 0000000..1cb6217
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/169.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/170.jpg b/harnesses/gtauri/frontend/dist/img/170.jpg
new file mode 100644
index 0000000..9288d13
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/170.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/171.jpg b/harnesses/gtauri/frontend/dist/img/171.jpg
new file mode 100644
index 0000000..f2ebc28
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/171.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/172.jpg b/harnesses/gtauri/frontend/dist/img/172.jpg
new file mode 100644
index 0000000..1e01e2e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/172.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/173.jpg b/harnesses/gtauri/frontend/dist/img/173.jpg
new file mode 100644
index 0000000..f7cb5ac
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/173.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/174.jpg b/harnesses/gtauri/frontend/dist/img/174.jpg
new file mode 100644
index 0000000..1bdf4d4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/174.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/175.jpg b/harnesses/gtauri/frontend/dist/img/175.jpg
new file mode 100644
index 0000000..fe6e0c3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/175.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/176.jpg b/harnesses/gtauri/frontend/dist/img/176.jpg
new file mode 100644
index 0000000..1808212
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/176.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/177.jpg b/harnesses/gtauri/frontend/dist/img/177.jpg
new file mode 100644
index 0000000..22a1962
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/177.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/178.jpg b/harnesses/gtauri/frontend/dist/img/178.jpg
new file mode 100644
index 0000000..8bb9f1d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/178.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/179.jpg b/harnesses/gtauri/frontend/dist/img/179.jpg
new file mode 100644
index 0000000..48800e3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/179.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/180.jpg b/harnesses/gtauri/frontend/dist/img/180.jpg
new file mode 100644
index 0000000..b4aacd1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/180.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/181.jpg b/harnesses/gtauri/frontend/dist/img/181.jpg
new file mode 100644
index 0000000..0297671
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/181.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/182.jpg b/harnesses/gtauri/frontend/dist/img/182.jpg
new file mode 100644
index 0000000..3ba7d5f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/182.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/183.jpg b/harnesses/gtauri/frontend/dist/img/183.jpg
new file mode 100644
index 0000000..cd89f1c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/183.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/184.jpg b/harnesses/gtauri/frontend/dist/img/184.jpg
new file mode 100644
index 0000000..7d39a2e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/184.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/185.jpg b/harnesses/gtauri/frontend/dist/img/185.jpg
new file mode 100644
index 0000000..c5c9cce
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/185.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/186.jpg b/harnesses/gtauri/frontend/dist/img/186.jpg
new file mode 100644
index 0000000..8057358
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/186.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/187.jpg b/harnesses/gtauri/frontend/dist/img/187.jpg
new file mode 100644
index 0000000..9f58a3c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/187.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/188.jpg b/harnesses/gtauri/frontend/dist/img/188.jpg
new file mode 100644
index 0000000..304d924
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/188.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/189.jpg b/harnesses/gtauri/frontend/dist/img/189.jpg
new file mode 100644
index 0000000..f84cdc4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/189.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/190.jpg b/harnesses/gtauri/frontend/dist/img/190.jpg
new file mode 100644
index 0000000..24790e7
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/190.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/191.jpg b/harnesses/gtauri/frontend/dist/img/191.jpg
new file mode 100644
index 0000000..d1e9eb8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/191.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/192.jpg b/harnesses/gtauri/frontend/dist/img/192.jpg
new file mode 100644
index 0000000..1e12638
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/192.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/193.jpg b/harnesses/gtauri/frontend/dist/img/193.jpg
new file mode 100644
index 0000000..2d19310
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/193.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/194.jpg b/harnesses/gtauri/frontend/dist/img/194.jpg
new file mode 100644
index 0000000..5c61da9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/194.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/195.jpg b/harnesses/gtauri/frontend/dist/img/195.jpg
new file mode 100644
index 0000000..88be400
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/195.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/196.jpg b/harnesses/gtauri/frontend/dist/img/196.jpg
new file mode 100644
index 0000000..96e92d7
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/196.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/197.jpg b/harnesses/gtauri/frontend/dist/img/197.jpg
new file mode 100644
index 0000000..08ded87
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/197.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/198.jpg b/harnesses/gtauri/frontend/dist/img/198.jpg
new file mode 100644
index 0000000..609072f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/198.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/199.jpg b/harnesses/gtauri/frontend/dist/img/199.jpg
new file mode 100644
index 0000000..81552ac
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/199.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/200.jpg b/harnesses/gtauri/frontend/dist/img/200.jpg
new file mode 100644
index 0000000..6b70e9f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/200.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/201.jpg b/harnesses/gtauri/frontend/dist/img/201.jpg
new file mode 100644
index 0000000..137e707
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/201.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/202.jpg b/harnesses/gtauri/frontend/dist/img/202.jpg
new file mode 100644
index 0000000..9e56630
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/202.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/203.jpg b/harnesses/gtauri/frontend/dist/img/203.jpg
new file mode 100644
index 0000000..3fe853c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/203.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/204.jpg b/harnesses/gtauri/frontend/dist/img/204.jpg
new file mode 100644
index 0000000..31600d0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/204.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/205.jpg b/harnesses/gtauri/frontend/dist/img/205.jpg
new file mode 100644
index 0000000..3170fa5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/205.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/206.jpg b/harnesses/gtauri/frontend/dist/img/206.jpg
new file mode 100644
index 0000000..9c55d4d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/206.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/207.jpg b/harnesses/gtauri/frontend/dist/img/207.jpg
new file mode 100644
index 0000000..a98f5d6
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/207.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/208.jpg b/harnesses/gtauri/frontend/dist/img/208.jpg
new file mode 100644
index 0000000..c8474e1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/208.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/209.jpg b/harnesses/gtauri/frontend/dist/img/209.jpg
new file mode 100644
index 0000000..f7328db
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/209.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/210.jpg b/harnesses/gtauri/frontend/dist/img/210.jpg
new file mode 100644
index 0000000..55f99c5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/210.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/211.jpg b/harnesses/gtauri/frontend/dist/img/211.jpg
new file mode 100644
index 0000000..ca79658
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/211.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/212.jpg b/harnesses/gtauri/frontend/dist/img/212.jpg
new file mode 100644
index 0000000..cf1979c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/212.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/213.jpg b/harnesses/gtauri/frontend/dist/img/213.jpg
new file mode 100644
index 0000000..2b3fbb8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/213.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/214.jpg b/harnesses/gtauri/frontend/dist/img/214.jpg
new file mode 100644
index 0000000..c232df0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/214.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/215.jpg b/harnesses/gtauri/frontend/dist/img/215.jpg
new file mode 100644
index 0000000..865040b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/215.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/216.jpg b/harnesses/gtauri/frontend/dist/img/216.jpg
new file mode 100644
index 0000000..83d049a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/216.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/217.jpg b/harnesses/gtauri/frontend/dist/img/217.jpg
new file mode 100644
index 0000000..6b6f68c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/217.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/218.jpg b/harnesses/gtauri/frontend/dist/img/218.jpg
new file mode 100644
index 0000000..4919343
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/218.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/219.jpg b/harnesses/gtauri/frontend/dist/img/219.jpg
new file mode 100644
index 0000000..4bb8684
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/219.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/220.jpg b/harnesses/gtauri/frontend/dist/img/220.jpg
new file mode 100644
index 0000000..94b92ad
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/220.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/221.jpg b/harnesses/gtauri/frontend/dist/img/221.jpg
new file mode 100644
index 0000000..1fca732
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/221.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/222.jpg b/harnesses/gtauri/frontend/dist/img/222.jpg
new file mode 100644
index 0000000..08fa63b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/222.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/223.jpg b/harnesses/gtauri/frontend/dist/img/223.jpg
new file mode 100644
index 0000000..5664262
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/223.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/224.jpg b/harnesses/gtauri/frontend/dist/img/224.jpg
new file mode 100644
index 0000000..897442d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/224.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/225.jpg b/harnesses/gtauri/frontend/dist/img/225.jpg
new file mode 100644
index 0000000..1e15b48
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/225.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/226.jpg b/harnesses/gtauri/frontend/dist/img/226.jpg
new file mode 100644
index 0000000..fe4ab06
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/226.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/227.jpg b/harnesses/gtauri/frontend/dist/img/227.jpg
new file mode 100644
index 0000000..284f63e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/227.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/228.jpg b/harnesses/gtauri/frontend/dist/img/228.jpg
new file mode 100644
index 0000000..78e22af
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/228.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/229.jpg b/harnesses/gtauri/frontend/dist/img/229.jpg
new file mode 100644
index 0000000..bc8097f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/229.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/230.jpg b/harnesses/gtauri/frontend/dist/img/230.jpg
new file mode 100644
index 0000000..f0930c3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/230.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/231.jpg b/harnesses/gtauri/frontend/dist/img/231.jpg
new file mode 100644
index 0000000..9f6aa42
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/231.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/232.jpg b/harnesses/gtauri/frontend/dist/img/232.jpg
new file mode 100644
index 0000000..1a17033
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/232.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/233.jpg b/harnesses/gtauri/frontend/dist/img/233.jpg
new file mode 100644
index 0000000..969374b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/233.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/234.jpg b/harnesses/gtauri/frontend/dist/img/234.jpg
new file mode 100644
index 0000000..abe4314
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/234.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/235.jpg b/harnesses/gtauri/frontend/dist/img/235.jpg
new file mode 100644
index 0000000..4984980
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/235.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/236.jpg b/harnesses/gtauri/frontend/dist/img/236.jpg
new file mode 100644
index 0000000..e58cce9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/236.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/237.jpg b/harnesses/gtauri/frontend/dist/img/237.jpg
new file mode 100644
index 0000000..af948d2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/237.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/238.jpg b/harnesses/gtauri/frontend/dist/img/238.jpg
new file mode 100644
index 0000000..de3a234
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/238.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/239.jpg b/harnesses/gtauri/frontend/dist/img/239.jpg
new file mode 100644
index 0000000..abbafcd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/239.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/240.jpg b/harnesses/gtauri/frontend/dist/img/240.jpg
new file mode 100644
index 0000000..1faece8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/240.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/241.jpg b/harnesses/gtauri/frontend/dist/img/241.jpg
new file mode 100644
index 0000000..d69a8d4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/241.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/242.jpg b/harnesses/gtauri/frontend/dist/img/242.jpg
new file mode 100644
index 0000000..0239ad9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/242.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/243.jpg b/harnesses/gtauri/frontend/dist/img/243.jpg
new file mode 100644
index 0000000..49d2e79
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/243.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/244.jpg b/harnesses/gtauri/frontend/dist/img/244.jpg
new file mode 100644
index 0000000..6415a8f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/244.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/245.jpg b/harnesses/gtauri/frontend/dist/img/245.jpg
new file mode 100644
index 0000000..81bab27
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/245.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/246.jpg b/harnesses/gtauri/frontend/dist/img/246.jpg
new file mode 100644
index 0000000..10a0d0d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/246.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/247.jpg b/harnesses/gtauri/frontend/dist/img/247.jpg
new file mode 100644
index 0000000..a58a58b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/247.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/248.jpg b/harnesses/gtauri/frontend/dist/img/248.jpg
new file mode 100644
index 0000000..7acd02c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/248.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/249.jpg b/harnesses/gtauri/frontend/dist/img/249.jpg
new file mode 100644
index 0000000..45a1cc7
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/249.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/250.jpg b/harnesses/gtauri/frontend/dist/img/250.jpg
new file mode 100644
index 0000000..ea21339
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/250.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/251.jpg b/harnesses/gtauri/frontend/dist/img/251.jpg
new file mode 100644
index 0000000..7ef804e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/251.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/252.jpg b/harnesses/gtauri/frontend/dist/img/252.jpg
new file mode 100644
index 0000000..d353375
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/252.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/253.jpg b/harnesses/gtauri/frontend/dist/img/253.jpg
new file mode 100644
index 0000000..e66c51a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/253.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/254.jpg b/harnesses/gtauri/frontend/dist/img/254.jpg
new file mode 100644
index 0000000..afd3b80
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/254.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/255.jpg b/harnesses/gtauri/frontend/dist/img/255.jpg
new file mode 100644
index 0000000..90fa7b2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/255.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/256.jpg b/harnesses/gtauri/frontend/dist/img/256.jpg
new file mode 100644
index 0000000..84f362a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/256.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/257.jpg b/harnesses/gtauri/frontend/dist/img/257.jpg
new file mode 100644
index 0000000..4ef2e8c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/257.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/258.jpg b/harnesses/gtauri/frontend/dist/img/258.jpg
new file mode 100644
index 0000000..e906abd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/258.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/259.jpg b/harnesses/gtauri/frontend/dist/img/259.jpg
new file mode 100644
index 0000000..e113cf6
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/259.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/260.jpg b/harnesses/gtauri/frontend/dist/img/260.jpg
new file mode 100644
index 0000000..1a8668a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/260.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/261.jpg b/harnesses/gtauri/frontend/dist/img/261.jpg
new file mode 100644
index 0000000..96d295a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/261.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/262.jpg b/harnesses/gtauri/frontend/dist/img/262.jpg
new file mode 100644
index 0000000..8fd6cdd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/262.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/263.jpg b/harnesses/gtauri/frontend/dist/img/263.jpg
new file mode 100644
index 0000000..68875a9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/263.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/264.jpg b/harnesses/gtauri/frontend/dist/img/264.jpg
new file mode 100644
index 0000000..6b95aee
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/264.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/265.jpg b/harnesses/gtauri/frontend/dist/img/265.jpg
new file mode 100644
index 0000000..ea6d04c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/265.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/266.jpg b/harnesses/gtauri/frontend/dist/img/266.jpg
new file mode 100644
index 0000000..83cdd86
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/266.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/267.jpg b/harnesses/gtauri/frontend/dist/img/267.jpg
new file mode 100644
index 0000000..7d67dfc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/267.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/268.jpg b/harnesses/gtauri/frontend/dist/img/268.jpg
new file mode 100644
index 0000000..40a88ad
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/268.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/269.jpg b/harnesses/gtauri/frontend/dist/img/269.jpg
new file mode 100644
index 0000000..24d0956
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/269.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/270.jpg b/harnesses/gtauri/frontend/dist/img/270.jpg
new file mode 100644
index 0000000..1cc73fd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/270.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/271.jpg b/harnesses/gtauri/frontend/dist/img/271.jpg
new file mode 100644
index 0000000..97b9895
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/271.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/272.jpg b/harnesses/gtauri/frontend/dist/img/272.jpg
new file mode 100644
index 0000000..f142663
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/272.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/273.jpg b/harnesses/gtauri/frontend/dist/img/273.jpg
new file mode 100644
index 0000000..db4d3fe
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/273.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/274.jpg b/harnesses/gtauri/frontend/dist/img/274.jpg
new file mode 100644
index 0000000..6eada8c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/274.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/275.jpg b/harnesses/gtauri/frontend/dist/img/275.jpg
new file mode 100644
index 0000000..b9228ee
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/275.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/276.jpg b/harnesses/gtauri/frontend/dist/img/276.jpg
new file mode 100644
index 0000000..d842c5d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/276.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/277.jpg b/harnesses/gtauri/frontend/dist/img/277.jpg
new file mode 100644
index 0000000..a838e22
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/277.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/278.jpg b/harnesses/gtauri/frontend/dist/img/278.jpg
new file mode 100644
index 0000000..59e429e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/278.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/279.jpg b/harnesses/gtauri/frontend/dist/img/279.jpg
new file mode 100644
index 0000000..17458fe
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/279.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/280.jpg b/harnesses/gtauri/frontend/dist/img/280.jpg
new file mode 100644
index 0000000..7b2a9cd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/280.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/281.jpg b/harnesses/gtauri/frontend/dist/img/281.jpg
new file mode 100644
index 0000000..e560770
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/281.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/282.jpg b/harnesses/gtauri/frontend/dist/img/282.jpg
new file mode 100644
index 0000000..5033f1c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/282.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/283.jpg b/harnesses/gtauri/frontend/dist/img/283.jpg
new file mode 100644
index 0000000..b882944
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/283.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/284.jpg b/harnesses/gtauri/frontend/dist/img/284.jpg
new file mode 100644
index 0000000..51c6ce8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/284.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/285.jpg b/harnesses/gtauri/frontend/dist/img/285.jpg
new file mode 100644
index 0000000..282fc5b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/285.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/286.jpg b/harnesses/gtauri/frontend/dist/img/286.jpg
new file mode 100644
index 0000000..b610b7e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/286.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/287.jpg b/harnesses/gtauri/frontend/dist/img/287.jpg
new file mode 100644
index 0000000..4339486
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/287.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/288.jpg b/harnesses/gtauri/frontend/dist/img/288.jpg
new file mode 100644
index 0000000..04c6054
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/288.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/289.jpg b/harnesses/gtauri/frontend/dist/img/289.jpg
new file mode 100644
index 0000000..734ee37
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/289.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/290.jpg b/harnesses/gtauri/frontend/dist/img/290.jpg
new file mode 100644
index 0000000..c13607f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/290.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/291.jpg b/harnesses/gtauri/frontend/dist/img/291.jpg
new file mode 100644
index 0000000..30b698f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/291.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/292.jpg b/harnesses/gtauri/frontend/dist/img/292.jpg
new file mode 100644
index 0000000..107ec3d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/292.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/293.jpg b/harnesses/gtauri/frontend/dist/img/293.jpg
new file mode 100644
index 0000000..d39ba44
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/293.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/294.jpg b/harnesses/gtauri/frontend/dist/img/294.jpg
new file mode 100644
index 0000000..160e614
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/294.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/295.jpg b/harnesses/gtauri/frontend/dist/img/295.jpg
new file mode 100644
index 0000000..96c08fe
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/295.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/296.jpg b/harnesses/gtauri/frontend/dist/img/296.jpg
new file mode 100644
index 0000000..ec87929
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/296.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/297.jpg b/harnesses/gtauri/frontend/dist/img/297.jpg
new file mode 100644
index 0000000..0e44406
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/297.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/298.jpg b/harnesses/gtauri/frontend/dist/img/298.jpg
new file mode 100644
index 0000000..a804f62
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/298.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/299.jpg b/harnesses/gtauri/frontend/dist/img/299.jpg
new file mode 100644
index 0000000..53be16a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/299.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/300.jpg b/harnesses/gtauri/frontend/dist/img/300.jpg
new file mode 100644
index 0000000..0719f82
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/300.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/301.jpg b/harnesses/gtauri/frontend/dist/img/301.jpg
new file mode 100644
index 0000000..b167595
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/301.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/302.jpg b/harnesses/gtauri/frontend/dist/img/302.jpg
new file mode 100644
index 0000000..c23af4b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/302.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/303.jpg b/harnesses/gtauri/frontend/dist/img/303.jpg
new file mode 100644
index 0000000..034b76e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/303.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/304.jpg b/harnesses/gtauri/frontend/dist/img/304.jpg
new file mode 100644
index 0000000..5bfbbdf
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/304.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/305.jpg b/harnesses/gtauri/frontend/dist/img/305.jpg
new file mode 100644
index 0000000..9f45163
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/305.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/306.jpg b/harnesses/gtauri/frontend/dist/img/306.jpg
new file mode 100644
index 0000000..edafae6
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/306.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/307.jpg b/harnesses/gtauri/frontend/dist/img/307.jpg
new file mode 100644
index 0000000..78c5c0e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/307.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/308.jpg b/harnesses/gtauri/frontend/dist/img/308.jpg
new file mode 100644
index 0000000..b712e9f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/308.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/309.jpg b/harnesses/gtauri/frontend/dist/img/309.jpg
new file mode 100644
index 0000000..dce81fd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/309.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/310.jpg b/harnesses/gtauri/frontend/dist/img/310.jpg
new file mode 100644
index 0000000..9f039f7
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/310.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/311.jpg b/harnesses/gtauri/frontend/dist/img/311.jpg
new file mode 100644
index 0000000..de8a457
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/311.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/312.jpg b/harnesses/gtauri/frontend/dist/img/312.jpg
new file mode 100644
index 0000000..37c8cf2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/312.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/313.jpg b/harnesses/gtauri/frontend/dist/img/313.jpg
new file mode 100644
index 0000000..ee68bf4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/313.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/314.jpg b/harnesses/gtauri/frontend/dist/img/314.jpg
new file mode 100644
index 0000000..2041a72
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/314.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/315.jpg b/harnesses/gtauri/frontend/dist/img/315.jpg
new file mode 100644
index 0000000..ba9c0a8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/315.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/316.jpg b/harnesses/gtauri/frontend/dist/img/316.jpg
new file mode 100644
index 0000000..5f7c2b7
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/316.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/317.jpg b/harnesses/gtauri/frontend/dist/img/317.jpg
new file mode 100644
index 0000000..9ba7f75
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/317.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/318.jpg b/harnesses/gtauri/frontend/dist/img/318.jpg
new file mode 100644
index 0000000..a14d5c4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/318.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/319.jpg b/harnesses/gtauri/frontend/dist/img/319.jpg
new file mode 100644
index 0000000..98f471d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/319.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/320.jpg b/harnesses/gtauri/frontend/dist/img/320.jpg
new file mode 100644
index 0000000..59fc766
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/320.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/321.jpg b/harnesses/gtauri/frontend/dist/img/321.jpg
new file mode 100644
index 0000000..0f68677
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/321.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/322.jpg b/harnesses/gtauri/frontend/dist/img/322.jpg
new file mode 100644
index 0000000..c3fef2e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/322.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/323.jpg b/harnesses/gtauri/frontend/dist/img/323.jpg
new file mode 100644
index 0000000..941914b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/323.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/324.jpg b/harnesses/gtauri/frontend/dist/img/324.jpg
new file mode 100644
index 0000000..8dd3eb1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/324.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/325.jpg b/harnesses/gtauri/frontend/dist/img/325.jpg
new file mode 100644
index 0000000..dd4404f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/325.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/326.jpg b/harnesses/gtauri/frontend/dist/img/326.jpg
new file mode 100644
index 0000000..58a3bc8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/326.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/327.jpg b/harnesses/gtauri/frontend/dist/img/327.jpg
new file mode 100644
index 0000000..3d86a39
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/327.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/328.jpg b/harnesses/gtauri/frontend/dist/img/328.jpg
new file mode 100644
index 0000000..3576e7d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/328.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/329.jpg b/harnesses/gtauri/frontend/dist/img/329.jpg
new file mode 100644
index 0000000..5e406f0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/329.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/330.jpg b/harnesses/gtauri/frontend/dist/img/330.jpg
new file mode 100644
index 0000000..351d42a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/330.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/331.jpg b/harnesses/gtauri/frontend/dist/img/331.jpg
new file mode 100644
index 0000000..bca42d5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/331.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/332.jpg b/harnesses/gtauri/frontend/dist/img/332.jpg
new file mode 100644
index 0000000..5c0c837
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/332.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/333.jpg b/harnesses/gtauri/frontend/dist/img/333.jpg
new file mode 100644
index 0000000..c179162
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/333.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/334.jpg b/harnesses/gtauri/frontend/dist/img/334.jpg
new file mode 100644
index 0000000..358088a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/334.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/335.jpg b/harnesses/gtauri/frontend/dist/img/335.jpg
new file mode 100644
index 0000000..0687be1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/335.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/336.jpg b/harnesses/gtauri/frontend/dist/img/336.jpg
new file mode 100644
index 0000000..acbd6a3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/336.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/337.jpg b/harnesses/gtauri/frontend/dist/img/337.jpg
new file mode 100644
index 0000000..11bf2a0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/337.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/338.jpg b/harnesses/gtauri/frontend/dist/img/338.jpg
new file mode 100644
index 0000000..afe1a1f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/338.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/339.jpg b/harnesses/gtauri/frontend/dist/img/339.jpg
new file mode 100644
index 0000000..3198fde
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/339.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/340.jpg b/harnesses/gtauri/frontend/dist/img/340.jpg
new file mode 100644
index 0000000..32fc394
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/340.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/341.jpg b/harnesses/gtauri/frontend/dist/img/341.jpg
new file mode 100644
index 0000000..bf5ae56
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/341.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/342.jpg b/harnesses/gtauri/frontend/dist/img/342.jpg
new file mode 100644
index 0000000..f01b202
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/342.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/343.jpg b/harnesses/gtauri/frontend/dist/img/343.jpg
new file mode 100644
index 0000000..f8a2360
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/343.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/344.jpg b/harnesses/gtauri/frontend/dist/img/344.jpg
new file mode 100644
index 0000000..b3c7d78
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/344.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/345.jpg b/harnesses/gtauri/frontend/dist/img/345.jpg
new file mode 100644
index 0000000..e585d53
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/345.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/346.jpg b/harnesses/gtauri/frontend/dist/img/346.jpg
new file mode 100644
index 0000000..6708d82
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/346.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/347.jpg b/harnesses/gtauri/frontend/dist/img/347.jpg
new file mode 100644
index 0000000..305d1cc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/347.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/348.jpg b/harnesses/gtauri/frontend/dist/img/348.jpg
new file mode 100644
index 0000000..a049044
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/348.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/349.jpg b/harnesses/gtauri/frontend/dist/img/349.jpg
new file mode 100644
index 0000000..3597fdd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/349.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/350.jpg b/harnesses/gtauri/frontend/dist/img/350.jpg
new file mode 100644
index 0000000..8efdc56
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/350.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/351.jpg b/harnesses/gtauri/frontend/dist/img/351.jpg
new file mode 100644
index 0000000..cd7c5cc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/351.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/352.jpg b/harnesses/gtauri/frontend/dist/img/352.jpg
new file mode 100644
index 0000000..9f63fd8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/352.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/353.jpg b/harnesses/gtauri/frontend/dist/img/353.jpg
new file mode 100644
index 0000000..4602920
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/353.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/354.jpg b/harnesses/gtauri/frontend/dist/img/354.jpg
new file mode 100644
index 0000000..421a1ed
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/354.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/355.jpg b/harnesses/gtauri/frontend/dist/img/355.jpg
new file mode 100644
index 0000000..cac8244
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/355.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/356.jpg b/harnesses/gtauri/frontend/dist/img/356.jpg
new file mode 100644
index 0000000..b2fc907
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/356.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/357.jpg b/harnesses/gtauri/frontend/dist/img/357.jpg
new file mode 100644
index 0000000..ff0e890
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/357.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/358.jpg b/harnesses/gtauri/frontend/dist/img/358.jpg
new file mode 100644
index 0000000..c46eb2e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/358.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/359.jpg b/harnesses/gtauri/frontend/dist/img/359.jpg
new file mode 100644
index 0000000..cb3bf56
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/359.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/360.jpg b/harnesses/gtauri/frontend/dist/img/360.jpg
new file mode 100644
index 0000000..ee7faa3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/360.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/361.jpg b/harnesses/gtauri/frontend/dist/img/361.jpg
new file mode 100644
index 0000000..c85a853
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/361.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/362.jpg b/harnesses/gtauri/frontend/dist/img/362.jpg
new file mode 100644
index 0000000..ba0186b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/362.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/363.jpg b/harnesses/gtauri/frontend/dist/img/363.jpg
new file mode 100644
index 0000000..0765f1d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/363.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/364.jpg b/harnesses/gtauri/frontend/dist/img/364.jpg
new file mode 100644
index 0000000..e67026b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/364.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/365.jpg b/harnesses/gtauri/frontend/dist/img/365.jpg
new file mode 100644
index 0000000..f433bca
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/365.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/366.jpg b/harnesses/gtauri/frontend/dist/img/366.jpg
new file mode 100644
index 0000000..b530e53
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/366.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/367.jpg b/harnesses/gtauri/frontend/dist/img/367.jpg
new file mode 100644
index 0000000..a3e6f58
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/367.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/368.jpg b/harnesses/gtauri/frontend/dist/img/368.jpg
new file mode 100644
index 0000000..6fb7c35
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/368.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/369.jpg b/harnesses/gtauri/frontend/dist/img/369.jpg
new file mode 100644
index 0000000..51884c8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/369.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/370.jpg b/harnesses/gtauri/frontend/dist/img/370.jpg
new file mode 100644
index 0000000..e9c2b94
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/370.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/371.jpg b/harnesses/gtauri/frontend/dist/img/371.jpg
new file mode 100644
index 0000000..7cd9fed
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/371.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/372.jpg b/harnesses/gtauri/frontend/dist/img/372.jpg
new file mode 100644
index 0000000..03ef2b8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/372.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/373.jpg b/harnesses/gtauri/frontend/dist/img/373.jpg
new file mode 100644
index 0000000..28093c0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/373.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/374.jpg b/harnesses/gtauri/frontend/dist/img/374.jpg
new file mode 100644
index 0000000..9d6e335
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/374.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/375.jpg b/harnesses/gtauri/frontend/dist/img/375.jpg
new file mode 100644
index 0000000..45223fa
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/375.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/376.jpg b/harnesses/gtauri/frontend/dist/img/376.jpg
new file mode 100644
index 0000000..cd30242
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/376.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/377.jpg b/harnesses/gtauri/frontend/dist/img/377.jpg
new file mode 100644
index 0000000..1507644
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/377.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/378.jpg b/harnesses/gtauri/frontend/dist/img/378.jpg
new file mode 100644
index 0000000..bf5e9f9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/378.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/379.jpg b/harnesses/gtauri/frontend/dist/img/379.jpg
new file mode 100644
index 0000000..84ef362
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/379.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/380.jpg b/harnesses/gtauri/frontend/dist/img/380.jpg
new file mode 100644
index 0000000..518a323
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/380.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/381.jpg b/harnesses/gtauri/frontend/dist/img/381.jpg
new file mode 100644
index 0000000..1ff98c5
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/381.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/382.jpg b/harnesses/gtauri/frontend/dist/img/382.jpg
new file mode 100644
index 0000000..f0fda3f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/382.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/383.jpg b/harnesses/gtauri/frontend/dist/img/383.jpg
new file mode 100644
index 0000000..a890dea
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/383.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/384.jpg b/harnesses/gtauri/frontend/dist/img/384.jpg
new file mode 100644
index 0000000..9186fc1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/384.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/385.jpg b/harnesses/gtauri/frontend/dist/img/385.jpg
new file mode 100644
index 0000000..1ba3d3d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/385.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/386.jpg b/harnesses/gtauri/frontend/dist/img/386.jpg
new file mode 100644
index 0000000..dc9847e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/386.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/387.jpg b/harnesses/gtauri/frontend/dist/img/387.jpg
new file mode 100644
index 0000000..7d8229f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/387.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/388.jpg b/harnesses/gtauri/frontend/dist/img/388.jpg
new file mode 100644
index 0000000..88fbfd8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/388.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/389.jpg b/harnesses/gtauri/frontend/dist/img/389.jpg
new file mode 100644
index 0000000..23a659e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/389.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/390.jpg b/harnesses/gtauri/frontend/dist/img/390.jpg
new file mode 100644
index 0000000..3e2bffa
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/390.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/391.jpg b/harnesses/gtauri/frontend/dist/img/391.jpg
new file mode 100644
index 0000000..d1aaab6
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/391.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/392.jpg b/harnesses/gtauri/frontend/dist/img/392.jpg
new file mode 100644
index 0000000..19c19bc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/392.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/393.jpg b/harnesses/gtauri/frontend/dist/img/393.jpg
new file mode 100644
index 0000000..9f7009f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/393.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/394.jpg b/harnesses/gtauri/frontend/dist/img/394.jpg
new file mode 100644
index 0000000..3f7e78d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/394.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/395.jpg b/harnesses/gtauri/frontend/dist/img/395.jpg
new file mode 100644
index 0000000..1cf003f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/395.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/396.jpg b/harnesses/gtauri/frontend/dist/img/396.jpg
new file mode 100644
index 0000000..fb8e06e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/396.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/397.jpg b/harnesses/gtauri/frontend/dist/img/397.jpg
new file mode 100644
index 0000000..ee1b582
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/397.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/398.jpg b/harnesses/gtauri/frontend/dist/img/398.jpg
new file mode 100644
index 0000000..5b48524
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/398.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/399.jpg b/harnesses/gtauri/frontend/dist/img/399.jpg
new file mode 100644
index 0000000..c89afc9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/399.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/400.jpg b/harnesses/gtauri/frontend/dist/img/400.jpg
new file mode 100644
index 0000000..85b71c4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/400.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/401.jpg b/harnesses/gtauri/frontend/dist/img/401.jpg
new file mode 100644
index 0000000..4a7390b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/401.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/402.jpg b/harnesses/gtauri/frontend/dist/img/402.jpg
new file mode 100644
index 0000000..014401a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/402.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/403.jpg b/harnesses/gtauri/frontend/dist/img/403.jpg
new file mode 100644
index 0000000..334065c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/403.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/404.jpg b/harnesses/gtauri/frontend/dist/img/404.jpg
new file mode 100644
index 0000000..6b7940d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/404.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/405.jpg b/harnesses/gtauri/frontend/dist/img/405.jpg
new file mode 100644
index 0000000..9bf0198
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/405.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/406.jpg b/harnesses/gtauri/frontend/dist/img/406.jpg
new file mode 100644
index 0000000..487f829
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/406.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/407.jpg b/harnesses/gtauri/frontend/dist/img/407.jpg
new file mode 100644
index 0000000..6dedb51
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/407.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/408.jpg b/harnesses/gtauri/frontend/dist/img/408.jpg
new file mode 100644
index 0000000..7e3fac7
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/408.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/409.jpg b/harnesses/gtauri/frontend/dist/img/409.jpg
new file mode 100644
index 0000000..6331c92
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/409.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/410.jpg b/harnesses/gtauri/frontend/dist/img/410.jpg
new file mode 100644
index 0000000..33cab35
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/410.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/411.jpg b/harnesses/gtauri/frontend/dist/img/411.jpg
new file mode 100644
index 0000000..aaf8ab2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/411.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/412.jpg b/harnesses/gtauri/frontend/dist/img/412.jpg
new file mode 100644
index 0000000..ea50821
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/412.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/413.jpg b/harnesses/gtauri/frontend/dist/img/413.jpg
new file mode 100644
index 0000000..1b7f589
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/413.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/414.jpg b/harnesses/gtauri/frontend/dist/img/414.jpg
new file mode 100644
index 0000000..c686a80
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/414.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/415.jpg b/harnesses/gtauri/frontend/dist/img/415.jpg
new file mode 100644
index 0000000..d0f3971
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/415.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/416.jpg b/harnesses/gtauri/frontend/dist/img/416.jpg
new file mode 100644
index 0000000..2760508
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/416.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/417.jpg b/harnesses/gtauri/frontend/dist/img/417.jpg
new file mode 100644
index 0000000..1018bb0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/417.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/418.jpg b/harnesses/gtauri/frontend/dist/img/418.jpg
new file mode 100644
index 0000000..51fe9e1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/418.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/419.jpg b/harnesses/gtauri/frontend/dist/img/419.jpg
new file mode 100644
index 0000000..1ed34a8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/419.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/420.jpg b/harnesses/gtauri/frontend/dist/img/420.jpg
new file mode 100644
index 0000000..482d2c1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/420.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/421.jpg b/harnesses/gtauri/frontend/dist/img/421.jpg
new file mode 100644
index 0000000..f42b0cc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/421.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/422.jpg b/harnesses/gtauri/frontend/dist/img/422.jpg
new file mode 100644
index 0000000..690f2ba
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/422.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/423.jpg b/harnesses/gtauri/frontend/dist/img/423.jpg
new file mode 100644
index 0000000..8dc0c7a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/423.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/424.jpg b/harnesses/gtauri/frontend/dist/img/424.jpg
new file mode 100644
index 0000000..9cb7c5c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/424.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/425.jpg b/harnesses/gtauri/frontend/dist/img/425.jpg
new file mode 100644
index 0000000..c152953
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/425.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/426.jpg b/harnesses/gtauri/frontend/dist/img/426.jpg
new file mode 100644
index 0000000..338804e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/426.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/427.jpg b/harnesses/gtauri/frontend/dist/img/427.jpg
new file mode 100644
index 0000000..aa29859
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/427.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/428.jpg b/harnesses/gtauri/frontend/dist/img/428.jpg
new file mode 100644
index 0000000..dcd95a1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/428.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/429.jpg b/harnesses/gtauri/frontend/dist/img/429.jpg
new file mode 100644
index 0000000..54da97f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/429.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/430.jpg b/harnesses/gtauri/frontend/dist/img/430.jpg
new file mode 100644
index 0000000..e5df583
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/430.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/431.jpg b/harnesses/gtauri/frontend/dist/img/431.jpg
new file mode 100644
index 0000000..42d391f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/431.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/432.jpg b/harnesses/gtauri/frontend/dist/img/432.jpg
new file mode 100644
index 0000000..27651ae
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/432.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/433.jpg b/harnesses/gtauri/frontend/dist/img/433.jpg
new file mode 100644
index 0000000..eb97725
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/433.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/434.jpg b/harnesses/gtauri/frontend/dist/img/434.jpg
new file mode 100644
index 0000000..fc5756b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/434.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/435.jpg b/harnesses/gtauri/frontend/dist/img/435.jpg
new file mode 100644
index 0000000..ca1dff0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/435.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/436.jpg b/harnesses/gtauri/frontend/dist/img/436.jpg
new file mode 100644
index 0000000..c3ada24
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/436.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/437.jpg b/harnesses/gtauri/frontend/dist/img/437.jpg
new file mode 100644
index 0000000..1f54cae
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/437.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/438.jpg b/harnesses/gtauri/frontend/dist/img/438.jpg
new file mode 100644
index 0000000..bbd514b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/438.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/439.jpg b/harnesses/gtauri/frontend/dist/img/439.jpg
new file mode 100644
index 0000000..bfca1e1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/439.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/440.jpg b/harnesses/gtauri/frontend/dist/img/440.jpg
new file mode 100644
index 0000000..88d648d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/440.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/441.jpg b/harnesses/gtauri/frontend/dist/img/441.jpg
new file mode 100644
index 0000000..0884013
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/441.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/442.jpg b/harnesses/gtauri/frontend/dist/img/442.jpg
new file mode 100644
index 0000000..ce8d5d3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/442.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/443.jpg b/harnesses/gtauri/frontend/dist/img/443.jpg
new file mode 100644
index 0000000..76cd821
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/443.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/444.jpg b/harnesses/gtauri/frontend/dist/img/444.jpg
new file mode 100644
index 0000000..f9d50b3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/444.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/445.jpg b/harnesses/gtauri/frontend/dist/img/445.jpg
new file mode 100644
index 0000000..bd913a0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/445.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/446.jpg b/harnesses/gtauri/frontend/dist/img/446.jpg
new file mode 100644
index 0000000..2294da6
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/446.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/447.jpg b/harnesses/gtauri/frontend/dist/img/447.jpg
new file mode 100644
index 0000000..c0aafe4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/447.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/448.jpg b/harnesses/gtauri/frontend/dist/img/448.jpg
new file mode 100644
index 0000000..874f7ee
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/448.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/449.jpg b/harnesses/gtauri/frontend/dist/img/449.jpg
new file mode 100644
index 0000000..fea9a9c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/449.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/450.jpg b/harnesses/gtauri/frontend/dist/img/450.jpg
new file mode 100644
index 0000000..be98c80
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/450.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/451.jpg b/harnesses/gtauri/frontend/dist/img/451.jpg
new file mode 100644
index 0000000..cbde60b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/451.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/452.jpg b/harnesses/gtauri/frontend/dist/img/452.jpg
new file mode 100644
index 0000000..a064371
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/452.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/453.jpg b/harnesses/gtauri/frontend/dist/img/453.jpg
new file mode 100644
index 0000000..bd054fb
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/453.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/454.jpg b/harnesses/gtauri/frontend/dist/img/454.jpg
new file mode 100644
index 0000000..4bec89a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/454.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/455.jpg b/harnesses/gtauri/frontend/dist/img/455.jpg
new file mode 100644
index 0000000..befa218
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/455.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/456.jpg b/harnesses/gtauri/frontend/dist/img/456.jpg
new file mode 100644
index 0000000..b317b3a
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/456.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/457.jpg b/harnesses/gtauri/frontend/dist/img/457.jpg
new file mode 100644
index 0000000..2fbe006
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/457.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/458.jpg b/harnesses/gtauri/frontend/dist/img/458.jpg
new file mode 100644
index 0000000..c04d8e2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/458.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/459.jpg b/harnesses/gtauri/frontend/dist/img/459.jpg
new file mode 100644
index 0000000..21455aa
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/459.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/460.jpg b/harnesses/gtauri/frontend/dist/img/460.jpg
new file mode 100644
index 0000000..f864942
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/460.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/461.jpg b/harnesses/gtauri/frontend/dist/img/461.jpg
new file mode 100644
index 0000000..a57d3dc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/461.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/462.jpg b/harnesses/gtauri/frontend/dist/img/462.jpg
new file mode 100644
index 0000000..845c1b0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/462.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/463.jpg b/harnesses/gtauri/frontend/dist/img/463.jpg
new file mode 100644
index 0000000..d3f28e6
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/463.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/464.jpg b/harnesses/gtauri/frontend/dist/img/464.jpg
new file mode 100644
index 0000000..25ba8ca
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/464.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/465.jpg b/harnesses/gtauri/frontend/dist/img/465.jpg
new file mode 100644
index 0000000..b99fd87
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/465.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/466.jpg b/harnesses/gtauri/frontend/dist/img/466.jpg
new file mode 100644
index 0000000..760ef49
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/466.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/467.jpg b/harnesses/gtauri/frontend/dist/img/467.jpg
new file mode 100644
index 0000000..5386687
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/467.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/468.jpg b/harnesses/gtauri/frontend/dist/img/468.jpg
new file mode 100644
index 0000000..0f44316
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/468.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/469.jpg b/harnesses/gtauri/frontend/dist/img/469.jpg
new file mode 100644
index 0000000..068cf71
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/469.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/470.jpg b/harnesses/gtauri/frontend/dist/img/470.jpg
new file mode 100644
index 0000000..c43181d
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/470.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/471.jpg b/harnesses/gtauri/frontend/dist/img/471.jpg
new file mode 100644
index 0000000..624f674
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/471.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/472.jpg b/harnesses/gtauri/frontend/dist/img/472.jpg
new file mode 100644
index 0000000..69edde1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/472.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/473.jpg b/harnesses/gtauri/frontend/dist/img/473.jpg
new file mode 100644
index 0000000..41fd3d0
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/473.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/474.jpg b/harnesses/gtauri/frontend/dist/img/474.jpg
new file mode 100644
index 0000000..85a558e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/474.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/475.jpg b/harnesses/gtauri/frontend/dist/img/475.jpg
new file mode 100644
index 0000000..0127bf8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/475.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/476.jpg b/harnesses/gtauri/frontend/dist/img/476.jpg
new file mode 100644
index 0000000..4154ee8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/476.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/477.jpg b/harnesses/gtauri/frontend/dist/img/477.jpg
new file mode 100644
index 0000000..ece16a4
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/477.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/478.jpg b/harnesses/gtauri/frontend/dist/img/478.jpg
new file mode 100644
index 0000000..b09d5fb
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/478.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/479.jpg b/harnesses/gtauri/frontend/dist/img/479.jpg
new file mode 100644
index 0000000..c115098
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/479.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/480.jpg b/harnesses/gtauri/frontend/dist/img/480.jpg
new file mode 100644
index 0000000..9d1f10b
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/480.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/481.jpg b/harnesses/gtauri/frontend/dist/img/481.jpg
new file mode 100644
index 0000000..061b1ef
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/481.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/482.jpg b/harnesses/gtauri/frontend/dist/img/482.jpg
new file mode 100644
index 0000000..4fb1efa
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/482.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/483.jpg b/harnesses/gtauri/frontend/dist/img/483.jpg
new file mode 100644
index 0000000..2a5e948
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/483.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/484.jpg b/harnesses/gtauri/frontend/dist/img/484.jpg
new file mode 100644
index 0000000..97b2509
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/484.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/485.jpg b/harnesses/gtauri/frontend/dist/img/485.jpg
new file mode 100644
index 0000000..ea99275
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/485.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/486.jpg b/harnesses/gtauri/frontend/dist/img/486.jpg
new file mode 100644
index 0000000..7ef6fcd
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/486.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/487.jpg b/harnesses/gtauri/frontend/dist/img/487.jpg
new file mode 100644
index 0000000..65abca3
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/487.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/488.jpg b/harnesses/gtauri/frontend/dist/img/488.jpg
new file mode 100644
index 0000000..b92094c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/488.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/489.jpg b/harnesses/gtauri/frontend/dist/img/489.jpg
new file mode 100644
index 0000000..351cbf9
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/489.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/490.jpg b/harnesses/gtauri/frontend/dist/img/490.jpg
new file mode 100644
index 0000000..4105514
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/490.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/491.jpg b/harnesses/gtauri/frontend/dist/img/491.jpg
new file mode 100644
index 0000000..bacb54c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/491.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/492.jpg b/harnesses/gtauri/frontend/dist/img/492.jpg
new file mode 100644
index 0000000..3d0c206
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/492.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/493.jpg b/harnesses/gtauri/frontend/dist/img/493.jpg
new file mode 100644
index 0000000..dfa529c
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/493.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/494.jpg b/harnesses/gtauri/frontend/dist/img/494.jpg
new file mode 100644
index 0000000..0056598
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/494.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/495.jpg b/harnesses/gtauri/frontend/dist/img/495.jpg
new file mode 100644
index 0000000..9d07e39
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/495.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/496.jpg b/harnesses/gtauri/frontend/dist/img/496.jpg
new file mode 100644
index 0000000..7586381
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/496.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/497.jpg b/harnesses/gtauri/frontend/dist/img/497.jpg
new file mode 100644
index 0000000..0100009
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/497.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/498.jpg b/harnesses/gtauri/frontend/dist/img/498.jpg
new file mode 100644
index 0000000..48f32f1
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/498.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/499.jpg b/harnesses/gtauri/frontend/dist/img/499.jpg
new file mode 100644
index 0000000..149ee05
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/499.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/500.jpg b/harnesses/gtauri/frontend/dist/img/500.jpg
new file mode 100644
index 0000000..8029d46
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/500.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/501.jpg b/harnesses/gtauri/frontend/dist/img/501.jpg
new file mode 100644
index 0000000..a5b0981
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/501.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/502.jpg b/harnesses/gtauri/frontend/dist/img/502.jpg
new file mode 100644
index 0000000..4786965
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/502.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/503.jpg b/harnesses/gtauri/frontend/dist/img/503.jpg
new file mode 100644
index 0000000..cbe1a9f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/503.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/504.jpg b/harnesses/gtauri/frontend/dist/img/504.jpg
new file mode 100644
index 0000000..c38675e
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/504.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/505.jpg b/harnesses/gtauri/frontend/dist/img/505.jpg
new file mode 100644
index 0000000..acda32f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/505.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/506.jpg b/harnesses/gtauri/frontend/dist/img/506.jpg
new file mode 100644
index 0000000..293f846
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/506.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/507.jpg b/harnesses/gtauri/frontend/dist/img/507.jpg
new file mode 100644
index 0000000..11965d2
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/507.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/508.jpg b/harnesses/gtauri/frontend/dist/img/508.jpg
new file mode 100644
index 0000000..eb56ec6
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/508.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/509.jpg b/harnesses/gtauri/frontend/dist/img/509.jpg
new file mode 100644
index 0000000..f00bcc8
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/509.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/510.jpg b/harnesses/gtauri/frontend/dist/img/510.jpg
new file mode 100644
index 0000000..c8cb6fc
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/510.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/img/511.jpg b/harnesses/gtauri/frontend/dist/img/511.jpg
new file mode 100644
index 0000000..3e8357f
Binary files /dev/null and b/harnesses/gtauri/frontend/dist/img/511.jpg differ
diff --git a/harnesses/gtauri/frontend/dist/index.html b/harnesses/gtauri/frontend/dist/index.html
new file mode 100644
index 0000000..178b24c
--- /dev/null
+++ b/harnesses/gtauri/frontend/dist/index.html
@@ -0,0 +1,229 @@
+
+
+
+
+
+Gallery
+
+
+
+starting…
+
+
+
+
![]()
+
×
+
+
+
+
diff --git a/harnesses/gtauri/gen/android/.editorconfig b/harnesses/gtauri/gen/android/.editorconfig
new file mode 100644
index 0000000..ebe51d3
--- /dev/null
+++ b/harnesses/gtauri/gen/android/.editorconfig
@@ -0,0 +1,12 @@
+# EditorConfig is awesome: https://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = false
+insert_final_newline = false
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/.gitignore b/harnesses/gtauri/gen/android/.gitignore
new file mode 100644
index 0000000..1c636c3
--- /dev/null
+++ b/harnesses/gtauri/gen/android/.gitignore
@@ -0,0 +1,20 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
+key.properties
+keystore.properties
+
+/.tauri
+/tauri.settings.gradle
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/app/.gitignore b/harnesses/gtauri/gen/android/app/.gitignore
new file mode 100644
index 0000000..6c4d56b
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/.gitignore
@@ -0,0 +1,6 @@
+/src/main/**/generated
+/src/main/jniLibs/**/*.so
+/src/main/assets/tauri.conf.json
+/tauri.build.gradle.kts
+/proguard-tauri.pro
+/tauri.properties
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/app/build.gradle.kts b/harnesses/gtauri/gen/android/app/build.gradle.kts
new file mode 100644
index 0000000..a976f7d
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/build.gradle.kts
@@ -0,0 +1,83 @@
+import java.util.Properties
+import org.jetbrains.kotlin.gradle.dsl.JvmTarget
+
+plugins {
+ id("com.android.application")
+ id("org.jetbrains.kotlin.android")
+ id("rust")
+}
+
+val tauriProperties = Properties().apply {
+ val propFile = file("tauri.properties")
+ if (propFile.exists()) {
+ propFile.inputStream().use { load(it) }
+ }
+}
+
+android {
+ compileSdk = 37
+ namespace = "wow.gmp.gallery"
+ defaultConfig {
+ manifestPlaceholders["usesCleartextTraffic"] = "false"
+ applicationId = "wow.gmp.gallery"
+ minSdk = 24
+ targetSdk = 37
+ versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt()
+ versionName = tauriProperties.getProperty("tauri.android.versionName", "1.0")
+ }
+ buildTypes {
+ getByName("debug") {
+ manifestPlaceholders["usesCleartextTraffic"] = "true"
+ isDebuggable = true
+ isJniDebuggable = true
+ isMinifyEnabled = false
+ packaging {
+ jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so")
+ jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so")
+ jniLibs.keepDebugSymbols.add("*/x86/*.so")
+ jniLibs.keepDebugSymbols.add("*/x86_64/*.so")
+ }
+ }
+ getByName("release") {
+ optimization {
+ enable = true
+ }
+ proguardFiles(
+ *fileTree(".") {
+ include("**/*.pro")
+ exclude("build/**")
+ }.files.toTypedArray()
+ )
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ buildFeatures {
+ buildConfig = true
+ }
+}
+
+kotlin {
+ compilerOptions {
+ jvmTarget = JvmTarget.JVM_1_8
+ }
+}
+
+rust {
+ rootDirRel = "../../../"
+}
+
+dependencies {
+ implementation("androidx.webkit:webkit:1.14.0")
+ implementation("androidx.appcompat:appcompat:1.7.1")
+ implementation("androidx.activity:activity-ktx:1.10.1")
+ implementation("com.google.android.material:material:1.12.0")
+ implementation("androidx.lifecycle:lifecycle-process:2.10.0")
+ testImplementation("junit:junit:4.13.2")
+ androidTestImplementation("androidx.test.ext:junit:1.1.4")
+ androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0")
+}
+
+apply(from = file("tauri.build.gradle.kts"))
diff --git a/harnesses/gtauri/gen/android/app/proguard-rules.pro b/harnesses/gtauri/gen/android/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/app/src/main/AndroidManifest.xml b/harnesses/gtauri/gen/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..baf36cc
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/harnesses/gtauri/gen/android/app/src/main/java/wow/gmp/gallery/MainActivity.kt b/harnesses/gtauri/gen/android/app/src/main/java/wow/gmp/gallery/MainActivity.kt
new file mode 100644
index 0000000..e253e5b
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/java/wow/gmp/gallery/MainActivity.kt
@@ -0,0 +1,11 @@
+package wow.gmp.gallery
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+
+class MainActivity : TauriActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ enableEdgeToEdge()
+ super.onCreate(savedInstanceState)
+ }
+}
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/harnesses/gtauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml b/harnesses/gtauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/layout/activity_main.xml b/harnesses/gtauri/gen/android/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..4fc2444
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..28f1aa1
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..85d0c88
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..28f1aa1
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..73e48db
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..13dd214
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..73e48db
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..1d98044
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..a888b33
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..1d98044
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..0818324
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..a2a838e
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..0818324
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..b18bceb
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..3f8a57f
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..b18bceb
Binary files /dev/null and b/harnesses/gtauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/values-night/themes.xml b/harnesses/gtauri/gen/android/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..8c621f9
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/values/colors.xml b/harnesses/gtauri/gen/android/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/values/strings.xml b/harnesses/gtauri/gen/android/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..4c98cc2
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+ "Gallery"
+ "Gallery"
+
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/values/themes.xml b/harnesses/gtauri/gen/android/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..8c621f9
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/res/values/themes.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/harnesses/gtauri/gen/android/app/src/main/res/xml/file_paths.xml b/harnesses/gtauri/gen/android/app/src/main/res/xml/file_paths.xml
new file mode 100644
index 0000000..782d63b
--- /dev/null
+++ b/harnesses/gtauri/gen/android/app/src/main/res/xml/file_paths.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/harnesses/gtauri/gen/android/build.gradle.kts b/harnesses/gtauri/gen/android/build.gradle.kts
new file mode 100644
index 0000000..7bd0788
--- /dev/null
+++ b/harnesses/gtauri/gen/android/build.gradle.kts
@@ -0,0 +1,22 @@
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
+ }
+ dependencies {
+ classpath("com.android.tools.build:gradle:9.3.1")
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.10")
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+tasks.register("clean").configure {
+ delete("build")
+}
+
diff --git a/harnesses/gtauri/gen/android/buildSrc/build.gradle.kts b/harnesses/gtauri/gen/android/buildSrc/build.gradle.kts
new file mode 100644
index 0000000..cc18ea8
--- /dev/null
+++ b/harnesses/gtauri/gen/android/buildSrc/build.gradle.kts
@@ -0,0 +1,23 @@
+plugins {
+ `kotlin-dsl`
+}
+
+gradlePlugin {
+ plugins {
+ create("pluginsForCoolKids") {
+ id = "rust"
+ implementationClass = "RustPlugin"
+ }
+ }
+}
+
+repositories {
+ google()
+ mavenCentral()
+}
+
+dependencies {
+ compileOnly(gradleApi())
+ implementation("com.android.tools.build:gradle:9.3.1")
+}
+
diff --git a/harnesses/gtauri/gen/android/buildSrc/src/main/java/wow/gmp/gallery/kotlin/BuildTask.kt b/harnesses/gtauri/gen/android/buildSrc/src/main/java/wow/gmp/gallery/kotlin/BuildTask.kt
new file mode 100644
index 0000000..3b3be56
--- /dev/null
+++ b/harnesses/gtauri/gen/android/buildSrc/src/main/java/wow/gmp/gallery/kotlin/BuildTask.kt
@@ -0,0 +1,81 @@
+import java.io.File
+import org.apache.tools.ant.taskdefs.condition.Os
+import org.gradle.api.DefaultTask
+import org.gradle.api.GradleException
+import org.gradle.api.logging.LogLevel
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.TaskAction
+import javax.inject.Inject
+import org.gradle.process.ExecOperations
+
+abstract class BuildTask : DefaultTask() {
+ @get:Inject
+ abstract val execOperations: ExecOperations
+
+ @Input
+ var rootDirRel: String? = null
+ @Input
+ var projectDir: String? = null
+ @Input
+ var target: String? = null
+ @Input
+ var release: Boolean? = null
+
+ @TaskAction
+ fun assemble() {
+ // EDIT (harness workaround): the cargo-tauri CLI dies on this host
+ // because the per-user inotify watch quota is exhausted (standalone
+ // syncthing holds 65k/65536), and every cargo-tauri subcommand starts
+ // an inotify debouncer. The shim reproduces android-studio-script's
+ // effect with a plain cargo build (no inotify). Revert to "cargo"
+ // once the host quota is fixed.
+ val executable = System.getenv("TAURI_CARGO_SHIM") ?: "/mnt/Backup/prog/android/gallery/harnesses/gtauri/scripts/cargo-shim";
+ try {
+ runTauriCli(executable)
+ } catch (e: Exception) {
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
+ // Try different Windows-specific extensions
+ val fallbacks = listOf(
+ "$executable.exe",
+ "$executable.cmd",
+ "$executable.bat",
+ )
+
+ var lastException: Exception = e
+ for (fallback in fallbacks) {
+ try {
+ runTauriCli(fallback)
+ return
+ } catch (fallbackException: Exception) {
+ lastException = fallbackException
+ }
+ }
+ throw lastException
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ fun runTauriCli(executable: String) {
+ val rootDirRel = rootDirRel ?: throw GradleException("rootDirRel cannot be null")
+ val target = target ?: throw GradleException("target cannot be null")
+ val release = release ?: throw GradleException("release cannot be null")
+ val args = listOf("tauri", "android", "android-studio-script");
+
+ execOperations.exec {
+ workingDir(File(projectDir, rootDirRel))
+ executable(executable)
+ args(args)
+ if (logger.isEnabled(LogLevel.DEBUG)) {
+ args("-vv")
+ } else if (logger.isEnabled(LogLevel.INFO)) {
+ args("-v")
+ }
+ if (release) {
+ args("--release")
+ }
+ args(listOf("--target", target))
+ }.assertNormalExitValue()
+ }
+}
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/buildSrc/src/main/java/wow/gmp/gallery/kotlin/RustPlugin.kt b/harnesses/gtauri/gen/android/buildSrc/src/main/java/wow/gmp/gallery/kotlin/RustPlugin.kt
new file mode 100644
index 0000000..3309f1c
--- /dev/null
+++ b/harnesses/gtauri/gen/android/buildSrc/src/main/java/wow/gmp/gallery/kotlin/RustPlugin.kt
@@ -0,0 +1,86 @@
+import com.android.build.api.dsl.ApplicationExtension
+import org.gradle.api.DefaultTask
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.configure
+import org.gradle.kotlin.dsl.get
+
+const val TASK_GROUP = "rust"
+
+open class Config {
+ lateinit var rootDirRel: String
+}
+
+open class RustPlugin : Plugin {
+ private lateinit var config: Config
+
+ override fun apply(project: Project) = with(project) {
+ config = extensions.create("rust", Config::class.java)
+
+ val defaultAbiList = listOf("arm64-v8a", "armeabi-v7a", "x86", "x86_64");
+ val abiList = (findProperty("abiList") as? String)?.split(',') ?: defaultAbiList
+
+ val defaultArchList = listOf("arm64", "arm", "x86", "x86_64");
+ val archList = (findProperty("archList") as? String)?.split(',') ?: defaultArchList
+
+ val targetsList = (findProperty("targetList") as? String)?.split(',') ?: listOf("aarch64", "armv7", "i686", "x86_64")
+
+ extensions.configure {
+ @Suppress("UnstableApiUsage")
+ flavorDimensions.add("abi")
+ productFlavors {
+ create("universal") {
+ dimension = "abi"
+ ndk {
+ abiFilters += abiList
+ }
+ }
+ defaultArchList.forEachIndexed { index, arch ->
+ create(arch) {
+ dimension = "abi"
+ ndk {
+ abiFilters.add(defaultAbiList[index])
+ }
+ }
+ }
+ }
+ }
+
+ afterEvaluate {
+ for (profile in listOf("debug", "release")) {
+ val profileCapitalized = profile.replaceFirstChar { it.uppercase() }
+ val buildTask = tasks.maybeCreate(
+ "rustBuildUniversal$profileCapitalized",
+ DefaultTask::class.java
+ ).apply {
+ group = TASK_GROUP
+ description = "Build dynamic library in $profile mode for all targets"
+ }
+
+ tasks["mergeUniversal${profileCapitalized}JniLibFolders"].dependsOn(buildTask)
+
+ for (targetPair in targetsList.withIndex()) {
+ val targetName = targetPair.value
+ val targetArch = archList[targetPair.index]
+ val targetArchCapitalized = targetArch.replaceFirstChar { it.uppercase() }
+ val targetBuildTask = project.tasks.register(
+ "rustBuild$targetArchCapitalized$profileCapitalized",
+ BuildTask::class.java
+ ) {
+ group = TASK_GROUP
+ description = "Build dynamic library in $profile mode for $targetArch"
+ rootDirRel = config.rootDirRel
+ projectDir = project.projectDir.path
+ target = targetName
+ release = profile == "release"
+ }
+
+ buildTask.dependsOn(targetBuildTask)
+ tasks["merge$targetArchCapitalized${profileCapitalized}JniLibFolders"].dependsOn(
+ targetBuildTask
+ )
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/android/gradle.properties b/harnesses/gtauri/gen/android/gradle.properties
new file mode 100644
index 0000000..9e6e7b9
--- /dev/null
+++ b/harnesses/gtauri/gen/android/gradle.properties
@@ -0,0 +1,26 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+org.gradle.configuration-cache=true
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
+
+# Our old plugin template had a bug that caused missing `consumer-rules.pro` files
+# so we have to disable it for now.
+# See https://github.com/tauri-apps/tauri/pull/15828#issuecomment-5199937796
+android.proguard.failOnMissingFiles=false
+
+# Keeping Gradle 9 compatible with current plugins
+# TODO: Remove this in v3
+android.builtInKotlin=false
+android.newDsl=false
diff --git a/harnesses/gtauri/gen/android/gradle/wrapper/gradle-wrapper.jar b/harnesses/gtauri/gen/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..b1b8ef5
Binary files /dev/null and b/harnesses/gtauri/gen/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/harnesses/gtauri/gen/android/gradle/wrapper/gradle-wrapper.properties b/harnesses/gtauri/gen/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..b2ee479
--- /dev/null
+++ b/harnesses/gtauri/gen/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Tue May 10 19:22:52 CST 2022
+distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/harnesses/gtauri/gen/android/gradlew b/harnesses/gtauri/gen/android/gradlew
new file mode 100755
index 0000000..249efbb
--- /dev/null
+++ b/harnesses/gtauri/gen/android/gradlew
@@ -0,0 +1,248 @@
+#!/bin/sh
+
+#
+# Copyright © 2015 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+##############################################################################
+#
+# gradlew start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh gradlew
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/harnesses/gtauri/gen/android/gradlew.bat b/harnesses/gtauri/gen/android/gradlew.bat
new file mode 100644
index 0000000..a51ec4f
--- /dev/null
+++ b/harnesses/gtauri/gen/android/gradlew.bat
@@ -0,0 +1,82 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem gradlew startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables, and ensure extensions are enabled
+setlocal EnableExtensions
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+"%COMSPEC%" /c exit 1
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+"%COMSPEC%" /c exit 1
+
+:execute
+@rem Setup the command line
+
+
+
+@rem Execute gradlew
+@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
+@rem which allows us to clear the local environment before executing the java command
+endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
+
+:exitWithErrorLevel
+@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
+"%COMSPEC%" /c exit %ERRORLEVEL%
diff --git a/harnesses/gtauri/gen/android/settings.gradle b/harnesses/gtauri/gen/android/settings.gradle
new file mode 100644
index 0000000..3939116
--- /dev/null
+++ b/harnesses/gtauri/gen/android/settings.gradle
@@ -0,0 +1,3 @@
+include ':app'
+
+apply from: 'tauri.settings.gradle'
diff --git a/harnesses/gtauri/gen/schemas/acl-manifests.json b/harnesses/gtauri/gen/schemas/acl-manifests.json
new file mode 100644
index 0000000..2ebbc8d
--- /dev/null
+++ b/harnesses/gtauri/gen/schemas/acl-manifests.json
@@ -0,0 +1 @@
+{"core":{"default_permission":{"identifier":"default","description":"Default core plugins set.","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version","allow-identifier","allow-bundle-type","allow-register-listener","allow-remove-listener","allow-supports-multiple-windows"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-bundle-type":{"identifier":"allow-bundle-type","description":"Enables the bundle_type command without any pre-configured scope.","commands":{"allow":["bundle_type"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-fetch-data-store-identifiers":{"identifier":"allow-fetch-data-store-identifiers","description":"Enables the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":["fetch_data_store_identifiers"],"deny":[]}},"allow-identifier":{"identifier":"allow-identifier","description":"Enables the identifier command without any pre-configured scope.","commands":{"allow":["identifier"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-register-listener":{"identifier":"allow-register-listener","description":"Enables the register_listener command without any pre-configured scope.","commands":{"allow":["register_listener"],"deny":[]}},"allow-remove-data-store":{"identifier":"allow-remove-data-store","description":"Enables the remove_data_store command without any pre-configured scope.","commands":{"allow":["remove_data_store"],"deny":[]}},"allow-remove-listener":{"identifier":"allow-remove-listener","description":"Enables the remove_listener command without any pre-configured scope.","commands":{"allow":["remove_listener"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-set-dock-visibility":{"identifier":"allow-set-dock-visibility","description":"Enables the set_dock_visibility command without any pre-configured scope.","commands":{"allow":["set_dock_visibility"],"deny":[]}},"allow-supports-multiple-windows":{"identifier":"allow-supports-multiple-windows","description":"Enables the supports_multiple_windows command without any pre-configured scope.","commands":{"allow":["supports_multiple_windows"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-bundle-type":{"identifier":"deny-bundle-type","description":"Denies the bundle_type command without any pre-configured scope.","commands":{"allow":[],"deny":["bundle_type"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-fetch-data-store-identifiers":{"identifier":"deny-fetch-data-store-identifiers","description":"Denies the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_data_store_identifiers"]}},"deny-identifier":{"identifier":"deny-identifier","description":"Denies the identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["identifier"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-register-listener":{"identifier":"deny-register-listener","description":"Denies the register_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["register_listener"]}},"deny-remove-data-store":{"identifier":"deny-remove-data-store","description":"Denies the remove_data_store command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_data_store"]}},"deny-remove-listener":{"identifier":"deny-remove-listener","description":"Denies the remove_listener command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_listener"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-set-dock-visibility":{"identifier":"deny-set-dock-visibility","description":"Denies the set_dock_visibility command without any pre-configured scope.","commands":{"allow":[],"deny":["set_dock_visibility"]}},"deny-supports-multiple-windows":{"identifier":"deny-supports-multiple-windows","description":"Denies the supports_multiple_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["supports_multiple_windows"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-icon-with-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-icon-with-as-template":{"identifier":"allow-set-icon-with-as-template","description":"Enables the set_icon_with_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_with_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-icon-with-as-template":{"identifier":"deny-set-icon-with-as-template","description":"Denies the set_icon_with_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_with_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-auto-resize":{"identifier":"allow-set-webview-auto-resize","description":"Enables the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":["set_webview_auto_resize"],"deny":[]}},"allow-set-webview-background-color":{"identifier":"allow-set-webview-background-color","description":"Enables the set_webview_background_color command without any pre-configured scope.","commands":{"allow":["set_webview_background_color"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-auto-resize":{"identifier":"deny-set-webview-auto-resize","description":"Denies the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_auto_resize"]}},"deny-set-webview-background-color":{"identifier":"deny-set-webview-background-color","description":"Denies the set_webview_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_background_color"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-is-always-on-top","allow-activity-name","allow-scene-identifier","allow-internal-toggle-maximize"]},"permissions":{"allow-activity-name":{"identifier":"allow-activity-name","description":"Enables the activity_name command without any pre-configured scope.","commands":{"allow":["activity_name"],"deny":[]}},"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-always-on-top":{"identifier":"allow-is-always-on-top","description":"Enables the is_always_on_top command without any pre-configured scope.","commands":{"allow":["is_always_on_top"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-scene-identifier":{"identifier":"allow-scene-identifier","description":"Enables the scene_identifier command without any pre-configured scope.","commands":{"allow":["scene_identifier"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-background-color":{"identifier":"allow-set-background-color","description":"Enables the set_background_color command without any pre-configured scope.","commands":{"allow":["set_background_color"],"deny":[]}},"allow-set-badge-count":{"identifier":"allow-set-badge-count","description":"Enables the set_badge_count command without any pre-configured scope.","commands":{"allow":["set_badge_count"],"deny":[]}},"allow-set-badge-label":{"identifier":"allow-set-badge-label","description":"Enables the set_badge_label command without any pre-configured scope.","commands":{"allow":["set_badge_label"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-focusable":{"identifier":"allow-set-focusable","description":"Enables the set_focusable command without any pre-configured scope.","commands":{"allow":["set_focusable"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-fullscreen-on-monitor":{"identifier":"allow-set-fullscreen-on-monitor","description":"Enables the set_fullscreen_on_monitor command without any pre-configured scope.","commands":{"allow":["set_fullscreen_on_monitor"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-overlay-icon":{"identifier":"allow-set-overlay-icon","description":"Enables the set_overlay_icon command without any pre-configured scope.","commands":{"allow":["set_overlay_icon"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-simple-fullscreen":{"identifier":"allow-set-simple-fullscreen","description":"Enables the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":["set_simple_fullscreen"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-activity-name":{"identifier":"deny-activity-name","description":"Denies the activity_name command without any pre-configured scope.","commands":{"allow":[],"deny":["activity_name"]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-always-on-top":{"identifier":"deny-is-always-on-top","description":"Denies the is_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["is_always_on_top"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-scene-identifier":{"identifier":"deny-scene-identifier","description":"Denies the scene_identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["scene_identifier"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-background-color":{"identifier":"deny-set-background-color","description":"Denies the set_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_background_color"]}},"deny-set-badge-count":{"identifier":"deny-set-badge-count","description":"Denies the set_badge_count command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_count"]}},"deny-set-badge-label":{"identifier":"deny-set-badge-label","description":"Denies the set_badge_label command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_label"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-focusable":{"identifier":"deny-set-focusable","description":"Denies the set_focusable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focusable"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-fullscreen-on-monitor":{"identifier":"deny-set-fullscreen-on-monitor","description":"Denies the set_fullscreen_on_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen_on_monitor"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-overlay-icon":{"identifier":"deny-set-overlay-icon","description":"Denies the set_overlay_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_overlay_icon"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-simple-fullscreen":{"identifier":"deny-set-simple-fullscreen","description":"Denies the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_simple_fullscreen"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null}}
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/schemas/android-schema.json b/harnesses/gtauri/gen/schemas/android-schema.json
new file mode 100644
index 0000000..1ef1225
--- /dev/null
+++ b/harnesses/gtauri/gen/schemas/android-schema.json
@@ -0,0 +1,2316 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CapabilityFile",
+ "description": "Capability formats accepted in a capability file.",
+ "anyOf": [
+ {
+ "description": "A single capability.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/Capability"
+ }
+ ]
+ },
+ {
+ "description": "A list of capabilities.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Capability"
+ }
+ },
+ {
+ "description": "A list of capabilities.",
+ "type": "object",
+ "required": [
+ "capabilities"
+ ],
+ "properties": {
+ "capabilities": {
+ "description": "The list of capabilities.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Capability"
+ }
+ }
+ }
+ }
+ ],
+ "definitions": {
+ "Capability": {
+ "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```",
+ "type": "object",
+ "required": [
+ "identifier",
+ "permissions"
+ ],
+ "properties": {
+ "identifier": {
+ "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.",
+ "default": "",
+ "type": "string"
+ },
+ "remote": {
+ "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```",
+ "anyOf": [
+ {
+ "$ref": "#/definitions/CapabilityRemote"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "local": {
+ "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.",
+ "default": true,
+ "type": "boolean"
+ },
+ "windows": {
+ "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "webviews": {
+ "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "permissions": {
+ "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PermissionEntry"
+ },
+ "uniqueItems": true
+ },
+ "platforms": {
+ "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`",
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/Target"
+ }
+ }
+ }
+ },
+ "CapabilityRemote": {
+ "description": "Configuration for remote URLs that are associated with the capability.",
+ "type": "object",
+ "required": [
+ "urls"
+ ],
+ "properties": {
+ "urls": {
+ "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "PermissionEntry": {
+ "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.",
+ "anyOf": [
+ {
+ "description": "Reference a permission or permission set by identifier.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/Identifier"
+ }
+ ]
+ },
+ {
+ "description": "Reference a permission or permission set by identifier and extends its scope.",
+ "type": "object",
+ "allOf": [
+ {
+ "properties": {
+ "identifier": {
+ "description": "Identifier of the permission or permission set.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/Identifier"
+ }
+ ]
+ },
+ "allow": {
+ "description": "Data that defines what is allowed by the scope.",
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/Value"
+ }
+ },
+ "deny": {
+ "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.",
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/Value"
+ }
+ }
+ }
+ }
+ ],
+ "required": [
+ "identifier"
+ ]
+ }
+ ]
+ },
+ "Identifier": {
+ "description": "Permission identifier",
+ "oneOf": [
+ {
+ "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`",
+ "type": "string",
+ "const": "core:default",
+ "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`"
+ },
+ {
+ "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`\n- `allow-supports-multiple-windows`",
+ "type": "string",
+ "const": "core:app:default",
+ "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`\n- `allow-supports-multiple-windows`"
+ },
+ {
+ "description": "Enables the app_hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-app-hide",
+ "markdownDescription": "Enables the app_hide command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the app_show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-app-show",
+ "markdownDescription": "Enables the app_show command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the bundle_type command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-bundle-type",
+ "markdownDescription": "Enables the bundle_type command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the default_window_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-default-window-icon",
+ "markdownDescription": "Enables the default_window_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the exit command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-exit",
+ "markdownDescription": "Enables the exit command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-fetch-data-store-identifiers",
+ "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the identifier command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-identifier",
+ "markdownDescription": "Enables the identifier command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the name command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-name",
+ "markdownDescription": "Enables the name command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the register_listener command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-register-listener",
+ "markdownDescription": "Enables the register_listener command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove_data_store command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-remove-data-store",
+ "markdownDescription": "Enables the remove_data_store command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove_listener command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-remove-listener",
+ "markdownDescription": "Enables the remove_listener command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_app_theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-set-app-theme",
+ "markdownDescription": "Enables the set_app_theme command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_dock_visibility command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-set-dock-visibility",
+ "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the supports_multiple_windows command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-supports-multiple-windows",
+ "markdownDescription": "Enables the supports_multiple_windows command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the tauri_version command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-tauri-version",
+ "markdownDescription": "Enables the tauri_version command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the version command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-version",
+ "markdownDescription": "Enables the version command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the app_hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-app-hide",
+ "markdownDescription": "Denies the app_hide command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the app_show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-app-show",
+ "markdownDescription": "Denies the app_show command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the bundle_type command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-bundle-type",
+ "markdownDescription": "Denies the bundle_type command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the default_window_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-default-window-icon",
+ "markdownDescription": "Denies the default_window_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the exit command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-exit",
+ "markdownDescription": "Denies the exit command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-fetch-data-store-identifiers",
+ "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the identifier command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-identifier",
+ "markdownDescription": "Denies the identifier command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the name command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-name",
+ "markdownDescription": "Denies the name command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the register_listener command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-register-listener",
+ "markdownDescription": "Denies the register_listener command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove_data_store command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-remove-data-store",
+ "markdownDescription": "Denies the remove_data_store command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove_listener command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-remove-listener",
+ "markdownDescription": "Denies the remove_listener command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_app_theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-set-app-theme",
+ "markdownDescription": "Denies the set_app_theme command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_dock_visibility command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-set-dock-visibility",
+ "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the supports_multiple_windows command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-supports-multiple-windows",
+ "markdownDescription": "Denies the supports_multiple_windows command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the tauri_version command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-tauri-version",
+ "markdownDescription": "Denies the tauri_version command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the version command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-version",
+ "markdownDescription": "Denies the version command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`",
+ "type": "string",
+ "const": "core:event:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`"
+ },
+ {
+ "description": "Enables the emit command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:allow-emit",
+ "markdownDescription": "Enables the emit command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the emit_to command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:allow-emit-to",
+ "markdownDescription": "Enables the emit_to command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the listen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:allow-listen",
+ "markdownDescription": "Enables the listen command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the unlisten command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:allow-unlisten",
+ "markdownDescription": "Enables the unlisten command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the emit command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:deny-emit",
+ "markdownDescription": "Denies the emit command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the emit_to command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:deny-emit-to",
+ "markdownDescription": "Denies the emit_to command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the listen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:deny-listen",
+ "markdownDescription": "Denies the listen command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the unlisten command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:deny-unlisten",
+ "markdownDescription": "Denies the unlisten command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`",
+ "type": "string",
+ "const": "core:image:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`"
+ },
+ {
+ "description": "Enables the from_bytes command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-from-bytes",
+ "markdownDescription": "Enables the from_bytes command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the from_path command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-from-path",
+ "markdownDescription": "Enables the from_path command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-new",
+ "markdownDescription": "Enables the new command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the rgba command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-rgba",
+ "markdownDescription": "Enables the rgba command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-size",
+ "markdownDescription": "Enables the size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the from_bytes command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-from-bytes",
+ "markdownDescription": "Denies the from_bytes command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the from_path command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-from-path",
+ "markdownDescription": "Denies the from_path command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-new",
+ "markdownDescription": "Denies the new command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the rgba command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-rgba",
+ "markdownDescription": "Denies the rgba command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-size",
+ "markdownDescription": "Denies the size command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`",
+ "type": "string",
+ "const": "core:menu:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`"
+ },
+ {
+ "description": "Enables the append command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-append",
+ "markdownDescription": "Enables the append command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the create_default command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-create-default",
+ "markdownDescription": "Enables the create_default command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the get command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-get",
+ "markdownDescription": "Enables the get command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the insert command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-insert",
+ "markdownDescription": "Enables the insert command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_checked command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-is-checked",
+ "markdownDescription": "Enables the is_checked command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-is-enabled",
+ "markdownDescription": "Enables the is_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the items command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-items",
+ "markdownDescription": "Enables the items command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-new",
+ "markdownDescription": "Enables the new command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the popup command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-popup",
+ "markdownDescription": "Enables the popup command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the prepend command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-prepend",
+ "markdownDescription": "Enables the prepend command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-remove",
+ "markdownDescription": "Enables the remove command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove_at command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-remove-at",
+ "markdownDescription": "Enables the remove_at command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_accelerator command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-accelerator",
+ "markdownDescription": "Enables the set_accelerator command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_as_app_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-as-app-menu",
+ "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-as-help-menu-for-nsapp",
+ "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_as_window_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-as-window-menu",
+ "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-as-windows-menu-for-nsapp",
+ "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_checked command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-checked",
+ "markdownDescription": "Enables the set_checked command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-enabled",
+ "markdownDescription": "Enables the set_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-icon",
+ "markdownDescription": "Enables the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_text command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-text",
+ "markdownDescription": "Enables the set_text command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the text command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-text",
+ "markdownDescription": "Enables the text command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the append command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-append",
+ "markdownDescription": "Denies the append command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the create_default command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-create-default",
+ "markdownDescription": "Denies the create_default command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the get command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-get",
+ "markdownDescription": "Denies the get command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the insert command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-insert",
+ "markdownDescription": "Denies the insert command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_checked command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-is-checked",
+ "markdownDescription": "Denies the is_checked command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-is-enabled",
+ "markdownDescription": "Denies the is_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the items command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-items",
+ "markdownDescription": "Denies the items command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-new",
+ "markdownDescription": "Denies the new command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the popup command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-popup",
+ "markdownDescription": "Denies the popup command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the prepend command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-prepend",
+ "markdownDescription": "Denies the prepend command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-remove",
+ "markdownDescription": "Denies the remove command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove_at command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-remove-at",
+ "markdownDescription": "Denies the remove_at command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_accelerator command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-accelerator",
+ "markdownDescription": "Denies the set_accelerator command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_as_app_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-as-app-menu",
+ "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-as-help-menu-for-nsapp",
+ "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_as_window_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-as-window-menu",
+ "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-as-windows-menu-for-nsapp",
+ "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_checked command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-checked",
+ "markdownDescription": "Denies the set_checked command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-enabled",
+ "markdownDescription": "Denies the set_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-icon",
+ "markdownDescription": "Denies the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_text command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-text",
+ "markdownDescription": "Denies the set_text command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the text command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-text",
+ "markdownDescription": "Denies the text command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`",
+ "type": "string",
+ "const": "core:path:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`"
+ },
+ {
+ "description": "Enables the basename command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-basename",
+ "markdownDescription": "Enables the basename command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the dirname command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-dirname",
+ "markdownDescription": "Enables the dirname command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the extname command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-extname",
+ "markdownDescription": "Enables the extname command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_absolute command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-is-absolute",
+ "markdownDescription": "Enables the is_absolute command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the join command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-join",
+ "markdownDescription": "Enables the join command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the normalize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-normalize",
+ "markdownDescription": "Enables the normalize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the resolve command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-resolve",
+ "markdownDescription": "Enables the resolve command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the resolve_directory command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-resolve-directory",
+ "markdownDescription": "Enables the resolve_directory command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the basename command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-basename",
+ "markdownDescription": "Denies the basename command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the dirname command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-dirname",
+ "markdownDescription": "Denies the dirname command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the extname command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-extname",
+ "markdownDescription": "Denies the extname command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_absolute command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-is-absolute",
+ "markdownDescription": "Denies the is_absolute command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the join command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-join",
+ "markdownDescription": "Denies the join command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the normalize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-normalize",
+ "markdownDescription": "Denies the normalize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the resolve command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-resolve",
+ "markdownDescription": "Denies the resolve command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the resolve_directory command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-resolve-directory",
+ "markdownDescription": "Denies the resolve_directory command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`",
+ "type": "string",
+ "const": "core:resources:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`"
+ },
+ {
+ "description": "Enables the close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:resources:allow-close",
+ "markdownDescription": "Enables the close command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:resources:deny-close",
+ "markdownDescription": "Denies the close command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-icon-with-as-template`\n- `allow-set-show-menu-on-left-click`",
+ "type": "string",
+ "const": "core:tray:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-icon-with-as-template`\n- `allow-set-show-menu-on-left-click`"
+ },
+ {
+ "description": "Enables the get_by_id command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-get-by-id",
+ "markdownDescription": "Enables the get_by_id command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-new",
+ "markdownDescription": "Enables the new command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove_by_id command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-remove-by-id",
+ "markdownDescription": "Enables the remove_by_id command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-icon",
+ "markdownDescription": "Enables the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon_as_template command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-icon-as-template",
+ "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon_with_as_template command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-icon-with-as-template",
+ "markdownDescription": "Enables the set_icon_with_as_template command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-menu",
+ "markdownDescription": "Enables the set_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-show-menu-on-left-click",
+ "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_temp_dir_path command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-temp-dir-path",
+ "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-title",
+ "markdownDescription": "Enables the set_title command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_tooltip command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-tooltip",
+ "markdownDescription": "Enables the set_tooltip command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-visible",
+ "markdownDescription": "Enables the set_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the get_by_id command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-get-by-id",
+ "markdownDescription": "Denies the get_by_id command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-new",
+ "markdownDescription": "Denies the new command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove_by_id command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-remove-by-id",
+ "markdownDescription": "Denies the remove_by_id command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-icon",
+ "markdownDescription": "Denies the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon_as_template command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-icon-as-template",
+ "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon_with_as_template command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-icon-with-as-template",
+ "markdownDescription": "Denies the set_icon_with_as_template command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-menu",
+ "markdownDescription": "Denies the set_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-show-menu-on-left-click",
+ "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_temp_dir_path command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-temp-dir-path",
+ "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-title",
+ "markdownDescription": "Denies the set_title command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_tooltip command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-tooltip",
+ "markdownDescription": "Denies the set_tooltip command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-visible",
+ "markdownDescription": "Denies the set_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`",
+ "type": "string",
+ "const": "core:webview:default",
+ "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`"
+ },
+ {
+ "description": "Enables the clear_all_browsing_data command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-clear-all-browsing-data",
+ "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the create_webview command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-create-webview",
+ "markdownDescription": "Enables the create_webview command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the create_webview_window command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-create-webview-window",
+ "markdownDescription": "Enables the create_webview_window command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the get_all_webviews command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-get-all-webviews",
+ "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the internal_toggle_devtools command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-internal-toggle-devtools",
+ "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the print command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-print",
+ "markdownDescription": "Enables the print command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the reparent command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-reparent",
+ "markdownDescription": "Enables the reparent command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_auto_resize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-auto-resize",
+ "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_background_color command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-background-color",
+ "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_focus command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-focus",
+ "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-position",
+ "markdownDescription": "Enables the set_webview_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-size",
+ "markdownDescription": "Enables the set_webview_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_zoom command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-zoom",
+ "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-close",
+ "markdownDescription": "Enables the webview_close command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-hide",
+ "markdownDescription": "Enables the webview_hide command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-position",
+ "markdownDescription": "Enables the webview_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-show",
+ "markdownDescription": "Enables the webview_show command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-size",
+ "markdownDescription": "Enables the webview_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the clear_all_browsing_data command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-clear-all-browsing-data",
+ "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the create_webview command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-create-webview",
+ "markdownDescription": "Denies the create_webview command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the create_webview_window command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-create-webview-window",
+ "markdownDescription": "Denies the create_webview_window command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the get_all_webviews command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-get-all-webviews",
+ "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the internal_toggle_devtools command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-internal-toggle-devtools",
+ "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the print command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-print",
+ "markdownDescription": "Denies the print command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the reparent command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-reparent",
+ "markdownDescription": "Denies the reparent command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_auto_resize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-auto-resize",
+ "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_background_color command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-background-color",
+ "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_focus command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-focus",
+ "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-position",
+ "markdownDescription": "Denies the set_webview_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-size",
+ "markdownDescription": "Denies the set_webview_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_zoom command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-zoom",
+ "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-close",
+ "markdownDescription": "Denies the webview_close command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-hide",
+ "markdownDescription": "Denies the webview_hide command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-position",
+ "markdownDescription": "Denies the webview_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-show",
+ "markdownDescription": "Denies the webview_show command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-size",
+ "markdownDescription": "Denies the webview_size command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-activity-name`\n- `allow-scene-identifier`\n- `allow-internal-toggle-maximize`",
+ "type": "string",
+ "const": "core:window:default",
+ "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-activity-name`\n- `allow-scene-identifier`\n- `allow-internal-toggle-maximize`"
+ },
+ {
+ "description": "Enables the activity_name command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-activity-name",
+ "markdownDescription": "Enables the activity_name command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the available_monitors command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-available-monitors",
+ "markdownDescription": "Enables the available_monitors command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the center command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-center",
+ "markdownDescription": "Enables the center command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-close",
+ "markdownDescription": "Enables the close command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the create command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-create",
+ "markdownDescription": "Enables the create command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the current_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-current-monitor",
+ "markdownDescription": "Enables the current_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the cursor_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-cursor-position",
+ "markdownDescription": "Enables the cursor_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the destroy command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-destroy",
+ "markdownDescription": "Enables the destroy command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the get_all_windows command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-get-all-windows",
+ "markdownDescription": "Enables the get_all_windows command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-hide",
+ "markdownDescription": "Enables the hide command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the inner_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-inner-position",
+ "markdownDescription": "Enables the inner_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the inner_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-inner-size",
+ "markdownDescription": "Enables the inner_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the internal_toggle_maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-internal-toggle-maximize",
+ "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_always_on_top command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-always-on-top",
+ "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_closable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-closable",
+ "markdownDescription": "Enables the is_closable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_decorated command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-decorated",
+ "markdownDescription": "Enables the is_decorated command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-enabled",
+ "markdownDescription": "Enables the is_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_focused command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-focused",
+ "markdownDescription": "Enables the is_focused command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-fullscreen",
+ "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_maximizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-maximizable",
+ "markdownDescription": "Enables the is_maximizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_maximized command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-maximized",
+ "markdownDescription": "Enables the is_maximized command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_minimizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-minimizable",
+ "markdownDescription": "Enables the is_minimizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_minimized command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-minimized",
+ "markdownDescription": "Enables the is_minimized command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_resizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-resizable",
+ "markdownDescription": "Enables the is_resizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-visible",
+ "markdownDescription": "Enables the is_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-maximize",
+ "markdownDescription": "Enables the maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the minimize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-minimize",
+ "markdownDescription": "Enables the minimize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the monitor_from_point command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-monitor-from-point",
+ "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the outer_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-outer-position",
+ "markdownDescription": "Enables the outer_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the outer_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-outer-size",
+ "markdownDescription": "Enables the outer_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the primary_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-primary-monitor",
+ "markdownDescription": "Enables the primary_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the request_user_attention command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-request-user-attention",
+ "markdownDescription": "Enables the request_user_attention command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the scale_factor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-scale-factor",
+ "markdownDescription": "Enables the scale_factor command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the scene_identifier command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-scene-identifier",
+ "markdownDescription": "Enables the scene_identifier command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_always_on_bottom command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-always-on-bottom",
+ "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_always_on_top command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-always-on-top",
+ "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_background_color command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-background-color",
+ "markdownDescription": "Enables the set_background_color command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_badge_count command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-badge-count",
+ "markdownDescription": "Enables the set_badge_count command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_badge_label command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-badge-label",
+ "markdownDescription": "Enables the set_badge_label command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_closable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-closable",
+ "markdownDescription": "Enables the set_closable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_content_protected command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-content-protected",
+ "markdownDescription": "Enables the set_content_protected command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_cursor_grab command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-cursor-grab",
+ "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_cursor_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-cursor-icon",
+ "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_cursor_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-cursor-position",
+ "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_cursor_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-cursor-visible",
+ "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_decorations command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-decorations",
+ "markdownDescription": "Enables the set_decorations command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_effects command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-effects",
+ "markdownDescription": "Enables the set_effects command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-enabled",
+ "markdownDescription": "Enables the set_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_focus command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-focus",
+ "markdownDescription": "Enables the set_focus command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_focusable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-focusable",
+ "markdownDescription": "Enables the set_focusable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-fullscreen",
+ "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_fullscreen_on_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-fullscreen-on-monitor",
+ "markdownDescription": "Enables the set_fullscreen_on_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-icon",
+ "markdownDescription": "Enables the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-ignore-cursor-events",
+ "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_max_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-max-size",
+ "markdownDescription": "Enables the set_max_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_maximizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-maximizable",
+ "markdownDescription": "Enables the set_maximizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_min_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-min-size",
+ "markdownDescription": "Enables the set_min_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_minimizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-minimizable",
+ "markdownDescription": "Enables the set_minimizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_overlay_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-overlay-icon",
+ "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-position",
+ "markdownDescription": "Enables the set_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_progress_bar command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-progress-bar",
+ "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_resizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-resizable",
+ "markdownDescription": "Enables the set_resizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_shadow command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-shadow",
+ "markdownDescription": "Enables the set_shadow command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_simple_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-simple-fullscreen",
+ "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-size",
+ "markdownDescription": "Enables the set_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_size_constraints command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-size-constraints",
+ "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_skip_taskbar command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-skip-taskbar",
+ "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-theme",
+ "markdownDescription": "Enables the set_theme command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-title",
+ "markdownDescription": "Enables the set_title command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_title_bar_style command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-title-bar-style",
+ "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-visible-on-all-workspaces",
+ "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-show",
+ "markdownDescription": "Enables the show command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the start_dragging command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-start-dragging",
+ "markdownDescription": "Enables the start_dragging command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the start_resize_dragging command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-start-resize-dragging",
+ "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-theme",
+ "markdownDescription": "Enables the theme command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-title",
+ "markdownDescription": "Enables the title command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the toggle_maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-toggle-maximize",
+ "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the unmaximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-unmaximize",
+ "markdownDescription": "Enables the unmaximize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the unminimize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-unminimize",
+ "markdownDescription": "Enables the unminimize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the activity_name command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-activity-name",
+ "markdownDescription": "Denies the activity_name command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the available_monitors command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-available-monitors",
+ "markdownDescription": "Denies the available_monitors command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the center command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-center",
+ "markdownDescription": "Denies the center command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-close",
+ "markdownDescription": "Denies the close command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the create command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-create",
+ "markdownDescription": "Denies the create command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the current_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-current-monitor",
+ "markdownDescription": "Denies the current_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the cursor_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-cursor-position",
+ "markdownDescription": "Denies the cursor_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the destroy command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-destroy",
+ "markdownDescription": "Denies the destroy command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the get_all_windows command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-get-all-windows",
+ "markdownDescription": "Denies the get_all_windows command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-hide",
+ "markdownDescription": "Denies the hide command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the inner_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-inner-position",
+ "markdownDescription": "Denies the inner_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the inner_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-inner-size",
+ "markdownDescription": "Denies the inner_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the internal_toggle_maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-internal-toggle-maximize",
+ "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_always_on_top command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-always-on-top",
+ "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_closable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-closable",
+ "markdownDescription": "Denies the is_closable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_decorated command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-decorated",
+ "markdownDescription": "Denies the is_decorated command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-enabled",
+ "markdownDescription": "Denies the is_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_focused command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-focused",
+ "markdownDescription": "Denies the is_focused command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-fullscreen",
+ "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_maximizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-maximizable",
+ "markdownDescription": "Denies the is_maximizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_maximized command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-maximized",
+ "markdownDescription": "Denies the is_maximized command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_minimizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-minimizable",
+ "markdownDescription": "Denies the is_minimizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_minimized command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-minimized",
+ "markdownDescription": "Denies the is_minimized command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_resizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-resizable",
+ "markdownDescription": "Denies the is_resizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-visible",
+ "markdownDescription": "Denies the is_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-maximize",
+ "markdownDescription": "Denies the maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the minimize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-minimize",
+ "markdownDescription": "Denies the minimize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the monitor_from_point command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-monitor-from-point",
+ "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the outer_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-outer-position",
+ "markdownDescription": "Denies the outer_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the outer_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-outer-size",
+ "markdownDescription": "Denies the outer_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the primary_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-primary-monitor",
+ "markdownDescription": "Denies the primary_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the request_user_attention command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-request-user-attention",
+ "markdownDescription": "Denies the request_user_attention command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the scale_factor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-scale-factor",
+ "markdownDescription": "Denies the scale_factor command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the scene_identifier command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-scene-identifier",
+ "markdownDescription": "Denies the scene_identifier command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_always_on_bottom command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-always-on-bottom",
+ "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_always_on_top command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-always-on-top",
+ "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_background_color command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-background-color",
+ "markdownDescription": "Denies the set_background_color command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_badge_count command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-badge-count",
+ "markdownDescription": "Denies the set_badge_count command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_badge_label command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-badge-label",
+ "markdownDescription": "Denies the set_badge_label command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_closable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-closable",
+ "markdownDescription": "Denies the set_closable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_content_protected command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-content-protected",
+ "markdownDescription": "Denies the set_content_protected command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_cursor_grab command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-cursor-grab",
+ "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_cursor_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-cursor-icon",
+ "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_cursor_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-cursor-position",
+ "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_cursor_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-cursor-visible",
+ "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_decorations command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-decorations",
+ "markdownDescription": "Denies the set_decorations command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_effects command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-effects",
+ "markdownDescription": "Denies the set_effects command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-enabled",
+ "markdownDescription": "Denies the set_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_focus command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-focus",
+ "markdownDescription": "Denies the set_focus command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_focusable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-focusable",
+ "markdownDescription": "Denies the set_focusable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-fullscreen",
+ "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_fullscreen_on_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-fullscreen-on-monitor",
+ "markdownDescription": "Denies the set_fullscreen_on_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-icon",
+ "markdownDescription": "Denies the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-ignore-cursor-events",
+ "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_max_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-max-size",
+ "markdownDescription": "Denies the set_max_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_maximizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-maximizable",
+ "markdownDescription": "Denies the set_maximizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_min_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-min-size",
+ "markdownDescription": "Denies the set_min_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_minimizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-minimizable",
+ "markdownDescription": "Denies the set_minimizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_overlay_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-overlay-icon",
+ "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-position",
+ "markdownDescription": "Denies the set_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_progress_bar command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-progress-bar",
+ "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_resizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-resizable",
+ "markdownDescription": "Denies the set_resizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_shadow command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-shadow",
+ "markdownDescription": "Denies the set_shadow command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_simple_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-simple-fullscreen",
+ "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-size",
+ "markdownDescription": "Denies the set_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_size_constraints command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-size-constraints",
+ "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_skip_taskbar command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-skip-taskbar",
+ "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-theme",
+ "markdownDescription": "Denies the set_theme command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-title",
+ "markdownDescription": "Denies the set_title command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_title_bar_style command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-title-bar-style",
+ "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-visible-on-all-workspaces",
+ "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-show",
+ "markdownDescription": "Denies the show command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the start_dragging command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-start-dragging",
+ "markdownDescription": "Denies the start_dragging command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the start_resize_dragging command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-start-resize-dragging",
+ "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-theme",
+ "markdownDescription": "Denies the theme command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-title",
+ "markdownDescription": "Denies the title command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the toggle_maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-toggle-maximize",
+ "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the unmaximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-unmaximize",
+ "markdownDescription": "Denies the unmaximize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the unminimize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-unminimize",
+ "markdownDescription": "Denies the unminimize command without any pre-configured scope."
+ }
+ ]
+ },
+ "Value": {
+ "description": "All supported ACL values.",
+ "anyOf": [
+ {
+ "description": "Represents a null JSON value.",
+ "type": "null"
+ },
+ {
+ "description": "Represents a [`bool`].",
+ "type": "boolean"
+ },
+ {
+ "description": "Represents a valid ACL [`Number`].",
+ "allOf": [
+ {
+ "$ref": "#/definitions/Number"
+ }
+ ]
+ },
+ {
+ "description": "Represents a [`String`].",
+ "type": "string"
+ },
+ {
+ "description": "Represents a list of other [`Value`]s.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Value"
+ }
+ },
+ {
+ "description": "Represents a map of [`String`] keys to [`Value`]s.",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/Value"
+ }
+ }
+ ]
+ },
+ "Number": {
+ "description": "A valid ACL number.",
+ "anyOf": [
+ {
+ "description": "Represents an [`i64`].",
+ "type": "integer",
+ "format": "int64"
+ },
+ {
+ "description": "Represents a [`f64`].",
+ "type": "number",
+ "format": "double"
+ }
+ ]
+ },
+ "Target": {
+ "description": "Platform target.",
+ "oneOf": [
+ {
+ "description": "MacOS.",
+ "type": "string",
+ "enum": [
+ "macOS"
+ ]
+ },
+ {
+ "description": "Windows.",
+ "type": "string",
+ "enum": [
+ "windows"
+ ]
+ },
+ {
+ "description": "Linux.",
+ "type": "string",
+ "enum": [
+ "linux"
+ ]
+ },
+ {
+ "description": "Android.",
+ "type": "string",
+ "enum": [
+ "android"
+ ]
+ },
+ {
+ "description": "iOS.",
+ "type": "string",
+ "enum": [
+ "iOS"
+ ]
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/schemas/capabilities.json b/harnesses/gtauri/gen/schemas/capabilities.json
new file mode 100644
index 0000000..ea22560
--- /dev/null
+++ b/harnesses/gtauri/gen/schemas/capabilities.json
@@ -0,0 +1 @@
+{"default":{"identifier":"default","description":"tttest: FR batching + lifecycle logs from the webview","local":true,"windows":["main"],"permissions":["core:default"]}}
\ No newline at end of file
diff --git a/harnesses/gtauri/gen/schemas/mobile-schema.json b/harnesses/gtauri/gen/schemas/mobile-schema.json
new file mode 100644
index 0000000..1ef1225
--- /dev/null
+++ b/harnesses/gtauri/gen/schemas/mobile-schema.json
@@ -0,0 +1,2316 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "CapabilityFile",
+ "description": "Capability formats accepted in a capability file.",
+ "anyOf": [
+ {
+ "description": "A single capability.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/Capability"
+ }
+ ]
+ },
+ {
+ "description": "A list of capabilities.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Capability"
+ }
+ },
+ {
+ "description": "A list of capabilities.",
+ "type": "object",
+ "required": [
+ "capabilities"
+ ],
+ "properties": {
+ "capabilities": {
+ "description": "The list of capabilities.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Capability"
+ }
+ }
+ }
+ }
+ ],
+ "definitions": {
+ "Capability": {
+ "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```",
+ "type": "object",
+ "required": [
+ "identifier",
+ "permissions"
+ ],
+ "properties": {
+ "identifier": {
+ "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`",
+ "type": "string"
+ },
+ "description": {
+ "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.",
+ "default": "",
+ "type": "string"
+ },
+ "remote": {
+ "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```",
+ "anyOf": [
+ {
+ "$ref": "#/definitions/CapabilityRemote"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "local": {
+ "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.",
+ "default": true,
+ "type": "boolean"
+ },
+ "windows": {
+ "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nIf a window label matches any of the patterns in this list, the capability will be enabled on all the webviews of that window, regardless of the value of [`Self::webviews`].\n\nOn multiwebview windows, prefer specifying [`Self::webviews`] and omitting [`Self::windows`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "webviews": {
+ "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThe capability will be enabled on all the webviews whose label matches any of the patterns in this list, regardless of whether the webview's window label matches a pattern in [`Self::windows`].\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "permissions": {
+ "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PermissionEntry"
+ },
+ "uniqueItems": true
+ },
+ "platforms": {
+ "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`",
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/Target"
+ }
+ }
+ }
+ },
+ "CapabilityRemote": {
+ "description": "Configuration for remote URLs that are associated with the capability.",
+ "type": "object",
+ "required": [
+ "urls"
+ ],
+ "properties": {
+ "urls": {
+ "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "PermissionEntry": {
+ "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.",
+ "anyOf": [
+ {
+ "description": "Reference a permission or permission set by identifier.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/Identifier"
+ }
+ ]
+ },
+ {
+ "description": "Reference a permission or permission set by identifier and extends its scope.",
+ "type": "object",
+ "allOf": [
+ {
+ "properties": {
+ "identifier": {
+ "description": "Identifier of the permission or permission set.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/Identifier"
+ }
+ ]
+ },
+ "allow": {
+ "description": "Data that defines what is allowed by the scope.",
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/Value"
+ }
+ },
+ "deny": {
+ "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.",
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/Value"
+ }
+ }
+ }
+ }
+ ],
+ "required": [
+ "identifier"
+ ]
+ }
+ ]
+ },
+ "Identifier": {
+ "description": "Permission identifier",
+ "oneOf": [
+ {
+ "description": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`",
+ "type": "string",
+ "const": "core:default",
+ "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`"
+ },
+ {
+ "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`\n- `allow-supports-multiple-windows`",
+ "type": "string",
+ "const": "core:app:default",
+ "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`\n- `allow-register-listener`\n- `allow-remove-listener`\n- `allow-supports-multiple-windows`"
+ },
+ {
+ "description": "Enables the app_hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-app-hide",
+ "markdownDescription": "Enables the app_hide command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the app_show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-app-show",
+ "markdownDescription": "Enables the app_show command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the bundle_type command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-bundle-type",
+ "markdownDescription": "Enables the bundle_type command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the default_window_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-default-window-icon",
+ "markdownDescription": "Enables the default_window_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the exit command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-exit",
+ "markdownDescription": "Enables the exit command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the fetch_data_store_identifiers command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-fetch-data-store-identifiers",
+ "markdownDescription": "Enables the fetch_data_store_identifiers command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the identifier command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-identifier",
+ "markdownDescription": "Enables the identifier command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the name command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-name",
+ "markdownDescription": "Enables the name command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the register_listener command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-register-listener",
+ "markdownDescription": "Enables the register_listener command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove_data_store command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-remove-data-store",
+ "markdownDescription": "Enables the remove_data_store command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove_listener command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-remove-listener",
+ "markdownDescription": "Enables the remove_listener command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_app_theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-set-app-theme",
+ "markdownDescription": "Enables the set_app_theme command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_dock_visibility command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-set-dock-visibility",
+ "markdownDescription": "Enables the set_dock_visibility command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the supports_multiple_windows command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-supports-multiple-windows",
+ "markdownDescription": "Enables the supports_multiple_windows command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the tauri_version command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-tauri-version",
+ "markdownDescription": "Enables the tauri_version command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the version command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:allow-version",
+ "markdownDescription": "Enables the version command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the app_hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-app-hide",
+ "markdownDescription": "Denies the app_hide command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the app_show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-app-show",
+ "markdownDescription": "Denies the app_show command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the bundle_type command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-bundle-type",
+ "markdownDescription": "Denies the bundle_type command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the default_window_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-default-window-icon",
+ "markdownDescription": "Denies the default_window_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the exit command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-exit",
+ "markdownDescription": "Denies the exit command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the fetch_data_store_identifiers command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-fetch-data-store-identifiers",
+ "markdownDescription": "Denies the fetch_data_store_identifiers command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the identifier command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-identifier",
+ "markdownDescription": "Denies the identifier command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the name command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-name",
+ "markdownDescription": "Denies the name command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the register_listener command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-register-listener",
+ "markdownDescription": "Denies the register_listener command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove_data_store command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-remove-data-store",
+ "markdownDescription": "Denies the remove_data_store command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove_listener command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-remove-listener",
+ "markdownDescription": "Denies the remove_listener command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_app_theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-set-app-theme",
+ "markdownDescription": "Denies the set_app_theme command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_dock_visibility command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-set-dock-visibility",
+ "markdownDescription": "Denies the set_dock_visibility command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the supports_multiple_windows command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-supports-multiple-windows",
+ "markdownDescription": "Denies the supports_multiple_windows command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the tauri_version command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-tauri-version",
+ "markdownDescription": "Denies the tauri_version command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the version command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:app:deny-version",
+ "markdownDescription": "Denies the version command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`",
+ "type": "string",
+ "const": "core:event:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-listen`\n- `allow-unlisten`\n- `allow-emit`\n- `allow-emit-to`"
+ },
+ {
+ "description": "Enables the emit command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:allow-emit",
+ "markdownDescription": "Enables the emit command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the emit_to command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:allow-emit-to",
+ "markdownDescription": "Enables the emit_to command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the listen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:allow-listen",
+ "markdownDescription": "Enables the listen command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the unlisten command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:allow-unlisten",
+ "markdownDescription": "Enables the unlisten command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the emit command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:deny-emit",
+ "markdownDescription": "Denies the emit command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the emit_to command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:deny-emit-to",
+ "markdownDescription": "Denies the emit_to command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the listen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:deny-listen",
+ "markdownDescription": "Denies the listen command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the unlisten command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:event:deny-unlisten",
+ "markdownDescription": "Denies the unlisten command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`",
+ "type": "string",
+ "const": "core:image:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-from-bytes`\n- `allow-from-path`\n- `allow-rgba`\n- `allow-size`"
+ },
+ {
+ "description": "Enables the from_bytes command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-from-bytes",
+ "markdownDescription": "Enables the from_bytes command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the from_path command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-from-path",
+ "markdownDescription": "Enables the from_path command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-new",
+ "markdownDescription": "Enables the new command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the rgba command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-rgba",
+ "markdownDescription": "Enables the rgba command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:allow-size",
+ "markdownDescription": "Enables the size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the from_bytes command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-from-bytes",
+ "markdownDescription": "Denies the from_bytes command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the from_path command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-from-path",
+ "markdownDescription": "Denies the from_path command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-new",
+ "markdownDescription": "Denies the new command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the rgba command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-rgba",
+ "markdownDescription": "Denies the rgba command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:image:deny-size",
+ "markdownDescription": "Denies the size command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`",
+ "type": "string",
+ "const": "core:menu:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-append`\n- `allow-prepend`\n- `allow-insert`\n- `allow-remove`\n- `allow-remove-at`\n- `allow-items`\n- `allow-get`\n- `allow-popup`\n- `allow-create-default`\n- `allow-set-as-app-menu`\n- `allow-set-as-window-menu`\n- `allow-text`\n- `allow-set-text`\n- `allow-is-enabled`\n- `allow-set-enabled`\n- `allow-set-accelerator`\n- `allow-set-as-windows-menu-for-nsapp`\n- `allow-set-as-help-menu-for-nsapp`\n- `allow-is-checked`\n- `allow-set-checked`\n- `allow-set-icon`"
+ },
+ {
+ "description": "Enables the append command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-append",
+ "markdownDescription": "Enables the append command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the create_default command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-create-default",
+ "markdownDescription": "Enables the create_default command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the get command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-get",
+ "markdownDescription": "Enables the get command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the insert command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-insert",
+ "markdownDescription": "Enables the insert command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_checked command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-is-checked",
+ "markdownDescription": "Enables the is_checked command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-is-enabled",
+ "markdownDescription": "Enables the is_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the items command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-items",
+ "markdownDescription": "Enables the items command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-new",
+ "markdownDescription": "Enables the new command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the popup command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-popup",
+ "markdownDescription": "Enables the popup command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the prepend command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-prepend",
+ "markdownDescription": "Enables the prepend command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-remove",
+ "markdownDescription": "Enables the remove command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove_at command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-remove-at",
+ "markdownDescription": "Enables the remove_at command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_accelerator command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-accelerator",
+ "markdownDescription": "Enables the set_accelerator command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_as_app_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-as-app-menu",
+ "markdownDescription": "Enables the set_as_app_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-as-help-menu-for-nsapp",
+ "markdownDescription": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_as_window_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-as-window-menu",
+ "markdownDescription": "Enables the set_as_window_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-as-windows-menu-for-nsapp",
+ "markdownDescription": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_checked command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-checked",
+ "markdownDescription": "Enables the set_checked command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-enabled",
+ "markdownDescription": "Enables the set_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-icon",
+ "markdownDescription": "Enables the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_text command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-set-text",
+ "markdownDescription": "Enables the set_text command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the text command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:allow-text",
+ "markdownDescription": "Enables the text command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the append command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-append",
+ "markdownDescription": "Denies the append command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the create_default command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-create-default",
+ "markdownDescription": "Denies the create_default command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the get command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-get",
+ "markdownDescription": "Denies the get command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the insert command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-insert",
+ "markdownDescription": "Denies the insert command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_checked command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-is-checked",
+ "markdownDescription": "Denies the is_checked command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-is-enabled",
+ "markdownDescription": "Denies the is_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the items command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-items",
+ "markdownDescription": "Denies the items command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-new",
+ "markdownDescription": "Denies the new command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the popup command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-popup",
+ "markdownDescription": "Denies the popup command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the prepend command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-prepend",
+ "markdownDescription": "Denies the prepend command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-remove",
+ "markdownDescription": "Denies the remove command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove_at command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-remove-at",
+ "markdownDescription": "Denies the remove_at command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_accelerator command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-accelerator",
+ "markdownDescription": "Denies the set_accelerator command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_as_app_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-as-app-menu",
+ "markdownDescription": "Denies the set_as_app_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-as-help-menu-for-nsapp",
+ "markdownDescription": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_as_window_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-as-window-menu",
+ "markdownDescription": "Denies the set_as_window_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-as-windows-menu-for-nsapp",
+ "markdownDescription": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_checked command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-checked",
+ "markdownDescription": "Denies the set_checked command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-enabled",
+ "markdownDescription": "Denies the set_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-icon",
+ "markdownDescription": "Denies the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_text command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-set-text",
+ "markdownDescription": "Denies the set_text command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the text command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:menu:deny-text",
+ "markdownDescription": "Denies the text command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`",
+ "type": "string",
+ "const": "core:path:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-resolve-directory`\n- `allow-resolve`\n- `allow-normalize`\n- `allow-join`\n- `allow-dirname`\n- `allow-extname`\n- `allow-basename`\n- `allow-is-absolute`"
+ },
+ {
+ "description": "Enables the basename command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-basename",
+ "markdownDescription": "Enables the basename command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the dirname command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-dirname",
+ "markdownDescription": "Enables the dirname command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the extname command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-extname",
+ "markdownDescription": "Enables the extname command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_absolute command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-is-absolute",
+ "markdownDescription": "Enables the is_absolute command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the join command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-join",
+ "markdownDescription": "Enables the join command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the normalize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-normalize",
+ "markdownDescription": "Enables the normalize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the resolve command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-resolve",
+ "markdownDescription": "Enables the resolve command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the resolve_directory command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:allow-resolve-directory",
+ "markdownDescription": "Enables the resolve_directory command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the basename command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-basename",
+ "markdownDescription": "Denies the basename command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the dirname command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-dirname",
+ "markdownDescription": "Denies the dirname command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the extname command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-extname",
+ "markdownDescription": "Denies the extname command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_absolute command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-is-absolute",
+ "markdownDescription": "Denies the is_absolute command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the join command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-join",
+ "markdownDescription": "Denies the join command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the normalize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-normalize",
+ "markdownDescription": "Denies the normalize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the resolve command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-resolve",
+ "markdownDescription": "Denies the resolve command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the resolve_directory command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:path:deny-resolve-directory",
+ "markdownDescription": "Denies the resolve_directory command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`",
+ "type": "string",
+ "const": "core:resources:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-close`"
+ },
+ {
+ "description": "Enables the close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:resources:allow-close",
+ "markdownDescription": "Enables the close command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:resources:deny-close",
+ "markdownDescription": "Denies the close command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-icon-with-as-template`\n- `allow-set-show-menu-on-left-click`",
+ "type": "string",
+ "const": "core:tray:default",
+ "markdownDescription": "Default permissions for the plugin, which enables all commands.\n#### This default permission set includes:\n\n- `allow-new`\n- `allow-get-by-id`\n- `allow-remove-by-id`\n- `allow-set-icon`\n- `allow-set-menu`\n- `allow-set-tooltip`\n- `allow-set-title`\n- `allow-set-visible`\n- `allow-set-temp-dir-path`\n- `allow-set-icon-as-template`\n- `allow-set-icon-with-as-template`\n- `allow-set-show-menu-on-left-click`"
+ },
+ {
+ "description": "Enables the get_by_id command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-get-by-id",
+ "markdownDescription": "Enables the get_by_id command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-new",
+ "markdownDescription": "Enables the new command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the remove_by_id command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-remove-by-id",
+ "markdownDescription": "Enables the remove_by_id command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-icon",
+ "markdownDescription": "Enables the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon_as_template command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-icon-as-template",
+ "markdownDescription": "Enables the set_icon_as_template command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon_with_as_template command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-icon-with-as-template",
+ "markdownDescription": "Enables the set_icon_with_as_template command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-menu",
+ "markdownDescription": "Enables the set_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-show-menu-on-left-click",
+ "markdownDescription": "Enables the set_show_menu_on_left_click command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_temp_dir_path command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-temp-dir-path",
+ "markdownDescription": "Enables the set_temp_dir_path command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-title",
+ "markdownDescription": "Enables the set_title command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_tooltip command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-tooltip",
+ "markdownDescription": "Enables the set_tooltip command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:allow-set-visible",
+ "markdownDescription": "Enables the set_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the get_by_id command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-get-by-id",
+ "markdownDescription": "Denies the get_by_id command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the new command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-new",
+ "markdownDescription": "Denies the new command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the remove_by_id command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-remove-by-id",
+ "markdownDescription": "Denies the remove_by_id command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-icon",
+ "markdownDescription": "Denies the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon_as_template command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-icon-as-template",
+ "markdownDescription": "Denies the set_icon_as_template command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon_with_as_template command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-icon-with-as-template",
+ "markdownDescription": "Denies the set_icon_with_as_template command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_menu command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-menu",
+ "markdownDescription": "Denies the set_menu command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-show-menu-on-left-click",
+ "markdownDescription": "Denies the set_show_menu_on_left_click command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_temp_dir_path command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-temp-dir-path",
+ "markdownDescription": "Denies the set_temp_dir_path command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-title",
+ "markdownDescription": "Denies the set_title command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_tooltip command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-tooltip",
+ "markdownDescription": "Denies the set_tooltip command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:tray:deny-set-visible",
+ "markdownDescription": "Denies the set_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`",
+ "type": "string",
+ "const": "core:webview:default",
+ "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-webviews`\n- `allow-webview-position`\n- `allow-webview-size`\n- `allow-internal-toggle-devtools`"
+ },
+ {
+ "description": "Enables the clear_all_browsing_data command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-clear-all-browsing-data",
+ "markdownDescription": "Enables the clear_all_browsing_data command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the create_webview command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-create-webview",
+ "markdownDescription": "Enables the create_webview command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the create_webview_window command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-create-webview-window",
+ "markdownDescription": "Enables the create_webview_window command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the get_all_webviews command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-get-all-webviews",
+ "markdownDescription": "Enables the get_all_webviews command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the internal_toggle_devtools command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-internal-toggle-devtools",
+ "markdownDescription": "Enables the internal_toggle_devtools command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the print command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-print",
+ "markdownDescription": "Enables the print command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the reparent command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-reparent",
+ "markdownDescription": "Enables the reparent command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_auto_resize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-auto-resize",
+ "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_background_color command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-background-color",
+ "markdownDescription": "Enables the set_webview_background_color command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_focus command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-focus",
+ "markdownDescription": "Enables the set_webview_focus command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-position",
+ "markdownDescription": "Enables the set_webview_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-size",
+ "markdownDescription": "Enables the set_webview_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_webview_zoom command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-set-webview-zoom",
+ "markdownDescription": "Enables the set_webview_zoom command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-close",
+ "markdownDescription": "Enables the webview_close command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-hide",
+ "markdownDescription": "Enables the webview_hide command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-position",
+ "markdownDescription": "Enables the webview_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-show",
+ "markdownDescription": "Enables the webview_show command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the webview_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:allow-webview-size",
+ "markdownDescription": "Enables the webview_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the clear_all_browsing_data command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-clear-all-browsing-data",
+ "markdownDescription": "Denies the clear_all_browsing_data command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the create_webview command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-create-webview",
+ "markdownDescription": "Denies the create_webview command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the create_webview_window command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-create-webview-window",
+ "markdownDescription": "Denies the create_webview_window command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the get_all_webviews command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-get-all-webviews",
+ "markdownDescription": "Denies the get_all_webviews command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the internal_toggle_devtools command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-internal-toggle-devtools",
+ "markdownDescription": "Denies the internal_toggle_devtools command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the print command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-print",
+ "markdownDescription": "Denies the print command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the reparent command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-reparent",
+ "markdownDescription": "Denies the reparent command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_auto_resize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-auto-resize",
+ "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_background_color command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-background-color",
+ "markdownDescription": "Denies the set_webview_background_color command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_focus command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-focus",
+ "markdownDescription": "Denies the set_webview_focus command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-position",
+ "markdownDescription": "Denies the set_webview_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-size",
+ "markdownDescription": "Denies the set_webview_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_webview_zoom command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-set-webview-zoom",
+ "markdownDescription": "Denies the set_webview_zoom command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-close",
+ "markdownDescription": "Denies the webview_close command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-hide",
+ "markdownDescription": "Denies the webview_hide command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-position",
+ "markdownDescription": "Denies the webview_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-show",
+ "markdownDescription": "Denies the webview_show command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the webview_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:webview:deny-webview-size",
+ "markdownDescription": "Denies the webview_size command without any pre-configured scope."
+ },
+ {
+ "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-activity-name`\n- `allow-scene-identifier`\n- `allow-internal-toggle-maximize`",
+ "type": "string",
+ "const": "core:window:default",
+ "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-get-all-windows`\n- `allow-scale-factor`\n- `allow-inner-position`\n- `allow-outer-position`\n- `allow-inner-size`\n- `allow-outer-size`\n- `allow-is-fullscreen`\n- `allow-is-minimized`\n- `allow-is-maximized`\n- `allow-is-focused`\n- `allow-is-decorated`\n- `allow-is-resizable`\n- `allow-is-maximizable`\n- `allow-is-minimizable`\n- `allow-is-closable`\n- `allow-is-visible`\n- `allow-is-enabled`\n- `allow-title`\n- `allow-current-monitor`\n- `allow-primary-monitor`\n- `allow-monitor-from-point`\n- `allow-available-monitors`\n- `allow-cursor-position`\n- `allow-theme`\n- `allow-is-always-on-top`\n- `allow-activity-name`\n- `allow-scene-identifier`\n- `allow-internal-toggle-maximize`"
+ },
+ {
+ "description": "Enables the activity_name command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-activity-name",
+ "markdownDescription": "Enables the activity_name command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the available_monitors command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-available-monitors",
+ "markdownDescription": "Enables the available_monitors command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the center command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-center",
+ "markdownDescription": "Enables the center command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-close",
+ "markdownDescription": "Enables the close command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the create command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-create",
+ "markdownDescription": "Enables the create command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the current_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-current-monitor",
+ "markdownDescription": "Enables the current_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the cursor_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-cursor-position",
+ "markdownDescription": "Enables the cursor_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the destroy command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-destroy",
+ "markdownDescription": "Enables the destroy command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the get_all_windows command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-get-all-windows",
+ "markdownDescription": "Enables the get_all_windows command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-hide",
+ "markdownDescription": "Enables the hide command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the inner_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-inner-position",
+ "markdownDescription": "Enables the inner_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the inner_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-inner-size",
+ "markdownDescription": "Enables the inner_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the internal_toggle_maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-internal-toggle-maximize",
+ "markdownDescription": "Enables the internal_toggle_maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_always_on_top command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-always-on-top",
+ "markdownDescription": "Enables the is_always_on_top command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_closable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-closable",
+ "markdownDescription": "Enables the is_closable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_decorated command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-decorated",
+ "markdownDescription": "Enables the is_decorated command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-enabled",
+ "markdownDescription": "Enables the is_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_focused command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-focused",
+ "markdownDescription": "Enables the is_focused command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-fullscreen",
+ "markdownDescription": "Enables the is_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_maximizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-maximizable",
+ "markdownDescription": "Enables the is_maximizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_maximized command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-maximized",
+ "markdownDescription": "Enables the is_maximized command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_minimizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-minimizable",
+ "markdownDescription": "Enables the is_minimizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_minimized command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-minimized",
+ "markdownDescription": "Enables the is_minimized command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_resizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-resizable",
+ "markdownDescription": "Enables the is_resizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the is_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-is-visible",
+ "markdownDescription": "Enables the is_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-maximize",
+ "markdownDescription": "Enables the maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the minimize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-minimize",
+ "markdownDescription": "Enables the minimize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the monitor_from_point command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-monitor-from-point",
+ "markdownDescription": "Enables the monitor_from_point command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the outer_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-outer-position",
+ "markdownDescription": "Enables the outer_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the outer_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-outer-size",
+ "markdownDescription": "Enables the outer_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the primary_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-primary-monitor",
+ "markdownDescription": "Enables the primary_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the request_user_attention command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-request-user-attention",
+ "markdownDescription": "Enables the request_user_attention command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the scale_factor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-scale-factor",
+ "markdownDescription": "Enables the scale_factor command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the scene_identifier command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-scene-identifier",
+ "markdownDescription": "Enables the scene_identifier command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_always_on_bottom command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-always-on-bottom",
+ "markdownDescription": "Enables the set_always_on_bottom command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_always_on_top command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-always-on-top",
+ "markdownDescription": "Enables the set_always_on_top command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_background_color command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-background-color",
+ "markdownDescription": "Enables the set_background_color command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_badge_count command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-badge-count",
+ "markdownDescription": "Enables the set_badge_count command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_badge_label command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-badge-label",
+ "markdownDescription": "Enables the set_badge_label command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_closable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-closable",
+ "markdownDescription": "Enables the set_closable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_content_protected command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-content-protected",
+ "markdownDescription": "Enables the set_content_protected command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_cursor_grab command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-cursor-grab",
+ "markdownDescription": "Enables the set_cursor_grab command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_cursor_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-cursor-icon",
+ "markdownDescription": "Enables the set_cursor_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_cursor_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-cursor-position",
+ "markdownDescription": "Enables the set_cursor_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_cursor_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-cursor-visible",
+ "markdownDescription": "Enables the set_cursor_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_decorations command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-decorations",
+ "markdownDescription": "Enables the set_decorations command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_effects command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-effects",
+ "markdownDescription": "Enables the set_effects command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-enabled",
+ "markdownDescription": "Enables the set_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_focus command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-focus",
+ "markdownDescription": "Enables the set_focus command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_focusable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-focusable",
+ "markdownDescription": "Enables the set_focusable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-fullscreen",
+ "markdownDescription": "Enables the set_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_fullscreen_on_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-fullscreen-on-monitor",
+ "markdownDescription": "Enables the set_fullscreen_on_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-icon",
+ "markdownDescription": "Enables the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-ignore-cursor-events",
+ "markdownDescription": "Enables the set_ignore_cursor_events command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_max_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-max-size",
+ "markdownDescription": "Enables the set_max_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_maximizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-maximizable",
+ "markdownDescription": "Enables the set_maximizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_min_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-min-size",
+ "markdownDescription": "Enables the set_min_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_minimizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-minimizable",
+ "markdownDescription": "Enables the set_minimizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_overlay_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-overlay-icon",
+ "markdownDescription": "Enables the set_overlay_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-position",
+ "markdownDescription": "Enables the set_position command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_progress_bar command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-progress-bar",
+ "markdownDescription": "Enables the set_progress_bar command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_resizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-resizable",
+ "markdownDescription": "Enables the set_resizable command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_shadow command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-shadow",
+ "markdownDescription": "Enables the set_shadow command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_simple_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-simple-fullscreen",
+ "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-size",
+ "markdownDescription": "Enables the set_size command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_size_constraints command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-size-constraints",
+ "markdownDescription": "Enables the set_size_constraints command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_skip_taskbar command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-skip-taskbar",
+ "markdownDescription": "Enables the set_skip_taskbar command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-theme",
+ "markdownDescription": "Enables the set_theme command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-title",
+ "markdownDescription": "Enables the set_title command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_title_bar_style command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-title-bar-style",
+ "markdownDescription": "Enables the set_title_bar_style command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-set-visible-on-all-workspaces",
+ "markdownDescription": "Enables the set_visible_on_all_workspaces command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-show",
+ "markdownDescription": "Enables the show command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the start_dragging command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-start-dragging",
+ "markdownDescription": "Enables the start_dragging command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the start_resize_dragging command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-start-resize-dragging",
+ "markdownDescription": "Enables the start_resize_dragging command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-theme",
+ "markdownDescription": "Enables the theme command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-title",
+ "markdownDescription": "Enables the title command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the toggle_maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-toggle-maximize",
+ "markdownDescription": "Enables the toggle_maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the unmaximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-unmaximize",
+ "markdownDescription": "Enables the unmaximize command without any pre-configured scope."
+ },
+ {
+ "description": "Enables the unminimize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:allow-unminimize",
+ "markdownDescription": "Enables the unminimize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the activity_name command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-activity-name",
+ "markdownDescription": "Denies the activity_name command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the available_monitors command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-available-monitors",
+ "markdownDescription": "Denies the available_monitors command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the center command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-center",
+ "markdownDescription": "Denies the center command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the close command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-close",
+ "markdownDescription": "Denies the close command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the create command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-create",
+ "markdownDescription": "Denies the create command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the current_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-current-monitor",
+ "markdownDescription": "Denies the current_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the cursor_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-cursor-position",
+ "markdownDescription": "Denies the cursor_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the destroy command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-destroy",
+ "markdownDescription": "Denies the destroy command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the get_all_windows command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-get-all-windows",
+ "markdownDescription": "Denies the get_all_windows command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the hide command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-hide",
+ "markdownDescription": "Denies the hide command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the inner_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-inner-position",
+ "markdownDescription": "Denies the inner_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the inner_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-inner-size",
+ "markdownDescription": "Denies the inner_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the internal_toggle_maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-internal-toggle-maximize",
+ "markdownDescription": "Denies the internal_toggle_maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_always_on_top command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-always-on-top",
+ "markdownDescription": "Denies the is_always_on_top command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_closable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-closable",
+ "markdownDescription": "Denies the is_closable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_decorated command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-decorated",
+ "markdownDescription": "Denies the is_decorated command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-enabled",
+ "markdownDescription": "Denies the is_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_focused command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-focused",
+ "markdownDescription": "Denies the is_focused command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-fullscreen",
+ "markdownDescription": "Denies the is_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_maximizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-maximizable",
+ "markdownDescription": "Denies the is_maximizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_maximized command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-maximized",
+ "markdownDescription": "Denies the is_maximized command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_minimizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-minimizable",
+ "markdownDescription": "Denies the is_minimizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_minimized command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-minimized",
+ "markdownDescription": "Denies the is_minimized command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_resizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-resizable",
+ "markdownDescription": "Denies the is_resizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the is_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-is-visible",
+ "markdownDescription": "Denies the is_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-maximize",
+ "markdownDescription": "Denies the maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the minimize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-minimize",
+ "markdownDescription": "Denies the minimize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the monitor_from_point command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-monitor-from-point",
+ "markdownDescription": "Denies the monitor_from_point command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the outer_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-outer-position",
+ "markdownDescription": "Denies the outer_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the outer_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-outer-size",
+ "markdownDescription": "Denies the outer_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the primary_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-primary-monitor",
+ "markdownDescription": "Denies the primary_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the request_user_attention command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-request-user-attention",
+ "markdownDescription": "Denies the request_user_attention command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the scale_factor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-scale-factor",
+ "markdownDescription": "Denies the scale_factor command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the scene_identifier command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-scene-identifier",
+ "markdownDescription": "Denies the scene_identifier command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_always_on_bottom command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-always-on-bottom",
+ "markdownDescription": "Denies the set_always_on_bottom command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_always_on_top command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-always-on-top",
+ "markdownDescription": "Denies the set_always_on_top command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_background_color command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-background-color",
+ "markdownDescription": "Denies the set_background_color command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_badge_count command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-badge-count",
+ "markdownDescription": "Denies the set_badge_count command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_badge_label command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-badge-label",
+ "markdownDescription": "Denies the set_badge_label command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_closable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-closable",
+ "markdownDescription": "Denies the set_closable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_content_protected command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-content-protected",
+ "markdownDescription": "Denies the set_content_protected command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_cursor_grab command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-cursor-grab",
+ "markdownDescription": "Denies the set_cursor_grab command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_cursor_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-cursor-icon",
+ "markdownDescription": "Denies the set_cursor_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_cursor_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-cursor-position",
+ "markdownDescription": "Denies the set_cursor_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_cursor_visible command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-cursor-visible",
+ "markdownDescription": "Denies the set_cursor_visible command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_decorations command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-decorations",
+ "markdownDescription": "Denies the set_decorations command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_effects command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-effects",
+ "markdownDescription": "Denies the set_effects command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_enabled command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-enabled",
+ "markdownDescription": "Denies the set_enabled command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_focus command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-focus",
+ "markdownDescription": "Denies the set_focus command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_focusable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-focusable",
+ "markdownDescription": "Denies the set_focusable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-fullscreen",
+ "markdownDescription": "Denies the set_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_fullscreen_on_monitor command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-fullscreen-on-monitor",
+ "markdownDescription": "Denies the set_fullscreen_on_monitor command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-icon",
+ "markdownDescription": "Denies the set_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-ignore-cursor-events",
+ "markdownDescription": "Denies the set_ignore_cursor_events command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_max_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-max-size",
+ "markdownDescription": "Denies the set_max_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_maximizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-maximizable",
+ "markdownDescription": "Denies the set_maximizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_min_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-min-size",
+ "markdownDescription": "Denies the set_min_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_minimizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-minimizable",
+ "markdownDescription": "Denies the set_minimizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_overlay_icon command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-overlay-icon",
+ "markdownDescription": "Denies the set_overlay_icon command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_position command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-position",
+ "markdownDescription": "Denies the set_position command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_progress_bar command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-progress-bar",
+ "markdownDescription": "Denies the set_progress_bar command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_resizable command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-resizable",
+ "markdownDescription": "Denies the set_resizable command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_shadow command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-shadow",
+ "markdownDescription": "Denies the set_shadow command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_simple_fullscreen command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-simple-fullscreen",
+ "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_size command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-size",
+ "markdownDescription": "Denies the set_size command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_size_constraints command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-size-constraints",
+ "markdownDescription": "Denies the set_size_constraints command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_skip_taskbar command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-skip-taskbar",
+ "markdownDescription": "Denies the set_skip_taskbar command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-theme",
+ "markdownDescription": "Denies the set_theme command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-title",
+ "markdownDescription": "Denies the set_title command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_title_bar_style command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-title-bar-style",
+ "markdownDescription": "Denies the set_title_bar_style command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-set-visible-on-all-workspaces",
+ "markdownDescription": "Denies the set_visible_on_all_workspaces command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the show command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-show",
+ "markdownDescription": "Denies the show command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the start_dragging command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-start-dragging",
+ "markdownDescription": "Denies the start_dragging command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the start_resize_dragging command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-start-resize-dragging",
+ "markdownDescription": "Denies the start_resize_dragging command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the theme command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-theme",
+ "markdownDescription": "Denies the theme command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the title command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-title",
+ "markdownDescription": "Denies the title command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the toggle_maximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-toggle-maximize",
+ "markdownDescription": "Denies the toggle_maximize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the unmaximize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-unmaximize",
+ "markdownDescription": "Denies the unmaximize command without any pre-configured scope."
+ },
+ {
+ "description": "Denies the unminimize command without any pre-configured scope.",
+ "type": "string",
+ "const": "core:window:deny-unminimize",
+ "markdownDescription": "Denies the unminimize command without any pre-configured scope."
+ }
+ ]
+ },
+ "Value": {
+ "description": "All supported ACL values.",
+ "anyOf": [
+ {
+ "description": "Represents a null JSON value.",
+ "type": "null"
+ },
+ {
+ "description": "Represents a [`bool`].",
+ "type": "boolean"
+ },
+ {
+ "description": "Represents a valid ACL [`Number`].",
+ "allOf": [
+ {
+ "$ref": "#/definitions/Number"
+ }
+ ]
+ },
+ {
+ "description": "Represents a [`String`].",
+ "type": "string"
+ },
+ {
+ "description": "Represents a list of other [`Value`]s.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Value"
+ }
+ },
+ {
+ "description": "Represents a map of [`String`] keys to [`Value`]s.",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/Value"
+ }
+ }
+ ]
+ },
+ "Number": {
+ "description": "A valid ACL number.",
+ "anyOf": [
+ {
+ "description": "Represents an [`i64`].",
+ "type": "integer",
+ "format": "int64"
+ },
+ {
+ "description": "Represents a [`f64`].",
+ "type": "number",
+ "format": "double"
+ }
+ ]
+ },
+ "Target": {
+ "description": "Platform target.",
+ "oneOf": [
+ {
+ "description": "MacOS.",
+ "type": "string",
+ "enum": [
+ "macOS"
+ ]
+ },
+ {
+ "description": "Windows.",
+ "type": "string",
+ "enum": [
+ "windows"
+ ]
+ },
+ {
+ "description": "Linux.",
+ "type": "string",
+ "enum": [
+ "linux"
+ ]
+ },
+ {
+ "description": "Android.",
+ "type": "string",
+ "enum": [
+ "android"
+ ]
+ },
+ {
+ "description": "iOS.",
+ "type": "string",
+ "enum": [
+ "iOS"
+ ]
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/harnesses/gtauri/icons/128x128.png b/harnesses/gtauri/icons/128x128.png
new file mode 100644
index 0000000..b0aae3c
Binary files /dev/null and b/harnesses/gtauri/icons/128x128.png differ
diff --git a/harnesses/gtauri/icons/128x128@2x.png b/harnesses/gtauri/icons/128x128@2x.png
new file mode 100644
index 0000000..6b193a1
Binary files /dev/null and b/harnesses/gtauri/icons/128x128@2x.png differ
diff --git a/harnesses/gtauri/icons/32x32.png b/harnesses/gtauri/icons/32x32.png
new file mode 100644
index 0000000..29f2677
Binary files /dev/null and b/harnesses/gtauri/icons/32x32.png differ
diff --git a/harnesses/gtauri/icons/64x64.png b/harnesses/gtauri/icons/64x64.png
new file mode 100644
index 0000000..d6b3b1f
Binary files /dev/null and b/harnesses/gtauri/icons/64x64.png differ
diff --git a/harnesses/gtauri/icons/Square107x107Logo.png b/harnesses/gtauri/icons/Square107x107Logo.png
new file mode 100644
index 0000000..97ca18a
Binary files /dev/null and b/harnesses/gtauri/icons/Square107x107Logo.png differ
diff --git a/harnesses/gtauri/icons/Square142x142Logo.png b/harnesses/gtauri/icons/Square142x142Logo.png
new file mode 100644
index 0000000..45e933c
Binary files /dev/null and b/harnesses/gtauri/icons/Square142x142Logo.png differ
diff --git a/harnesses/gtauri/icons/Square150x150Logo.png b/harnesses/gtauri/icons/Square150x150Logo.png
new file mode 100644
index 0000000..569cb2f
Binary files /dev/null and b/harnesses/gtauri/icons/Square150x150Logo.png differ
diff --git a/harnesses/gtauri/icons/Square284x284Logo.png b/harnesses/gtauri/icons/Square284x284Logo.png
new file mode 100644
index 0000000..e0dbf3b
Binary files /dev/null and b/harnesses/gtauri/icons/Square284x284Logo.png differ
diff --git a/harnesses/gtauri/icons/Square30x30Logo.png b/harnesses/gtauri/icons/Square30x30Logo.png
new file mode 100644
index 0000000..2f01aa2
Binary files /dev/null and b/harnesses/gtauri/icons/Square30x30Logo.png differ
diff --git a/harnesses/gtauri/icons/Square310x310Logo.png b/harnesses/gtauri/icons/Square310x310Logo.png
new file mode 100644
index 0000000..70f8fe3
Binary files /dev/null and b/harnesses/gtauri/icons/Square310x310Logo.png differ
diff --git a/harnesses/gtauri/icons/Square44x44Logo.png b/harnesses/gtauri/icons/Square44x44Logo.png
new file mode 100644
index 0000000..c11a45f
Binary files /dev/null and b/harnesses/gtauri/icons/Square44x44Logo.png differ
diff --git a/harnesses/gtauri/icons/Square71x71Logo.png b/harnesses/gtauri/icons/Square71x71Logo.png
new file mode 100644
index 0000000..8a688df
Binary files /dev/null and b/harnesses/gtauri/icons/Square71x71Logo.png differ
diff --git a/harnesses/gtauri/icons/Square89x89Logo.png b/harnesses/gtauri/icons/Square89x89Logo.png
new file mode 100644
index 0000000..116b2dd
Binary files /dev/null and b/harnesses/gtauri/icons/Square89x89Logo.png differ
diff --git a/harnesses/gtauri/icons/StoreLogo.png b/harnesses/gtauri/icons/StoreLogo.png
new file mode 100644
index 0000000..7c6845d
Binary files /dev/null and b/harnesses/gtauri/icons/StoreLogo.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml b/harnesses/gtauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..2ffbf24
--- /dev/null
+++ b/harnesses/gtauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher.png b/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..3565539
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png b/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..a67fddf
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher_round.png b/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..61469b6
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher.png b/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..3e7bb90
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png b/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..0a7835c
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher_round.png b/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..2516401
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher.png b/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..de8fd2f
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png b/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..d95ab6c
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher_round.png b/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..78e7dc4
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher.png b/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..3c610bd
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png b/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..67d45b1
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png b/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..5a72997
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher.png b/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..08d0e59
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 0000000..5186b10
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..92be653
Binary files /dev/null and b/harnesses/gtauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/harnesses/gtauri/icons/android/values/ic_launcher_background.xml b/harnesses/gtauri/icons/android/values/ic_launcher_background.xml
new file mode 100644
index 0000000..16cdd5a
--- /dev/null
+++ b/harnesses/gtauri/icons/android/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+
+
+ #FFFFFF
+
\ No newline at end of file
diff --git a/harnesses/gtauri/icons/icon.icns b/harnesses/gtauri/icons/icon.icns
new file mode 100644
index 0000000..8526c17
Binary files /dev/null and b/harnesses/gtauri/icons/icon.icns differ
diff --git a/harnesses/gtauri/icons/icon.ico b/harnesses/gtauri/icons/icon.ico
new file mode 100644
index 0000000..29e9149
Binary files /dev/null and b/harnesses/gtauri/icons/icon.ico differ
diff --git a/harnesses/gtauri/icons/icon.png b/harnesses/gtauri/icons/icon.png
new file mode 100644
index 0000000..5cfd7e6
Binary files /dev/null and b/harnesses/gtauri/icons/icon.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-20x20@1x.png b/harnesses/gtauri/icons/ios/AppIcon-20x20@1x.png
new file mode 100644
index 0000000..7d825ac
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-20x20@1x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-20x20@2x-1.png b/harnesses/gtauri/icons/ios/AppIcon-20x20@2x-1.png
new file mode 100644
index 0000000..bfdd5d8
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-20x20@2x-1.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-20x20@2x.png b/harnesses/gtauri/icons/ios/AppIcon-20x20@2x.png
new file mode 100644
index 0000000..bfdd5d8
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-20x20@2x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-20x20@3x.png b/harnesses/gtauri/icons/ios/AppIcon-20x20@3x.png
new file mode 100644
index 0000000..ce2783f
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-20x20@3x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-29x29@1x.png b/harnesses/gtauri/icons/ios/AppIcon-29x29@1x.png
new file mode 100644
index 0000000..f6faebf
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-29x29@1x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-29x29@2x-1.png b/harnesses/gtauri/icons/ios/AppIcon-29x29@2x-1.png
new file mode 100644
index 0000000..c9f2b12
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-29x29@2x-1.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-29x29@2x.png b/harnesses/gtauri/icons/ios/AppIcon-29x29@2x.png
new file mode 100644
index 0000000..c9f2b12
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-29x29@2x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-29x29@3x.png b/harnesses/gtauri/icons/ios/AppIcon-29x29@3x.png
new file mode 100644
index 0000000..4759be0
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-29x29@3x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-40x40@1x.png b/harnesses/gtauri/icons/ios/AppIcon-40x40@1x.png
new file mode 100644
index 0000000..bfdd5d8
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-40x40@1x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-40x40@2x-1.png b/harnesses/gtauri/icons/ios/AppIcon-40x40@2x-1.png
new file mode 100644
index 0000000..b3952b4
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-40x40@2x-1.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-40x40@2x.png b/harnesses/gtauri/icons/ios/AppIcon-40x40@2x.png
new file mode 100644
index 0000000..b3952b4
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-40x40@2x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-40x40@3x.png b/harnesses/gtauri/icons/ios/AppIcon-40x40@3x.png
new file mode 100644
index 0000000..54ff85b
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-40x40@3x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-512@2x.png b/harnesses/gtauri/icons/ios/AppIcon-512@2x.png
new file mode 100644
index 0000000..2a706ad
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-512@2x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-60x60@2x.png b/harnesses/gtauri/icons/ios/AppIcon-60x60@2x.png
new file mode 100644
index 0000000..54ff85b
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-60x60@2x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-60x60@3x.png b/harnesses/gtauri/icons/ios/AppIcon-60x60@3x.png
new file mode 100644
index 0000000..4acaafa
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-60x60@3x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-76x76@1x.png b/harnesses/gtauri/icons/ios/AppIcon-76x76@1x.png
new file mode 100644
index 0000000..627ff6e
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-76x76@1x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-76x76@2x.png b/harnesses/gtauri/icons/ios/AppIcon-76x76@2x.png
new file mode 100644
index 0000000..907df45
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-76x76@2x.png differ
diff --git a/harnesses/gtauri/icons/ios/AppIcon-83.5x83.5@2x.png b/harnesses/gtauri/icons/ios/AppIcon-83.5x83.5@2x.png
new file mode 100644
index 0000000..b84968c
Binary files /dev/null and b/harnesses/gtauri/icons/ios/AppIcon-83.5x83.5@2x.png differ
diff --git a/harnesses/gtauri/scripts/build.sh b/harnesses/gtauri/scripts/build.sh
new file mode 100755
index 0000000..d8c3e85
--- /dev/null
+++ b/harnesses/gtauri/scripts/build.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+# gtauri build: Tauri v2 scroll-jank testbed (sltest port).
+#
+# ./scripts/build.sh # aarch64 (phone)
+# ./scripts/build.sh x86_64 # emulator
+# ADB_SERIAL= ./scripts/build.sh # install target
+#
+# Output: /tmp/gtauri/-release.apk (signed with the debug keystore).
+set -euo pipefail
+cd "$(dirname "$0")/.."
+
+ABI="${1:-aarch64}"
+case "$ABI" in
+ aarch64|x86_64|armv7|i686) ;;
+ *) echo "unknown ABI: $ABI" >&2; exit 2 ;;
+esac
+
+export ANDROID_HOME="${ANDROID_HOME:-$HOME/android-sdk}"
+export ANDROID_SDK_ROOT="$ANDROID_HOME"
+
+cargo tauri android build --target "$ABI"
+
+SRC=gen/android/app/build/outputs/apk/universal/release/app-universal-release-unsigned.apk
+[ -f "$SRC" ] || { echo "APK not found at $SRC" >&2; exit 1; }
+
+OUT=/tmp/gtauri
+mkdir -p "$OUT"
+cp "$SRC" "$OUT/gtauri-$ABI-unsigned.apk"
+
+KEYSTORE="${KEYSTORE:-$HOME/.android/debug.keystore}"
+APKSIGNER="$ANDROID_HOME/build-tools/35.0.0/apksigner"
+"$APKSIGNER" sign --ks "$KEYSTORE" --ks-key-alias androiddebugkey \
+ --ks-pass pass:android --key-pass pass:android \
+ --out "$OUT/gtauri-$ABI-release.apk" "$OUT/gtauri-$ABI-unsigned.apk"
+echo "APK: $OUT/gtauri-$ABI-release.apk ($(du -h "$OUT/gtauri-$ABI-release.apk" | cut -f1))"
+
+if [ -n "${ADB_SERIAL:-}" ]; then
+ adb -s "$ADB_SERIAL" install -r "$OUT/gtauri-$ABI-release.apk"
+ adb -s "$ADB_SERIAL" shell am force-stop wow.gmp.gtauri
+ adb -s "$ADB_SERIAL" shell am start -n wow.gmp.gtauri/.MainActivity
+fi
diff --git a/harnesses/gtauri/scripts/cargo-shim b/harnesses/gtauri/scripts/cargo-shim
new file mode 100755
index 0000000..76f615e
--- /dev/null
+++ b/harnesses/gtauri/scripts/cargo-shim
@@ -0,0 +1,76 @@
+#!/usr/bin/env bash
+# cargo shim: intercept `cargo tauri android android-studio-script` (the
+# hidden subcommand the tauri gradle plugin's rustBuild task runs) and
+# reproduce its effect with a PLAIN cargo build.
+#
+# Why: the cargo-tauri CLI (every subcommand that builds a Rust interface)
+# starts an inotify debouncer on Cargo.toml. This host's per-user inotify
+# WATCH quota (65536) is exhausted by the user's standalone syncthing
+# (65,482 watches), so inotify_add_watch → ENOSPC and the CLI dies before
+# doing anything. Plain cargo build uses no inotify.
+#
+# android-studio-script's output (verified on the tttest build): the lib .so
+# placed at gen/android/app/src/main/jniLibs//lib.so.
+set -euo pipefail
+
+REAL_CARGO="$HOME/.cargo/bin/cargo"
+PROJ=/mnt/Backup/prog/android/gallery/harnesses/gtauri
+NDK="$HOME/android-sdk/ndk/27.0.12077973"
+
+if [ "${1:-}" = "tauri" ] && [ "${2:-}" = "android" ] && [ "${3:-}" = "android-studio-script" ]; then
+ shift 3
+ release="" ; target="x86_64"
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ --release) release=1 ;;
+ --target) shift; target="${1:-x86_64}" ;;
+ esac
+ shift
+ done
+
+ case "$target" in
+ x86_64) TRIPLE=x86_64-linux-android; ABI_DIR=x86_64; CLANG=x86_64-linux-android24-clang ;;
+ aarch64) TRIPLE=aarch64-linux-android; ABI_DIR=arm64-v8a; CLANG=aarch64-linux-android24-clang ;;
+ armv7) TRIPLE=armv7-linux-androideabi; ABI_DIR=armeabi-v7a; CLANG=armv7a-linux-androideabi24-clang ;;
+ i686) TRIPLE=i686-linux-android; ABI_DIR=x86; CLANG=i686-linux-android24-clang ;;
+ *) echo "shim: unknown target $target" >&2; exit 1 ;;
+ esac
+ prof="debug"; [ -n "$release" ] && prof="release"
+
+ echo "gtauri shim: cargo build $TRIPLE $prof (bypassing cargo-tauri)"
+ # env var names are CARGO_TARGET__... with HYPHENS → UNDERSCORES
+ UPPER=$(echo "$TRIPLE" | tr 'a-z-' 'A-Z_')
+ # cc crate (libsqlite3-sys bundled, turbojpeg cmake) wants CC_
+ LOWER=$(echo "$UPPER" | tr 'A-Z' 'a-z')
+ NDK_BIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin
+ case "$target" in x86_64) ABI=x86_64 ;; aarch64) ABI=arm64-v8a ;; armv7) ABI=armeabi-v7a ;; i686) ABI=x86 ;; esac
+ CCNAME=$CLANG # any valid C compiler for the target; API level is moot for cc
+ env \
+ "CARGO_TARGET_${UPPER}_LINKER=$NDK_BIN/$CLANG" \
+ "CARGO_TARGET_${UPPER}_RUSTFLAGS=-Clink-arg=-landroid -Clink-arg=-llog -Clink-arg=-lOpenSLES" \
+ "CC_${LOWER}=$NDK_BIN/$CCNAME" \
+ "CXX_${LOWER}=$NDK_BIN/${CCNAME}++" \
+ "AR_${LOWER}=$NDK_BIN/llvm-ar" \
+ "CC=$NDK_BIN/$CCNAME" \
+ "CXX=$NDK_BIN/${CCNAME}++" \
+ "CMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake" \
+ "ANDROID_PLATFORM=android-26" \
+ "ANDROID_STL=c++_static" \
+ "ANDROID_ABI=$ABI" \
+ "TURBOJPEG_STATIC=1" \
+ "$REAL_CARGO" build --package gtauri --manifest-path "$PROJ/Cargo.toml" \
+ --target "$TRIPLE" --features "tauri/custom-protocol" --lib --"$prof"
+
+ SO="$PROJ/target/$TRIPLE/$prof/libgtauri_lib.so"
+ [ -f "$SO" ] || { echo "shim: $SO not produced" >&2; exit 1; }
+ DEST="$PROJ/gen/android/app/src/main/jniLibs/$ABI_DIR/libgtauri_lib.so"
+ mkdir -p "$(dirname "$DEST")"
+ # /mnt/Backup's stat identity is unreliable here (cp still reports
+ # "same file"), so just break any link and copy fresh:
+ rm -f "$DEST"
+ cp "$SO" "$DEST"
+ echo "gtauri shim: .so -> jniLibs/$ABI_DIR"
+ exit 0
+fi
+
+exec "$REAL_CARGO" "$@"
diff --git a/harnesses/gtauri/src/db.rs b/harnesses/gtauri/src/db.rs
new file mode 100644
index 0000000..68751b6
--- /dev/null
+++ b/harnesses/gtauri/src/db.rs
@@ -0,0 +1,246 @@
+//! SQLite metadata store (M1). Schema follows HANDOFF.md §4:
+//! one row per image; M1 fills `path/mtime/size`, the thumbnail engine (M2)
+//! fills `width/height/orientation/thumb_path`, `date_taken` later.
+
+use rusqlite::params;
+pub use rusqlite::Connection;
+use std::collections::{HashMap, HashSet};
+use std::path::PathBuf;
+
+use crate::scan::Entry;
+
+#[cfg(target_os = "android")]
+const ANDROID_PACKAGE: &str = "wow.gmp.gallery";
+
+/// App-writable data dir on Android. Prefers the per-app external dir
+/// (/storage/emulated/0/Android/data//files) so the DB is easy to
+/// inspect via `adb`; falls back to the internal files dir, which is always
+/// writable. Neither `EXTERNAL_DATA_DIR` (not set by this NativeActivity
+/// setup) nor `temp_dir()` (=/data/user/0, not writable) can be trusted.
+#[cfg(target_os = "android")]
+fn android_data_dir() -> PathBuf {
+ if let Some(ext) = std::env::var_os("EXTERNAL_DATA_DIR").map(PathBuf::from) {
+ if std::fs::create_dir_all(&ext).is_ok() {
+ return ext;
+ }
+ }
+ if let Some(storage) = std::env::var_os("EXTERNAL_STORAGE").map(PathBuf::from) {
+ let ext = storage
+ .join("Android/data")
+ .join(ANDROID_PACKAGE)
+ .join("files");
+ if std::fs::create_dir_all(&ext).is_ok() {
+ return ext;
+ }
+ }
+ PathBuf::from(format!("/data/data/{ANDROID_PACKAGE}/files"))
+}
+
+/// DB file lives in app-private storage:
+/// - Android: per-app external dir (see `android_data_dir`), internal fallback.
+/// - Desktop: $XDG_DATA_HOME/gallery (or ~/.local/share/gallery).
+pub fn db_path() -> PathBuf {
+ if let Ok(p) = std::env::var("GALLERY_DB_PATH") {
+ return PathBuf::from(p); // test hook
+ }
+ #[cfg(target_os = "android")]
+ let dir = android_data_dir();
+ #[cfg(not(target_os = "android"))]
+ let dir = {
+ let data_home = std::env::var_os("XDG_DATA_HOME").map(PathBuf::from);
+ let base = data_home.unwrap_or_else(|| {
+ let home = std::env::var_os("HOME").map(PathBuf::from).unwrap_or_default();
+ home.join(".local/share")
+ });
+ base.join("gallery")
+ };
+ dir.join("gallery.db")
+}
+
+pub fn open(path: &std::path::Path) -> Result {
+ let conn = Connection::open(path)?;
+ conn.pragma_update(None, "journal_mode", "WAL")?;
+ conn.execute_batch(
+ "CREATE TABLE IF NOT EXISTS items (
+ path TEXT PRIMARY KEY,
+ mtime INTEGER NOT NULL,
+ size INTEGER NOT NULL,
+ width INTEGER,
+ height INTEGER,
+ orientation INTEGER,
+ thumb_path TEXT,
+ date_taken INTEGER
+ );
+ CREATE INDEX IF NOT EXISTS items_mtime ON items (mtime DESC);",
+ )?;
+ Ok(conn)
+}
+
+/// Apply a full filesystem snapshot incrementally: insert new paths, refresh
+/// rows whose mtime/size changed, delete vanished ones.
+/// Returns (inserted, updated, deleted).
+pub fn apply(
+ conn: &mut Connection,
+ entries: &[Entry],
+) -> Result<(usize, usize, usize), rusqlite::Error> {
+ // Existing state: path -> (mtime, size)
+ let mut existing: HashMap = HashMap::with_capacity(entries.len());
+ {
+ let mut st = conn.prepare("SELECT path, mtime, size FROM items")?;
+ let rows = st.query_map([], |r| {
+ Ok((
+ r.get::<_, String>(0)?,
+ r.get::<_, i64>(1)?,
+ r.get::<_, i64>(2)?,
+ ))
+ })?;
+ for row in rows {
+ let (p, m, s) = row?;
+ existing.insert(p, (m, s));
+ }
+ }
+
+ let mut inserted = 0;
+ let mut updated = 0;
+ let mut deleted = 0;
+ let tx = conn.transaction()?;
+ {
+ let mut ins = tx.prepare(
+ "INSERT INTO items (path, mtime, size) VALUES (?1, ?2, ?3)",
+ )?;
+ // mtime/size changed → content changed → derived columns are stale.
+ let mut upd = tx.prepare(
+ "UPDATE items SET mtime = ?2, size = ?3, width = NULL, height = NULL, \
+ orientation = NULL, thumb_path = NULL, date_taken = NULL WHERE path = ?1",
+ )?;
+ let mut del = tx.prepare("DELETE FROM items WHERE path = ?1")?;
+
+ let mut seen = HashSet::with_capacity(entries.len());
+ for e in entries {
+ seen.insert(e.path.clone());
+ match existing.get(&e.path) {
+ Some(&(m, s)) if m == e.mtime && s == e.size => {}
+ Some(_) => {
+ upd.execute(params![e.path, e.mtime, e.size])?;
+ updated += 1;
+ }
+ None => {
+ ins.execute(params![e.path, e.mtime, e.size])?;
+ inserted += 1;
+ }
+ }
+ }
+ for p in existing.keys() {
+ if !seen.contains(p) {
+ del.execute(params![p])?;
+ deleted += 1;
+ }
+ }
+ }
+ tx.commit()?;
+ Ok((inserted, updated, deleted))
+}
+
+/// All known entries, newest first.
+pub fn list_entries(conn: &mut Connection) -> Result, rusqlite::Error> {
+ let mut st = conn.prepare("SELECT path, mtime, size FROM items ORDER BY mtime DESC, path ASC")?;
+ let rows = st.query_map([], |r| {
+ Ok(Entry { path: r.get(0)?, mtime: r.get(1)?, size: r.get(2)? })
+ })?;
+ let mut out = Vec::new();
+ for row in rows {
+ out.push(row?);
+ }
+ Ok(out)
+}
+
+/// Update the derived thumbnail columns once the pool has finished a job.
+pub fn set_thumb(
+ conn: &mut Connection,
+ path: &str,
+ width: i64,
+ height: i64,
+ orientation: i64,
+ thumb_path: &str,
+) -> Result<(), rusqlite::Error> {
+ conn.execute(
+ "UPDATE items SET width = ?2, height = ?3, orientation = ?4, thumb_path = ?5 \
+ WHERE path = ?1",
+ params![path, width, height, orientation, thumb_path],
+ )?;
+ Ok(())
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::scan::{walk, Entry};
+
+ fn entry(path: &str, mtime: i64, size: i64) -> Entry {
+ Entry { path: path.into(), mtime, size }
+ }
+
+ #[test]
+ fn incremental_apply() {
+ let dir = tempfile::tempdir().unwrap();
+ let mut conn = open(&dir.path().join("t.db")).unwrap();
+
+ let (i, u, d) = apply(&mut conn, &[entry("/a/1.jpg", 1, 10), entry("/a/2.jpg", 2, 20)]).unwrap();
+ assert_eq!((i, u, d), (2, 0, 0));
+
+ // No changes → no-op.
+ let (i, u, d) = apply(&mut conn, &[entry("/a/1.jpg", 1, 10), entry("/a/2.jpg", 2, 20)]).unwrap();
+ assert_eq!((i, u, d), (0, 0, 0));
+
+ // mtime changed → update; 3.jpg new; 2.jpg removed.
+ let (i, u, d) = apply(
+ &mut conn,
+ &[entry("/a/1.jpg", 5, 11), entry("/a/3.jpg", 3, 30)],
+ )
+ .unwrap();
+ assert_eq!((i, u, d), (1, 1, 1));
+
+ let list = list_entries(&mut conn).unwrap();
+ let paths: Vec<&str> = list.iter().map(|e| e.path.as_str()).collect();
+ assert_eq!(paths, vec!["/a/1.jpg", "/a/3.jpg"]);
+ }
+
+ #[test]
+ fn set_thumb_updates_row_and_invalidation() {
+ let dir = tempfile::tempdir().unwrap();
+ let mut conn = open(&dir.path().join("t.db")).unwrap();
+ apply(&mut conn, &[entry("/a/1.jpg", 1, 10)]).unwrap();
+ set_thumb(&mut conn, "/a/1.jpg", 8000, 6016, 6, "/cache/abc.jpg").unwrap();
+ let thumb: String = conn
+ .query_row("SELECT thumb_path FROM items WHERE path = '/a/1.jpg'", [], |r| r.get(0))
+ .unwrap();
+ assert_eq!(thumb, "/cache/abc.jpg");
+
+ // mtime change → apply() invalidates the derived columns.
+ let (i, u, d) = apply(&mut conn, &[entry("/a/1.jpg", 2, 12)]).unwrap();
+ assert_eq!((i, u, d), (0, 1, 0));
+ let thumb: Option = conn
+ .query_row("SELECT thumb_path FROM items WHERE path = '/a/1.jpg'", [], |r| r.get(0))
+ .unwrap();
+ assert_eq!(thumb, None);
+ }
+
+ #[test]
+ fn scan_then_apply_roundtrip() {
+ let dir = tempfile::tempdir().unwrap();
+ std::fs::create_dir_all(dir.path().join("sub")).unwrap();
+ std::fs::write(dir.path().join("a.jpg"), b"xx").unwrap();
+ std::fs::write(dir.path().join("sub").join("b.png"), b"y").unwrap();
+ std::fs::write(dir.path().join("notes.txt"), b"nope").unwrap();
+
+ let db_dir = tempfile::tempdir().unwrap();
+ let mut conn = open(&db_dir.path().join("t.db")).unwrap();
+ let entries = walk(&[dir.path().to_path_buf()], &|_| {});
+ let (i, u, d) = apply(&mut conn, &entries).unwrap();
+ assert_eq!((i, u, d), (2, 0, 0));
+
+ let list = list_entries(&mut conn).unwrap();
+ assert_eq!(list.len(), 2);
+ assert!(list.iter().all(|e| e.path.contains(dir.path().to_str().unwrap())));
+ }
+}
diff --git a/harnesses/gtauri/src/images.rs b/harnesses/gtauri/src/images.rs
new file mode 100644
index 0000000..8c163d9
--- /dev/null
+++ b/harnesses/gtauri/src/images.rs
@@ -0,0 +1,209 @@
+//! Decode dispatch + thumbnail creation (M2).
+//!
+//! JPEG: `turbojpeg` (libjpeg-turbo) DCT-level shrink decode — the same
+//! shrink-on-load libvips wraps internally (HANDOFF §10: why turbojpeg, not
+//! libvips, for Android). Pipeline:
+//! 1. pick a scale (1/2, 1/4, 1/8) so the decode lands at >= target size;
+//! 2. decode RGB at that scale (peak memory = scaled size, never full-size:
+//! 48 MP -> 1000x752x3 = 2.3 MB at 1/8, vs 137 MB full);
+//! 3. apply EXIF orientation once, to the small buffer (kamadak-exif);
+//! 4. final fit-resize into the target box (`image::imageops`);
+//! 5. re-encode JPEG for the disk cache (turbojpeg `Compressor`).
+//!
+//! PNG: `image` crate (png feature), full decode + resize (not the hot
+//! path). Pipeline output is RGB8; the Tauri layer re-encodes it as a small
+//! JPEG for the on-disk cache — Chromium then decodes THAT (its async
+//! decode threads + image cache + eviction do the rest).
+
+use std::io::Cursor;
+use std::path::Path;
+
+use exif::{In, Reader, Tag};
+use image::imageops;
+use image::imageops::FilterType;
+use image::{ImageBuffer, Rgb};
+use turbojpeg::{Decompressor, Image, PixelFormat, ScalingFactor};
+
+pub struct Thumb {
+ pub rgb: Vec,
+ pub width: u32,
+ pub height: u32,
+ /// Source dimensions after orientation is applied (full resolution).
+ pub src_width: u32,
+ pub src_height: u32,
+ /// EXIF orientation 1..8 (1 = none).
+ pub orientation: u8,
+}
+
+/// Decode a file at full (1/1) size to RGBA8. Used only for small JPEGs in the
+/// disk cache on a cache hit.
+pub fn decode_jpeg(path: &Path) -> Result {
+ let data = std::fs::read(path).map_err(|e| format!("read {}: {e}", path.display()))?;
+ let (rgb, w, h) = decode_jpeg_scaled(&data, ScalingFactor::ONE)?;
+ Ok(Thumb {
+ rgb,
+ width: w,
+ height: h,
+ src_width: w,
+ src_height: h,
+ orientation: 1,
+ })
+}
+
+/// Decode JPEG bytes at a fixed scaling factor to RGB8.
+pub fn decode_jpeg_scaled(data: &[u8], scale: ScalingFactor) -> Result<(Vec, u32, u32), String> {
+ let mut d = Decompressor::new().map_err(|e| e.to_string())?;
+ let header = d
+ .read_header(data)
+ .map_err(|e| format!("jpeg header: {e}"))?
+ .scaled(scale);
+ let (w, h) = (header.width as u32, header.height as u32);
+ if w == 0 || h == 0 {
+ return Err("zero-size jpeg".into());
+ }
+ let mut img = Image {
+ pixels: vec![0u8; 3 * w as usize * h as usize],
+ width: w as usize,
+ pitch: 3 * w as usize,
+ height: h as usize,
+ format: PixelFormat::RGB,
+ };
+ d.set_scaling_factor(scale).map_err(|e| e.to_string())?;
+ d.decompress(data, img.as_deref_mut())
+ .map_err(|e| format!("jpeg decode: {e}"))?;
+ Ok((img.pixels, w, h))
+}
+
+/// Re-encode RGB8 as JPEG (disk-cache entries).
+pub fn encode_jpeg(rgb: &[u8], width: u32, height: u32, quality: u8) -> Result, String> {
+ let img = Image {
+ pixels: rgb.to_vec(),
+ width: width as usize,
+ pitch: 3 * width as usize,
+ height: height as usize,
+ format: PixelFormat::RGB,
+ };
+ let mut c = turbojpeg::Compressor::new().map_err(|e| e.to_string())?;
+ c.set_quality(quality as i32).map_err(|e| e.to_string())?;
+ c.compress_to_vec(img.as_deref()).map_err(|e| e.to_string())
+}
+
+/// Full pipeline: decode + orient + fit to `target` box.
+pub fn make_thumb(path: &Path, target: u32) -> Result {
+ match path.extension().and_then(|e| e.to_str()).map(|e| e.to_ascii_lowercase()) {
+ Some(ref ext) if ext == "jpg" || ext == "jpeg" => thumb_jpeg(path, target),
+ Some(ref ext) if ext == "png" => thumb_png(path, target),
+ _ => Err(format!("unsupported type: {}", path.display())),
+ }
+}
+
+fn thumb_jpeg(path: &Path, target: u32) -> Result {
+ let data = std::fs::read(path).map_err(|e| format!("read {}: {e}", path.display()))?;
+ let mut d = Decompressor::new().map_err(|e| e.to_string())?;
+ let header = d.read_header(&data).map_err(|e| format!("jpeg header: {e}"))?;
+ let (fw, fh) = (header.width as u32, header.height as u32);
+ let orientation = exif_orientation(&data);
+ // Post-orientation full dimensions (90/270 swap w/h).
+ let (src_w, src_h) = if swaps_wh(orientation) { (fh, fw) } else { (fw, fh) };
+
+ let scale = pick_scale(src_w.max(src_h), target);
+ let (rgb, w, h) = decode_jpeg_scaled(&data, scale)?;
+ let (rgb, w, h) = apply_orientation(rgb, w, h, orientation);
+ Ok(fit_to_target(rgb, w, h, target, src_w, src_h, orientation))
+}
+
+fn thumb_png(path: &Path, target: u32) -> Result {
+ let img = image::ImageReader::open(path)
+ .map_err(|e| format!("open {}: {e}", path.display()))?
+ .with_guessed_format()
+ .map_err(|e| e.to_string())?
+ .decode()
+ .map_err(|e| format!("png decode: {e}"))?;
+ let rgb = img.to_rgb8();
+ let (w, h) = (rgb.width(), rgb.height());
+ Ok(fit_to_target(rgb.into_raw(), w, h, target, w, h, 1))
+}
+
+/// Largest shrink (1/8, 1/4, 1/2) whose result is still >= `target` on the
+/// longest side; never upscales.
+fn pick_scale(max_dim: u32, target: u32) -> ScalingFactor {
+ for denom in [8u32, 4, 2] {
+ if max_dim / denom >= target {
+ return ScalingFactor::new(1, denom as usize);
+ }
+ }
+ ScalingFactor::ONE
+}
+
+fn swaps_wh(o: u8) -> bool {
+ matches!(o, 5 | 6 | 7 | 8)
+}
+
+/// EXIF orientation (1..8) from the file bytes; 1 when absent/invalid.
+pub fn exif_orientation(data: &[u8]) -> u8 {
+ let mut reader = Cursor::new(data);
+ let Ok(exif) = Reader::new().read_from_container(&mut reader) else {
+ return 1;
+ };
+ exif.get_field(Tag::Orientation, In::PRIMARY)
+ .and_then(|f| f.value.get_uint(0))
+ .filter(|v| (1..=8).contains(v))
+ .unwrap_or(1) as u8
+}
+
+/// Apply one of the 8 EXIF orientations to an RGB8 buffer (in place semantics:
+/// returns a new buffer).
+pub fn apply_orientation(rgb: Vec, w: u32, h: u32, orientation: u8) -> (Vec, u32, u32) {
+ // Output dims: orientations 5-8 swap width/height.
+ let (ow, oh) = if swaps_wh(orientation) { (h, w) } else { (w, h) };
+ let map = |x: usize, y: usize| -> (usize, usize) {
+ let (w, h) = (w as usize, h as usize);
+ match orientation {
+ 1 => (x, y), // normal
+ 2 => (w - 1 - x, y), // mirror horizontal
+ 3 => (w - 1 - x, h - 1 - y), // 180
+ 4 => (x, h - 1 - y), // mirror vertical
+ 5 => (y, x), // transpose (main diagonal)
+ 6 => (h - 1 - y, x), // 90 CW
+ 7 => (h - 1 - y, w - 1 - x), // transverse (anti-diagonal)
+ 8 => (y, w - 1 - x), // 90 CCW
+ _ => (x, y),
+ }
+ };
+ let mut out = vec![0u8; 3 * ow as usize * oh as usize];
+ for y in 0..h as usize {
+ for x in 0..w as usize {
+ let s = 3 * (y * w as usize + x);
+ let (dx, dy) = map(x, y);
+ let d = 3 * (dy * ow as usize + dx);
+ out[d..d + 3].copy_from_slice(&rgb[s..s + 3]);
+ }
+ }
+ (out, ow, oh)
+}
+
+/// Fit into the `target` box (aspect preserved, no upscaling).
+fn fit_to_target(
+ rgb: Vec,
+ w: u32,
+ h: u32,
+ target: u32,
+ src_w: u32,
+ src_h: u32,
+ orientation: u8,
+) -> Thumb {
+ let (w, h, rgb) = if w.max(h) > target {
+ let (nw, nh) = if w >= h {
+ (target, (h as f64 * target as f64 / w as f64).max(1.0).round() as u32)
+ } else {
+ ((w as f64 * target as f64 / h as f64).max(1.0).round() as u32, target)
+ };
+ let buf = ImageBuffer::, Vec>::from_raw(w, h, rgb)
+ .expect("buffer size matches dims");
+ let r = imageops::resize(&buf, nw, nh, FilterType::Triangle);
+ (r.width(), r.height(), r.into_raw())
+ } else {
+ (w, h, rgb)
+ };
+ Thumb { rgb, width: w, height: h, src_width: src_w, src_height: src_h, orientation }
+}
diff --git a/harnesses/gtauri/src/lib.rs b/harnesses/gtauri/src/lib.rs
new file mode 100644
index 0000000..4ba2253
--- /dev/null
+++ b/harnesses/gtauri/src/lib.rs
@@ -0,0 +1,447 @@
+//! gtauri — the gallery, on Tauri v2 (Chromium does the heavy lifting).
+//!
+//! Division of labor (the experiment's verdict, 2026-10-31):
+//! Chromium/webview: grid layout, compositor-driven native scroll, lazy
+//!
fetch+decode (async decode threads, downsampled decode, image
+//! cache + memory-pressure eviction), viewer compositing (CSS transforms).
+//! Rust: file scan, SQLite, and the on-disk THUMBNAIL CACHE served over
+//! the `gallery://` uri scheme — `gallery://thumb/` returns a small
+//! JPEG (cache hit: straight from disk; miss: turbojpeg DCT-scaled
+//! decode → re-encode → write cache → serve), `gallery://full/`
+//! returns the original file bytes for the viewer.
+//!
+//! The webview's own lazy loader is the demand scheduler: no Rust-side
+//! prefetch queue, no worker pool — Chromium asks for exactly what the
+//! viewport is about to show.
+
+use std::collections::HashMap;
+use std::path::{Path, PathBuf};
+use std::sync::atomic::{AtomicUsize, Ordering};
+use std::sync::{mpsc, LazyLock, Mutex, RwLock};
+
+use log::{Level, LevelFilter, Log, Metadata, Record};
+use serde::Serialize;
+
+use tauri::Emitter as _;
+use tauri::Listener as _;
+use tauri::Manager as _;
+use sha1::{Digest, Sha1};
+
+mod db;
+mod images;
+mod scan;
+
+#[cfg(target_os = "android")]
+const ANDROID_PACKAGE: &str = "wow.gmp.gallery";
+
+/// Grid thumbnail longest side (px). Grid cells are ~420 css px at dpr ~2.75
+/// on the Pixel 9 Pro (~1150 device px); 1024 keeps the decode + cache
+/// small and is still sharp in the cell.
+const THUMB_TARGET: u32 = 1024;
+const THUMB_QUALITY: u8 = 82;
+
+/// One image known to the app. `id` is the DB rowid (stable per row).
+#[derive(Debug, Clone, Serialize)]
+struct Meta {
+ id: i64,
+ path: String,
+ mtime: i64,
+ size: i64,
+}
+
+/// id → metadata, refreshed after every DB apply.
+static META: LazyLock>> =
+ LazyLock::new(|| RwLock::new(HashMap::new()));
+
+/// FR log path (Tauri document_dir = getExternalFilesDir(DOCUMENTS); the
+/// framework creates it — a raw std mkdir of the app external tree is
+/// SELinux-denied). Same FR-line format as the other harnesses so
+/// fr_capture.py remains the referee.
+static FR_PATH: Mutex