diff --git a/.gitignore b/.gitignore index c5f5194..5047753 100644 --- a/.gitignore +++ b/.gitignore @@ -18,8 +18,6 @@ *.iml .idea -Cargo.lock - # claude only .claude CLAUDE.md diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..d81bce3 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,2424 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.16", + "once_cell", + "version_check", +] + +[[package]] +name = "alga" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +dependencies = [ + "approx", + "num-complex", + "num-traits", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "approx" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bellman-ce-verifier" +version = "0.1.0" +source = "git+https://github.com/DoraFactory/snarkjs-bellman-adapter.git#13020108456c40c6d8e14df02b1e20e68067b07b" +dependencies = [ + "pairing_ce 0.28.6", + "parity-scale-codec", +] + +[[package]] +name = "bellman_ce" +version = "0.3.2" +source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" +dependencies = [ + "bit-vec", + "blake2s_const 0.6.0 (git+https://github.com/matter-labs/bellman?branch=beta)", + "blake2s_simd", + "byteorder", + "cfg-if 1.0.1", + "crossbeam", + "futures", + "hex", + "lazy_static", + "num_cpus", + "pairing_ce 0.24.2", + "rand 0.4.6", + "tiny-keccak", +] + +[[package]] +name = "bellman_ce" +version = "0.3.2" +source = "git+https://github.com/DoraFactory/bellman.git#135ea382722778065b140963f5fb0a7bd1e46375" +dependencies = [ + "arrayvec 0.7.6", + "bit-vec", + "blake2s_const 0.6.0 (git+https://github.com/DoraFactory/bellman.git)", + "blake2s_simd", + "byteorder", + "cfg-if 1.0.1", + "crossbeam", + "futures", + "hex", + "lazy_static", + "num_cpus", + "pairing_ce 0.28.6", + "rand 0.4.6", + "serde", + "smallvec", + "tiny-keccak", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +dependencies = [ + "serde", +] + +[[package]] +name = "blake2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", + "opaque-debug 0.3.1", +] + +[[package]] +name = "blake2-rfc_bellman_edition" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc60350286c7c3db13b98e91dbe5c8b6830a6821bc20af5b0c310ce94d74915" +dependencies = [ + "arrayvec 0.4.12", + "byteorder", + "constant_time_eq", +] + +[[package]] +name = "blake2s_const" +version = "0.6.0" +source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_const" +version = "0.6.0" +source = "git+https://github.com/DoraFactory/bellman.git#135ea382722778065b140963f5fb0a7bd1e46375" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "bnum" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "cc" +version = "1.2.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73c9d2043a9e617b0d602fbc0a0ecd621568edbf3a9774890a6d562389bd8e1c" +dependencies = [ + "prost 0.11.9", + "prost-types", + "tendermint-proto", +] + +[[package]] +name = "cosmwasm-crypto" +version = "1.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c82e56962f0f18c9a292aa59940e03a82ce15ef79b93679d5838bb8143f0df" +dependencies = [ + "digest 0.10.7", + "ed25519-zebra", + "k256", + "rand_core 0.6.4", + "thiserror", +] + +[[package]] +name = "cosmwasm-derive" +version = "1.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b804ff15a0e059c88f85ae0e868cf8c7aba9d61221e46f1ad7250f270628c7" +dependencies = [ + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-schema" +version = "1.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5526ea839acb47bbf8fff031ed9aad86e74d43f77b089255417328c3664367d5" +dependencies = [ + "cosmwasm-schema-derive", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "1.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f41b99f41f840765d02ae858956bb52af910755976312082e90493c67db512" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-std" +version = "1.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763340055b84e5482ed90fec8194ff7d59112267a09bbf5819c9e3edca8c052e" +dependencies = [ + "base64", + "bech32", + "bnum", + "cosmwasm-crypto", + "cosmwasm-derive", + "derivative", + "forward_ref", + "hex", + "schemars", + "serde", + "serde-json-wasm", + "sha2 0.10.9", + "static_assertions", + "thiserror", +] + +[[package]] +name = "cosmwasm-storage" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66de2ab9db04757bcedef2b5984fbe536903ada4a8a9766717a4a71197ef34f6" +dependencies = [ + "cosmwasm-std", + "serde", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" +dependencies = [ + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-deque" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "crossbeam-utils", + "lazy_static", + "maybe-uninit", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "cw-amaci" +version = "0.1.0" +dependencies = [ + "anyhow", + "assert_matches", + "base64", + "bellman-ce-verifier", + "bellman_ce 0.3.2 (git+https://github.com/DoraFactory/bellman.git)", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus", + "cw-utils", + "cw2", + "cw4", + "derivative", + "ff_ce 0.11.0", + "ff_ce 0.14.3", + "franklin-crypto", + "getrandom 0.2.16", + "hex", + "num-bigint 0.4.6", + "num-traits", + "pairing_ce 0.28.6", + "poseidon-rs", + "prost 0.11.9", + "prost-types", + "schemars", + "secp256k1", + "serde", + "serde_json", + "sha2 0.9.9", + "thiserror", +] + +[[package]] +name = "cw-amaci-registry" +version = "0.1.4" +dependencies = [ + "anyhow", + "assert_matches", + "base64", + "bech32", + "cosmwasm-schema", + "cosmwasm-std", + "cw-amaci", + "cw-controllers", + "cw-multi-test", + "cw-storage-plus", + "cw-utils", + "cw2", + "cw4", + "derivative", + "hex", + "num-bigint 0.4.6", + "num-traits", + "schemars", + "secp256k1", + "serde", + "serde_json", + "sha2 0.10.9", + "thiserror", +] + +[[package]] +name = "cw-api-maci" +version = "0.1.0" +dependencies = [ + "anyhow", + "assert_matches", + "base64", + "bellman-ce-verifier", + "bellman_ce 0.3.2 (git+https://github.com/DoraFactory/bellman.git)", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus", + "cw2", + "cw4", + "derivative", + "ff_ce 0.11.0", + "ff_ce 0.14.3", + "franklin-crypto", + "getrandom 0.2.16", + "hex", + "num-bigint 0.4.6", + "num-traits", + "pairing_ce 0.28.6", + "poseidon-rs", + "prost 0.11.9", + "prost-types", + "schemars", + "secp256k1", + "serde", + "serde_json", + "sha2 0.9.9", + "thiserror", +] + +[[package]] +name = "cw-api-saas" +version = "0.1.2" +dependencies = [ + "anyhow", + "bech32", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cw-amaci", + "cw-amaci-registry", + "cw-api-maci", + "cw-multi-test", + "cw-storage-plus", + "cw-utils", + "cw2", + "prost 0.11.9", + "prost-types", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cw-controllers" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57de8d3761e46be863e3ac1eba8c8a976362a48c6abf240df1e26c3e421ee9e8" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "cw-maci" +version = "0.1.0" +dependencies = [ + "anyhow", + "assert_matches", + "bellman-ce-verifier", + "bellman_ce 0.3.2 (git+https://github.com/DoraFactory/bellman.git)", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus", + "cw2", + "cw4", + "derivative", + "ff_ce 0.11.0", + "ff_ce 0.14.3", + "franklin-crypto", + "getrandom 0.2.16", + "hex", + "num-bigint 0.4.6", + "num-traits", + "pairing_ce 0.28.6", + "poseidon-rs", + "prost 0.11.9", + "prost-types", + "schemars", + "serde", + "serde_json", + "sha2 0.9.9", + "thiserror", +] + +[[package]] +name = "cw-multi-test" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc392a5cb7e778e3f90adbf7faa43c4db7f35b6623224b08886d796718edb875" +dependencies = [ + "anyhow", + "bech32", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "derivative", + "itertools 0.12.1", + "prost 0.12.6", + "schemars", + "serde", + "sha2 0.10.9", + "thiserror", +] + +[[package]] +name = "cw-oracle-maci" +version = "0.1.0" +dependencies = [ + "anyhow", + "assert_matches", + "base64", + "bellman-ce-verifier", + "bellman_ce 0.3.2 (git+https://github.com/DoraFactory/bellman.git)", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus", + "cw2", + "cw4", + "derivative", + "ff_ce 0.11.0", + "ff_ce 0.14.3", + "franklin-crypto", + "getrandom 0.2.16", + "hex", + "num-bigint 0.4.6", + "num-traits", + "pairing_ce 0.28.6", + "poseidon-rs", + "prost 0.11.9", + "prost-types", + "schemars", + "secp256k1", + "serde", + "serde_json", + "sha2 0.9.9", + "thiserror", +] + +[[package]] +name = "cw-saas" +version = "0.1.2" +dependencies = [ + "anyhow", + "bech32", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cw-amaci", + "cw-amaci-registry", + "cw-multi-test", + "cw-oracle-maci", + "cw-storage-plus", + "cw-utils", + "cw2", + "prost 0.11.9", + "prost-types", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cw-storage-plus" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-utils" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw4" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24754ff6e45f2a1c60adc409d9b2eb87666012c44021329141ffaab3388fccd2" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "serde", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[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", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_ce" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a682c12d0cc98a32ab7540401a5ea1ed21d11571eea11d5829cd721f85ff0" +dependencies = [ + "byteorder", + "ff_derive_ce 0.8.0", + "hex", + "rand 0.4.6", +] + +[[package]] +name = "ff_ce" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38107cbd8bac0d907d7e7513c9f68c95adbda9e6f6f6bdf3f5111c6ecac4fe47" +dependencies = [ + "byteorder", + "ff_derive_ce 0.9.3", + "hex", + "rand 0.4.6", +] + +[[package]] +name = "ff_ce" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b538e4231443a5b9c507caee3356f016d832cf7393d2d90f03ea3180d4e3fbc" +dependencies = [ + "byteorder", + "ff_derive_ce 0.11.2", + "hex", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "ff_derive_ce" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c052fa6d4c2f12305ec364bfb8ef884836f3f61ea015b202372ff996d1ac4b" +dependencies = [ + "num-bigint 0.2.6", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ff_derive_ce" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde5a00073374b4d7aa2d3a8359a5709f9c0bfac8393f254655d16b4acdfe823" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ff_derive_ce" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96fbccd88dbb1fac4ee4a07c2fcc4ca719a74ffbd9d2b9d41d8c8eb073d8b20" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "paste", +] + +[[package]] +name = "forward_ref" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" + +[[package]] +name = "franklin-crypto" +version = "0.0.5" +source = "git+https://github.com/matter-labs/franklin-crypto?branch=beta#9e3c2a12053c014df9b6c1f227db4470e02b4c5b" +dependencies = [ + "bellman_ce 0.3.2 (git+https://github.com/matter-labs/bellman?branch=beta)", + "bit-vec", + "blake2", + "blake2-rfc_bellman_edition", + "blake2s_simd", + "byteorder", + "digest 0.9.0", + "hex", + "hmac 0.11.0", + "itertools 0.9.0", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "poseidon_hash", + "rand 0.4.6", + "serde", + "serde_derive", + "sha2 0.9.9", + "splitmut", + "tiny-keccak", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.1", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if 1.0.1", + "js-sys", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac 0.11.1", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "indexmap" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +dependencies = [ + "equivalent", + "hashbrown 0.15.4", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if 1.0.1", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.9", + "signature", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "mathru" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7584d97fddf282cc3e5cc6fae54e596cfcd708a3b375633294d9db8e8b6d776" +dependencies = [ + "rand 0.7.3", + "serde", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "memoffset" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +dependencies = [ + "autocfg", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "pairing_ce" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e753515675eaaa98071d814bea0148ae8c9d7995fa0531bf222e7857e3f1759" +dependencies = [ + "byteorder", + "cfg-if 1.0.1", + "ff_ce 0.12.0", + "rand 0.4.6", +] + +[[package]] +name = "pairing_ce" +version = "0.28.6" +source = "git+https://github.com/matter-labs/pairing.git#e86029c163fe25719712be0fc0b981e2536f5034" +dependencies = [ + "byteorder", + "cfg-if 1.0.1", + "ff_ce 0.14.3", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec 0.7.6", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "poseidon-rs" +version = "0.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7bd44e953add4c619a75a970cc4335e3175dfecc61ab64ee6caa8fffde95c95" +dependencies = [ + "ff_ce 0.11.0", + "rand 0.4.6", + "serde_json", +] + +[[package]] +name = "poseidon_hash" +version = "0.0.1" +source = "git+https://github.com/shamatar/poseidon_hash.git#495ae87ff066d066b140c7d0dff8d929b87d31ee" +dependencies = [ + "alga", + "approx", + "blake2-rfc_bellman_edition", + "byteorder", + "mathru", + "num-bigint 0.2.6", + "num-integer", + "num-traits", + "pairing_ce 0.24.2", + "rand 0.4.6", + "sha2 0.8.2", + "tiny-keccak", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive 0.12.6", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "schemars_derive", + "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.104", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "rand 0.8.5", + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4473013577ec77b4ee3668179ef1186df3146e2cf2d927bd200974c6fe60fd99" +dependencies = [ + "cc", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[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.104", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.1", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if 1.0.1", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "slab" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "splitmut" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85070f382340e8b23a75808e83573ddf65f9ad9143df9573ca37c1ed2ee956a" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tendermint-proto" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cec054567d16d85e8c3f6a3139963d1a66d9d3051ed545d31562550e9bcc3d" +dependencies = [ + "bytes", + "flex-error", + "num-derive", + "num-traits", + "prost 0.11.9", + "prost-types", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[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.104", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if 1.0.1", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winnow" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +dependencies = [ + "memchr", +] + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml index 91c99f4..420e455 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,13 @@ [workspace] -members = ["contracts/amaci", "contracts/registry", "contracts/saas", "contracts/maci", "contracts/oracle-maci"] +members = [ + "contracts/amaci", + "contracts/registry", + "contracts/saas", + "contracts/maci", + "contracts/oracle-maci", + "contracts/api-maci", + "contracts/api-saas", +] resolver = "2" # [workspace.dependencies] diff --git a/contracts/amaci/Cargo.toml b/contracts/amaci/Cargo.toml index add7de3..4d4eb92 100644 --- a/contracts/amaci/Cargo.toml +++ b/contracts/amaci/Cargo.toml @@ -31,7 +31,7 @@ overflow-checks = true backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] -mt = ["library", "anyhow", "cw-multi-test"] +mt = ["library", "anyhow", "cw-multi-test", "secp256k1", "base64"] [package.metadata.scripts] @@ -67,6 +67,7 @@ prost = "0.11" prost-types = "0.11" cw4 = "1.1.0" cw-utils = "1.0.1" +serde_json = "1.0" # pairing_matter = { package="pairing_ce", git = "https://github.com/matter-labs/pairing.git" } bellman_ce = { git = "https://github.com/DoraFactory/bellman.git" } @@ -76,6 +77,8 @@ franklin-crypto = { git = "https://github.com/matter-labs/franklin-crypto", bran ] } anyhow = { version = "1.0", optional = true } cw-multi-test = { version = "0.20.0", optional = true } +secp256k1 = { version = "0.27", optional = true } +base64 = { version = "0.21", optional = true } [dev-dependencies] anyhow = "1.0" @@ -84,3 +87,5 @@ cw-multi-test = { version = "0.20.0", features = ["cosmwasm_1_4"] } derivative = "2" serde_json = "1.0" num-bigint = "0.4.3" +secp256k1 = "0.27" +base64 = "0.21" diff --git a/contracts/amaci/package.json b/contracts/amaci/package.json deleted file mode 100644 index a3cfebb..0000000 --- a/contracts/amaci/package.json +++ /dev/null @@ -1,817 +0,0 @@ -{ - "name": "dapp", - "version": "1.0.0", - "description": "", - "main": "index.js", - "dependencies": { - "@cosmjs/cosmwasm-stargate": "^0.31.0", - "@cosmjs/launchpad": "^0.27.1", - "@cosmjs/proto-signing": "^0.31.0", - "@cosmjs/stargate": "^0.31.0", - "abab": "^2.0.6", - "accepts": "^1.3.8", - "acorn": "^8.8.2", - "acorn-globals": "^6.0.0", - "acorn-import-assertions": "^1.8.0", - "acorn-jsx": "^5.3.2", - "acorn-walk": "^7.2.0", - "address": "^1.2.2", - "adjust-sourcemap-loader": "^4.0.0", - "agent-base": "^6.0.2", - "ajv": "^6.12.6", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^3.5.2", - "ansi-escapes": "^4.3.2", - "ansi-html-community": "^0.0.8", - "ansi-regex": "^5.0.1", - "ansi-styles": "^3.2.1", - "any-promise": "^1.3.0", - "anymatch": "^3.1.3", - "aptos": "^1.9.0", - "arg": "^5.0.2", - "argparse": "^1.0.10", - "aria-query": "^5.1.3", - "array-buffer-byte-length": "^1.0.0", - "array-flatten": "^2.1.2", - "array-includes": "^3.1.6", - "array-union": "^2.1.0", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.reduce": "^1.0.5", - "array.prototype.tosorted": "^1.1.1", - "asap": "^2.0.6", - "ast-types-flow": "^0.0.7", - "async": "^3.2.4", - "asynckit": "^0.4.0", - "at-least-node": "^1.0.0", - "autoprefixer": "^10.4.14", - "available-typed-arrays": "^1.0.5", - "axe-core": "^4.6.3", - "axios": "^0.27.2", - "axobject-query": "^3.1.1", - "babel-jest": "^27.5.1", - "babel-loader": "^8.3.0", - "babel-plugin-istanbul": "^6.1.1", - "babel-plugin-jest-hoist": "^27.5.1", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "babel-preset-current-node-syntax": "^1.0.1", - "babel-preset-jest": "^27.5.1", - "babel-preset-react-app": "^10.0.1", - "balanced-match": "^1.0.2", - "batch": "^0.6.1", - "bfj": "^7.0.2", - "big.js": "^5.2.2", - "binary-extensions": "^2.2.0", - "bluebird": "^3.7.2", - "body-parser": "^1.20.1", - "bonjour-service": "^1.1.1", - "boolbase": "^1.0.0", - "brace-expansion": "^1.1.11", - "braces": "^3.0.2", - "browser-process-hrtime": "^1.0.0", - "browserslist": "^4.21.5", - "bser": "^2.1.1", - "buffer-from": "^1.1.2", - "builtin-modules": "^3.3.0", - "bytes": "^3.0.0", - "call-bind": "^1.0.2", - "callsites": "^3.1.0", - "camel-case": "^4.1.2", - "camelcase": "^6.3.0", - "camelcase-css": "^2.0.1", - "caniuse-api": "^3.0.0", - "caniuse-lite": "^1.0.30001473", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "chalk": "^2.4.2", - "char-regex": "^1.0.2", - "check-types": "^11.2.2", - "chokidar": "^3.5.3", - "chrome-trace-event": "^1.0.3", - "ci-info": "^3.8.0", - "cjs-module-lexer": "^1.2.2", - "clean-css": "^5.3.2", - "cliui": "^7.0.4", - "co": "^4.6.0", - "coa": "^2.0.2", - "collect-v8-coverage": "^1.0.1", - "color-convert": "^1.9.3", - "color-name": "^1.1.3", - "colord": "^2.9.3", - "colorette": "^2.0.19", - "combined-stream": "^1.0.8", - "commander": "^8.3.0", - "common-path-prefix": "^3.0.0", - "common-tags": "^1.8.2", - "commondir": "^1.0.1", - "compressible": "^2.0.18", - "compression": "^1.7.4", - "concat-map": "^0.0.1", - "confusing-browser-globals": "^1.0.11", - "connect-history-api-fallback": "^2.0.0", - "content-disposition": "^0.5.4", - "content-type": "^1.0.5", - "convert-source-map": "^1.9.0", - "cookie": "^0.5.0", - "cookie-signature": "^1.0.6", - "core-js": "^3.29.1", - "core-js-compat": "^3.29.1", - "core-js-pure": "^3.29.1", - "core-util-is": "^1.0.3", - "cosmiconfig": "^7.1.0", - "cross-spawn": "^7.0.3", - "crypto-random-string": "^2.0.0", - "css-blank-pseudo": "^3.0.3", - "css-declaration-sorter": "^6.4.0", - "css-has-pseudo": "^3.0.4", - "css-loader": "^6.7.3", - "css-minimizer-webpack-plugin": "^3.4.1", - "css-prefers-color-scheme": "^6.0.3", - "css-select": "^4.3.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "^1.0.0-alpha.37", - "css-what": "^6.1.0", - "css.escape": "^1.5.1", - "cssdb": "^7.5.3", - "cssesc": "^3.0.0", - "cssnano": "^5.1.15", - "cssnano-preset-default": "^5.2.14", - "cssnano-utils": "^3.1.0", - "csso": "^4.2.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "csstype": "^3.1.2", - "damerau-levenshtein": "^1.0.8", - "data-urls": "^2.0.0", - "debug": "^4.3.4", - "decimal.js": "^10.4.3", - "dedent": "^0.7.0", - "deep-equal": "^2.2.0", - "deep-is": "^0.1.4", - "deepmerge": "^4.3.1", - "default-gateway": "^6.0.3", - "define-lazy-prop": "^2.0.0", - "define-properties": "^1.2.0", - "delayed-stream": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.2.0", - "detect-newline": "^3.1.0", - "detect-node": "^2.1.0", - "detect-port-alt": "^1.1.6", - "didyoumean": "^1.2.2", - "diff-sequences": "^27.5.1", - "dir-glob": "^3.0.1", - "dlv": "^1.1.3", - "dns-equal": "^1.0.0", - "dns-packet": "^5.5.0", - "doctrine": "^3.0.0", - "dom-accessibility-api": "^0.5.16", - "dom-converter": "^0.2.0", - "dom-serializer": "^1.4.1", - "domelementtype": "^2.3.0", - "domexception": "^2.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "dot-case": "^3.0.4", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "duplexer": "^0.1.2", - "ee-first": "^1.1.1", - "ejs": "^3.1.9", - "electron-to-chromium": "^1.4.348", - "emittery": "^0.8.1", - "emoji-regex": "^9.2.2", - "emojis-list": "^3.0.0", - "encodeurl": "^1.0.2", - "enhanced-resolve": "^5.12.0", - "entities": "^2.2.0", - "error-ex": "^1.3.2", - "error-stack-parser": "^2.1.4", - "es-abstract": "^1.21.2", - "es-array-method-boxes-properly": "^1.0.0", - "es-get-iterator": "^1.1.3", - "es-module-lexer": "^0.9.3", - "es-set-tostringtag": "^2.0.1", - "es-shim-unscopables": "^1.0.0", - "es-to-primitive": "^1.2.1", - "escalade": "^3.1.1", - "escape-html": "^1.0.3", - "escape-string-regexp": "^1.0.5", - "escodegen": "^2.0.0", - "eslint": "^8.37.0", - "eslint-config-react-app": "^7.0.1", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jest": "^25.7.0", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-testing-library": "^5.10.2", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "eslint-webpack-plugin": "^3.2.0", - "espree": "^9.5.1", - "esprima": "^4.0.1", - "esquery": "^1.5.0", - "esrecurse": "^4.3.0", - "estraverse": "^5.3.0", - "estree-walker": "^1.0.1", - "esutils": "^2.0.3", - "etag": "^1.8.1", - "eventemitter3": "^4.0.7", - "events": "^3.3.0", - "execa": "^5.1.1", - "exit": "^0.1.2", - "expect": "^27.5.1", - "express": "^4.18.2", - "fast-deep-equal": "^3.1.3", - "fast-glob": "^3.2.12", - "fast-json-stable-stringify": "^2.1.0", - "fast-levenshtein": "^2.0.6", - "fastq": "^1.15.0", - "faye-websocket": "^0.11.4", - "fb-watchman": "^2.0.2", - "file-entry-cache": "^6.0.1", - "file-loader": "^6.2.0", - "filelist": "^1.0.4", - "filesize": "^8.0.7", - "fill-range": "^7.0.1", - "finalhandler": "^1.2.0", - "find-cache-dir": "^3.3.2", - "find-up": "^5.0.0", - "flat-cache": "^3.0.4", - "flatted": "^3.2.7", - "follow-redirects": "^1.15.2", - "for-each": "^0.3.3", - "fork-ts-checker-webpack-plugin": "^6.5.3", - "form-data": "^3.0.1", - "forwarded": "^0.2.0", - "fraction.js": "^4.2.0", - "fresh": "^0.5.2", - "fs-extra": "^10.1.0", - "fs-monkey": "^1.0.3", - "fs.realpath": "^1.0.0", - "fsevents": "^2.3.2", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "functions-have-names": "^1.2.3", - "gensync": "^1.0.0-beta.2", - "get-caller-file": "^2.0.5", - "get-intrinsic": "^1.2.0", - "get-own-enumerable-property-symbols": "^3.0.2", - "get-package-type": "^0.1.0", - "get-stream": "^6.0.1", - "get-symbol-description": "^1.0.0", - "glob": "^7.2.3", - "glob-parent": "^6.0.2", - "glob-to-regexp": "^0.4.1", - "global-modules": "^2.0.0", - "global-prefix": "^3.0.0", - "globals": "^11.12.0", - "globalthis": "^1.0.3", - "globby": "^11.1.0", - "gopd": "^1.0.1", - "graceful-fs": "^4.2.11", - "grapheme-splitter": "^1.0.4", - "gzip-size": "^6.0.0", - "handle-thing": "^2.0.1", - "harmony-reflect": "^1.6.2", - "has": "^1.0.3", - "has-bigints": "^1.0.2", - "has-flag": "^3.0.0", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "has-tostringtag": "^1.0.0", - "he": "^1.2.0", - "hoopy": "^0.1.4", - "hpack.js": "^2.1.6", - "html-encoding-sniffer": "^2.0.1", - "html-entities": "^2.3.3", - "html-escaper": "^2.0.2", - "html-minifier-terser": "^6.1.0", - "html-webpack-plugin": "^5.5.0", - "htmlparser2": "^6.1.0", - "http-deceiver": "^1.2.7", - "http-errors": "^2.0.0", - "http-parser-js": "^0.5.8", - "http-proxy": "^1.18.1", - "http-proxy-agent": "^4.0.1", - "http-proxy-middleware": "^2.0.6", - "https-proxy-agent": "^5.0.1", - "human-signals": "^2.1.0", - "iconv-lite": "^0.6.3", - "icss-utils": "^5.1.0", - "idb": "^7.1.1", - "identity-obj-proxy": "^3.0.0", - "ignore": "^5.2.4", - "immer": "^9.0.21", - "import-fresh": "^3.3.0", - "import-local": "^3.1.0", - "imurmurhash": "^0.1.4", - "indent-string": "^4.0.0", - "inflight": "^1.0.6", - "inherits": "^2.0.4", - "ini": "^1.3.8", - "internal-slot": "^1.0.5", - "ipaddr.js": "^2.0.1", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-arrayish": "^0.2.1", - "is-bigint": "^1.0.4", - "is-binary-path": "^2.1.0", - "is-boolean-object": "^1.1.2", - "is-callable": "^1.2.7", - "is-core-module": "^2.11.0", - "is-date-object": "^1.0.5", - "is-docker": "^2.2.1", - "is-extglob": "^2.1.1", - "is-fullwidth-code-point": "^3.0.0", - "is-generator-fn": "^2.1.0", - "is-glob": "^4.0.3", - "is-map": "^2.0.2", - "is-module": "^1.0.0", - "is-negative-zero": "^2.0.2", - "is-number": "^7.0.0", - "is-number-object": "^1.0.7", - "is-obj": "^1.0.1", - "is-path-inside": "^3.0.3", - "is-plain-obj": "^3.0.0", - "is-potential-custom-element-name": "^1.0.1", - "is-regex": "^1.1.4", - "is-regexp": "^1.0.0", - "is-root": "^2.1.0", - "is-set": "^2.0.2", - "is-shared-array-buffer": "^1.0.2", - "is-stream": "^2.0.1", - "is-string": "^1.0.7", - "is-symbol": "^1.0.4", - "is-typed-array": "^1.1.10", - "is-typedarray": "^1.0.0", - "is-weakmap": "^2.0.1", - "is-weakref": "^1.0.2", - "is-weakset": "^2.0.2", - "is-wsl": "^2.2.0", - "isarray": "^2.0.5", - "isexe": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.2.1", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.1.5", - "jake": "^10.8.5", - "jest": "^27.5.1", - "jest-changed-files": "^27.5.1", - "jest-circus": "^27.5.1", - "jest-cli": "^27.5.1", - "jest-config": "^27.5.1", - "jest-diff": "^27.5.1", - "jest-docblock": "^27.5.1", - "jest-each": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-pnp-resolver": "^1.2.3", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watch-typeahead": "^1.1.0", - "jest-watcher": "^27.5.1", - "jest-worker": "^27.5.1", - "jiti": "^1.18.2", - "js-sdsl": "^4.4.0", - "js-tokens": "^4.0.0", - "js-yaml": "^3.14.1", - "jsdom": "^16.7.0", - "jsesc": "^2.5.2", - "json-parse-even-better-errors": "^2.3.1", - "json-schema": "^0.4.0", - "json-schema-traverse": "^0.4.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "json5": "^2.2.3", - "jsonfile": "^6.1.0", - "jsonpointer": "^5.0.1", - "jsx-ast-utils": "^3.3.3", - "kind-of": "^6.0.3", - "kleur": "^3.0.3", - "klona": "^2.0.6", - "language-subtag-registry": "^0.3.22", - "language-tags": "^1.0.5", - "launch-editor": "^2.6.0", - "leven": "^3.1.0", - "levn": "^0.4.1", - "lilconfig": "^2.1.0", - "lines-and-columns": "^1.2.4", - "loader-runner": "^4.3.0", - "loader-utils": "^2.0.4", - "locate-path": "^6.0.0", - "lodash": "^4.17.21", - "lodash.debounce": "^4.0.8", - "lodash.memoize": "^4.1.2", - "lodash.merge": "^4.6.2", - "lodash.sortby": "^4.7.0", - "lodash.uniq": "^4.5.0", - "loose-envify": "^1.4.0", - "lower-case": "^2.0.2", - "lru-cache": "^5.1.1", - "lz-string": "^1.5.0", - "magic-string": "^0.25.9", - "make-dir": "^3.1.0", - "makeerror": "^1.0.12", - "mdn-data": "^2.0.4", - "media-typer": "^0.3.0", - "memfs": "^3.4.13", - "merge-descriptors": "^1.0.1", - "merge-stream": "^2.0.0", - "merge2": "^1.4.1", - "methods": "^1.1.2", - "micromatch": "^4.0.5", - "mime": "^1.6.0", - "mime-db": "^1.52.0", - "mime-types": "^2.1.35", - "mimic-fn": "^2.1.0", - "min-indent": "^1.0.1", - "mini-css-extract-plugin": "^2.7.5", - "minimalistic-assert": "^1.0.1", - "minimatch": "^3.1.2", - "minimist": "^1.2.8", - "mkdirp": "^0.5.6", - "ms": "^2.1.2", - "multicast-dns": "^7.2.5", - "mz": "^2.7.0", - "nanoid": "^3.3.6", - "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", - "negotiator": "^0.6.3", - "neo-async": "^2.6.2", - "no-case": "^3.0.4", - "node-forge": "^1.3.1", - "node-int64": "^0.4.0", - "node-releases": "^2.0.10", - "normalize-path": "^3.0.0", - "normalize-range": "^0.1.2", - "normalize-url": "^6.1.0", - "npm-run-path": "^4.0.1", - "nth-check": "^2.1.1", - "nwsapi": "^2.2.2", - "object-assign": "^4.1.1", - "object-hash": "^3.0.0", - "object-inspect": "^1.12.3", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.getownpropertydescriptors": "^2.1.5", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "obuf": "^1.1.2", - "on-finished": "^2.4.1", - "on-headers": "^1.0.2", - "once": "^1.4.0", - "onetime": "^5.1.2", - "open": "^8.4.2", - "optionator": "^0.9.1", - "p-limit": "^3.1.0", - "p-locate": "^5.0.0", - "p-retry": "^4.6.2", - "p-try": "^2.2.0", - "param-case": "^3.0.4", - "parent-module": "^1.0.1", - "parse-json": "^5.2.0", - "parse5": "^6.0.1", - "parseurl": "^1.3.3", - "pascal-case": "^3.1.2", - "path-exists": "^4.0.0", - "path-is-absolute": "^1.0.1", - "path-key": "^3.1.1", - "path-parse": "^1.0.7", - "path-to-regexp": "^0.1.7", - "path-type": "^4.0.0", - "performance-now": "^2.1.0", - "picocolors": "^1.0.0", - "picomatch": "^2.3.1", - "pify": "^2.3.0", - "pirates": "^4.0.5", - "pkg-dir": "^4.2.0", - "pkg-up": "^3.1.0", - "postcss": "^8.4.21", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-browser-comments": "^4.0.0", - "postcss-calc": "^8.2.4", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.11", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-import": "^14.1.0", - "postcss-initial": "^4.0.1", - "postcss-js": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-load-config": "^3.1.4", - "postcss-loader": "^6.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-nested": "^6.0.0", - "postcss-nesting": "^10.2.0", - "postcss-normalize": "^10.0.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-opacity-percentage": "^1.1.3", - "postcss-ordered-values": "^5.1.3", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-preset-env": "^7.8.3", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1", - "postcss-value-parser": "^4.2.0", - "prelude-ls": "^1.2.1", - "pretty-bytes": "^5.6.0", - "pretty-error": "^4.0.0", - "pretty-format": "^27.5.1", - "process-nextick-args": "^2.0.1", - "promise": "^8.3.0", - "prompts": "^2.4.2", - "prop-types": "^15.8.1", - "proxy-addr": "^2.0.7", - "psl": "^1.9.0", - "punycode": "^2.3.0", - "q": "^1.5.1", - "qs": "^6.11.0", - "querystringify": "^2.2.0", - "queue-microtask": "^1.2.3", - "quick-lru": "^5.1.1", - "raf": "^3.4.1", - "randombytes": "^2.1.0", - "range-parser": "^1.2.1", - "raw-body": "^2.5.1", - "react": "^18.2.0", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-dom": "^18.2.0", - "react-error-overlay": "^6.0.11", - "react-is": "^17.0.2", - "react-refresh": "^0.11.0", - "react-scripts": "^5.0.1", - "read-cache": "^1.0.0", - "readable-stream": "^3.6.2", - "readdirp": "^3.6.0", - "recursive-readdir": "^2.2.3", - "redent": "^3.0.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regenerator-runtime": "^0.13.11", - "regenerator-transform": "^0.15.1", - "regex-parser": "^2.2.11", - "regexp.prototype.flags": "^1.4.3", - "regexpu-core": "^5.3.2", - "regjsparser": "^0.9.1", - "relateurl": "^0.2.7", - "renderkid": "^3.0.0", - "require-directory": "^2.1.1", - "require-from-string": "^2.0.2", - "requires-port": "^1.0.0", - "resolve": "^1.22.1", - "resolve-cwd": "^3.0.0", - "resolve-from": "^5.0.0", - "resolve-url-loader": "^4.0.0", - "resolve.exports": "^1.1.1", - "retry": "^0.13.1", - "reusify": "^1.0.4", - "rimraf": "^3.0.2", - "rollup": "^2.79.1", - "rollup-plugin-terser": "^7.0.2", - "run-parallel": "^1.2.0", - "safe-buffer": "^5.2.1", - "safe-regex-test": "^1.0.0", - "safer-buffer": "^2.1.2", - "sanitize.css": "^13.0.0", - "sass-loader": "^12.6.0", - "sax": "^1.2.4", - "saxes": "^5.0.1", - "scheduler": "^0.23.0", - "schema-utils": "^3.1.1", - "select-hose": "^2.0.0", - "selfsigned": "^2.1.1", - "semver": "^7.3.8", - "send": "^0.18.0", - "serialize-javascript": "^6.0.1", - "serve-index": "^1.9.1", - "serve-static": "^1.15.0", - "setprototypeof": "^1.2.0", - "shebang-command": "^2.0.0", - "shebang-regex": "^3.0.0", - "shell-quote": "^1.8.0", - "side-channel": "^1.0.4", - "signal-exit": "^3.0.7", - "sisteransi": "^1.0.5", - "slash": "^3.0.0", - "sockjs": "^0.3.24", - "source-list-map": "^2.0.1", - "source-map": "^0.7.4", - "source-map-js": "^1.0.2", - "source-map-loader": "^3.0.2", - "source-map-support": "^0.5.21", - "sourcemap-codec": "^1.4.8", - "spdy": "^4.0.2", - "spdy-transport": "^3.0.0", - "sprintf-js": "^1.0.3", - "stable": "^0.1.8", - "stack-utils": "^2.0.6", - "stackframe": "^1.3.4", - "statuses": "^2.0.1", - "stop-iteration-iterator": "^1.0.0", - "string_decoder": "^1.3.0", - "string-length": "^4.0.2", - "string-natural-compare": "^3.0.1", - "string-width": "^4.2.3", - "string.prototype.matchall": "^4.0.8", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "stringify-object": "^3.3.0", - "strip-ansi": "^6.0.1", - "strip-bom": "^4.0.0", - "strip-comments": "^2.0.1", - "strip-final-newline": "^2.0.0", - "strip-indent": "^3.0.0", - "strip-json-comments": "^3.1.1", - "style-loader": "^3.3.2", - "stylehacks": "^5.1.1", - "sucrase": "^3.31.0", - "supports-color": "^5.5.0", - "supports-hyperlinks": "^2.3.0", - "supports-preserve-symlinks-flag": "^1.0.0", - "svg-parser": "^2.0.4", - "svgo": "^1.3.2", - "symbol-tree": "^3.2.4", - "tailwindcss": "^3.3.1", - "tapable": "^2.2.1", - "temp-dir": "^2.0.0", - "tempy": "^0.6.0", - "terminal-link": "^2.1.1", - "terser": "^5.16.8", - "terser-webpack-plugin": "^5.3.7", - "test-exclude": "^6.0.0", - "text-table": "^0.2.0", - "thenify": "^3.3.1", - "thenify-all": "^1.6.0", - "throat": "^6.0.2", - "thunky": "^1.1.0", - "tmpl": "^1.0.5", - "to-fast-properties": "^2.0.0", - "to-regex-range": "^5.0.1", - "toidentifier": "^1.0.1", - "tough-cookie": "^4.1.2", - "tr46": "^2.1.0", - "tryer": "^1.0.1", - "ts-interface-checker": "^0.1.13", - "tsconfig-paths": "^3.14.2", - "tslib": "^2.5.0", - "tsutils": "^3.21.0", - "tweetnacl": "^1.0.3", - "type-check": "^0.4.0", - "type-detect": "^4.0.8", - "type-fest": "^0.21.3", - "type-is": "^1.6.18", - "typed-array-length": "^1.0.4", - "typedarray-to-buffer": "^3.1.5", - "typescript": "^4.9.5", - "unbox-primitive": "^1.0.2", - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0", - "unicode-property-aliases-ecmascript": "^2.1.0", - "unique-string": "^2.0.0", - "universalify": "^2.0.0", - "unpipe": "^1.0.0", - "unquote": "^1.1.1", - "upath": "^1.2.0", - "update-browserslist-db": "^1.0.10", - "uri-js": "^4.4.1", - "url-parse": "^1.5.10", - "util-deprecate": "^1.0.2", - "util.promisify": "^1.0.1", - "utila": "^0.4.0", - "utils-merge": "^1.0.1", - "uuid": "^8.3.2", - "v8-to-istanbul": "^8.1.1", - "vary": "^1.1.2", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "walker": "^1.0.8", - "watchpack": "^2.4.0", - "wbuf": "^1.7.3", - "web-vitals": "^2.1.4", - "webidl-conversions": "^6.1.0", - "webpack": "^5.77.0", - "webpack-dev-middleware": "^5.3.3", - "webpack-dev-server": "^4.13.2", - "webpack-manifest-plugin": "^4.1.1", - "webpack-sources": "^3.2.3", - "websocket-driver": "^0.7.4", - "websocket-extensions": "^0.1.4", - "whatwg-encoding": "^1.0.5", - "whatwg-fetch": "^3.6.2", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.7.0", - "which": "^2.0.2", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9", - "word-wrap": "^1.2.3", - "workbox-background-sync": "^6.5.4", - "workbox-broadcast-update": "^6.5.4", - "workbox-build": "^6.5.4", - "workbox-cacheable-response": "^6.5.4", - "workbox-core": "^6.5.4", - "workbox-expiration": "^6.5.4", - "workbox-google-analytics": "^6.5.4", - "workbox-navigation-preload": "^6.5.4", - "workbox-precaching": "^6.5.4", - "workbox-range-requests": "^6.5.4", - "workbox-recipes": "^6.5.4", - "workbox-routing": "^6.5.4", - "workbox-strategies": "^6.5.4", - "workbox-streams": "^6.5.4", - "workbox-sw": "^6.5.4", - "workbox-webpack-plugin": "^6.5.4", - "workbox-window": "^6.5.4", - "wrap-ansi": "^7.0.0", - "wrappy": "^1.0.2", - "write-file-atomic": "^3.0.3", - "ws": "^7.5.9", - "xml-name-validator": "^3.0.0", - "xmlchars": "^2.2.0", - "y18n": "^5.0.8", - "yallist": "^3.1.1", - "yaml": "^1.10.2", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yocto-queue": "^0.1.0" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC" -} diff --git a/contracts/amaci/scripts/index.ts b/contracts/amaci/scripts/index.ts deleted file mode 100644 index bb2cfc6..0000000 --- a/contracts/amaci/scripts/index.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { Secp256k1HdWallet, SigningCosmosClient } from "@cosmjs/launchpad"; -import { - DirectSecp256k1HdWallet, - OfflineDirectSigner, -} from "@cosmjs/proto-signing"; -import { - StargateClient, - SigningStargateClient, - IndexedTx, -} from "@cosmjs/stargate"; -import { MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx"; -import { Tx } from "cosmjs-types/cosmos/tx/v1beta1/tx"; -import { MaciClient, MaciQueryClient } from "../ts/Maci.client"; -import { - CosmWasmClient, - SigningCosmWasmClient, -} from "@cosmjs/cosmwasm-stargate"; - -const rpcEndpoint = "https://vota-testnet-rpc.dorafactory.org"; -const restEndpoint = "https://vota-testnet-rest.dorafactory.org"; -const mnemonic = ""; // dora1t58t7azqzq26406uwehgnfekal5kzym3m9lz4k; -const chainId = "doravota-devnet"; -const prefix = "dora"; -// const recipient = "dora1nt4elvrtc8yg772h9u24fusv78c2wv9zv0zusr"; - -(async () => { - const wallet = await Secp256k1HdWallet.fromMnemonic(mnemonic, { - prefix, - }); - const [{ address }] = await wallet.getAccounts(); - console.log("Address:", address); - - const client = await StargateClient.connect(rpcEndpoint); - - // 查询余额 - console.log( - "With client, chain id:", - await client.getChainId(), - ", height:", - await client.getHeight() - ); - console.log("Admin balances:", await client.getAllBalances(address)); - - // const faucetTx: IndexedTx = (await client.getTx( - // "40AACE3950400FF61B359B23558CDD9ACC68A63BD5F99F8EC062C3A47C3B918D" - // ))!; - // console.log("Faucet Tx:", faucetTx); - // const decodedTx: Tx = Tx.decode(faucetTx.tx); - // console.log("DecodedTx:", decodedTx); - // console.log("Decoded messages:", decodedTx.body!.messages); - // const sendMessage: MsgSend = MsgSend.decode( - // decodedTx.body!.messages[0].value - // ); - // console.log("Sent message:", sendMessage); - // const faucet: string = sendMessage.fromAddress; - // console.log("Faucet balances:", await client.getAllBalances(faucet)); - - // console.log("Gas fee:", decodedTx.authInfo!.fee!.amount); - // console.log("Gas limit:", decodedTx.authInfo!.fee!.gasLimit.toString(10)); - - // 构建和发送交易 - const signingClient = await SigningStargateClient.connectWithSigner( - rpcEndpoint, - wallet - ); - console.log( - "With signing client, chain id:", - await signingClient.getChainId(), - ", height:", - await signingClient.getHeight(), - ", time:", - await signingClient.getBlock() - ); - - console.log("Admin balance before:", await client.getAllBalances(address)); - // console.log( - // "Recipient balance before:", - // await client.getAllBalances(recipient) - // ); - // Execute the sendTokens Tx and store the result - // const result = await signingClient.sendTokens( - // address, - // recipient, - // [{ denom: "uDORA", amount: "1000" }], - // { - // amount: [{ denom: "uDORA", amount: "20" }], - // gas: "200000", - // }, - // ) - // // Output the result of the Tx - // console.log("Send tokens result:", result); - - const signingCosmWasmClient = await SigningCosmWasmClient.connectWithSigner( - rpcEndpoint, - wallet - ); - const cosmWasmClient = await CosmWasmClient.connect(rpcEndpoint); - - const contract = new MaciClient( - signingCosmWasmClient, - "dora1t58t7azqzq26406uwehgnfekal5kzym3m9lz4k", - "dora14dky5amkrl4nc0t47pcdth8fjh940mkyfcdup55medx5rj8gsxaqrst236" - ); - - // const res = await contract.issueBounty({ - // donationDenom: 'uDORA', - // }, { - // amount: [{ denom: "uDORA", amount: "20" }], - // gas: "200000", - // },) - // console.log("Issue bounty result:", res) - - // contract.getBounty({ - // bountyId: 0 - // }).then((res) => { - // console.log("Bounty:", res) - // }) - - // const res2 = await contract.contribute({ - // amount: "200", - // bountyId: 0, - // }, { - // amount: [{ denom: "uDORA", amount: "20" }], - // gas: "200000", - // }, undefined, [{ denom: "uDORA", amount: "200" }]) - // console.log("Contribute result:", res2) - - // contract.getBounty({ - // bountyId: 0 - // }).then((res) => { - // console.log("Bounty:", res) - // }) - - // const res3 = await contract.issueAndContribute( - // { amount: "200", donationDenom: "uDORA" }, - // { - // amount: [{ denom: "uDORA", amount: "20" }], - // gas: "200000", - // }, - // undefined, - // [{ denom: "uDORA", amount: "200" }] - // ); - // console.log("Issue and contribute result:", res3); - // console.log(JSON.stringify(res3, null, 2)); - - // const issueBountyEvent = res3.events.filter( - // (e) => e.type === "wasm-issue_bounty" - // )[0]; - // console.log("Issue bounty event:", issueBountyEvent); - // const { value: bountyId } = issueBountyEvent.attributes.filter( - // (e: any) => e.key === "id" - // )[0] as any; - - // const res4 = await contract.acceptFulfillment( - // { - // amounts: ["100", "100"], - // bountyId: parseInt(bountyId), - // fulfillers: [recipient, "dora1kw5qfnrxk9sw5gcyk3emktwtca94e5a4dau8y3"], - // }, - // { - // amount: [{ denom: "uDORA", amount: "20" }], - // gas: "200000", - // } - // ); - // console.log("Accept fulfillment result:", JSON.stringify(res4, null, 2)); - - // contract - // .getBounty({ - // bountyId: parseInt(bountyId), - // }) - // .then((res) => { - // console.log("Bounty:", res); - // }); -})(); diff --git a/contracts/amaci/src/circuit_params.rs b/contracts/amaci/src/circuit_params.rs index 370a19d..09c004f 100644 --- a/contracts/amaci/src/circuit_params.rs +++ b/contracts/amaci/src/circuit_params.rs @@ -89,7 +89,6 @@ pub fn match_vkeys(parameters: &MaciParameters) -> Result Uint256 { + let address_bytes = address.as_bytes(); + + // Use SHA256 hash to convert the address to a fixed-length 32-byte format + let mut hasher = Sha256::new(); + hasher.update(address_bytes); + let hash_result = hasher.finalize(); + + // Convert the hash bytes to Uint256 + let mut bytes = [0u8; 32]; + bytes.copy_from_slice(&hash_result[..]); + + // Convert bytes to Uint256 (big-endian) + let mut uint256_bytes = [0u8; 32]; + for (i, &byte) in bytes.iter().enumerate() { + uint256_bytes[31 - i] = byte; // Reverse for little-endian to big-endian conversion + } + + Uint256::from_be_bytes(uint256_bytes) +} + // version info for migration info const CONTRACT_NAME: &str = "crates.io:cw-amaci"; const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -57,7 +83,6 @@ pub fn instantiate( }; ADMIN.save(deps.storage, &admin)?; - // An error will be thrown if the number of vote options exceeds the circuit's capacity. let vote_option_max_amount = Uint256::from_u128( 5u128.pow( msg.parameters @@ -67,9 +92,10 @@ pub fn instantiate( .unwrap(), ), ); - if msg.max_vote_options > vote_option_max_amount { + let actual_vote_options = Uint256::from_u128(msg.vote_option_map.len() as u128); + if actual_vote_options > vote_option_max_amount { return Err(ContractError::MaxVoteOptionsExceeded { - current: msg.max_vote_options, + current: actual_vote_options, max_allowed: vote_option_max_amount, }); } @@ -122,6 +148,11 @@ pub fn instantiate( None => {} } + // Save oracle whitelist pubkey if provided + if let Some(oracle_pubkey) = msg.oracle_whitelist_pubkey { + ORACLE_WHITELIST_PUBKEY.save(deps.storage, &oracle_pubkey)?; + } + // Save the MACI parameters to storage MACIPARAMETERS.save(deps.storage, &msg.parameters)?; let qtr_lab = QuinaryTreeRoot { @@ -160,6 +191,13 @@ pub fn instantiate( // Save the pre_deactivate_root value to storage PRE_DEACTIVATE_ROOT.save(deps.storage, &msg.pre_deactivate_root)?; + // Calculate and save the pre_deactivate_coordinator hash if provided + if let Some(pre_deactivate_coordinator) = msg.pre_deactivate_coordinator { + let pre_deactivate_coordinator_hash = + hash2([pre_deactivate_coordinator.x, pre_deactivate_coordinator.y]); + PRE_DEACTIVATE_COORDINATOR_HASH.save(deps.storage, &pre_deactivate_coordinator_hash)?; + } + let vkey = match_vkeys(&msg.parameters)?; GROTH16_PROCESS_VKEYS.save(deps.storage, &vkey.process_vkey)?; @@ -202,7 +240,13 @@ pub fn instantiate( NODES.save( deps.storage, Uint256::from_u128(0u128).to_be_bytes().to_vec(), - &Uint256::from_u128(0u128), + &zeros_h10[msg + .parameters + .state_tree_depth + .to_string() + .parse::() + .unwrap()], + // &Uint256::from_u128(0u128), )?; // Define an array of zero values @@ -239,7 +283,10 @@ pub fn instantiate( CURRENT_TALLY_COMMITMENT.save(deps.storage, &Uint256::from_u128(0u128))?; PROCESSED_USER_COUNT.save(deps.storage, &Uint256::from_u128(0u128))?; NUMSIGNUPS.save(deps.storage, &Uint256::from_u128(0u128))?; - MAX_VOTE_OPTIONS.save(deps.storage, &msg.max_vote_options)?; + MAX_VOTE_OPTIONS.save( + deps.storage, + &Uint256::from_u128(msg.vote_option_map.len() as u128), + )?; VOICE_CREDIT_AMOUNT.save(deps.storage, &msg.voice_credit_amount)?; PROCESSED_DMSG_COUNT.save(deps.storage, &Uint256::from_u128(0u128))?; @@ -275,11 +322,7 @@ pub fn instantiate( &Uint256::from_u128(0u128), )?; - let mut vote_option_map: Vec = Vec::new(); - for _ in 0..msg.max_vote_options.to_string().parse().unwrap() { - vote_option_map.push(String::new()); - } - VOTEOPTIONMAP.save(deps.storage, &vote_option_map)?; + VOTEOPTIONMAP.save(deps.storage, &msg.vote_option_map)?; ROUNDINFO.save(deps.storage, &msg.round_info)?; VOTINGTIME.save(deps.storage, &msg.voting_time)?; @@ -293,7 +336,7 @@ pub fn instantiate( PERIOD.save(deps.storage, &period)?; MACI_OPERATOR.save(deps.storage, &msg.operator)?; - + FEE_RECIPIENT.save(deps.storage, &msg.fee_recipient)?; let circuit_type = if msg.circuit_type == Uint256::from_u128(0u128) { @@ -336,7 +379,8 @@ pub fn instantiate( coordinator: msg.coordinator.clone(), admin: msg.admin.clone(), operator: msg.operator.clone(), - max_vote_options: msg.max_vote_options.clone(), + vote_option_map: msg.vote_option_map.clone(), + // max_vote_options: Uint256::from_u128(msg.vote_option_map.len() as u128), voice_credit_amount: msg.voice_credit_amount.clone(), round_info: msg.round_info.clone(), voting_time: msg.voting_time.clone(), @@ -361,7 +405,7 @@ pub fn instantiate( attr("round_title", &msg.round_info.title.to_string()), attr("coordinator_pubkey_x", &msg.coordinator.x.to_string()), attr("coordinator_pubkey_y", &msg.coordinator.y.to_string()), - attr("max_vote_options", &msg.max_vote_options.to_string()), + attr("max_vote_options", &msg.vote_option_map.len().to_string()), attr("voice_credit_amount", &msg.voice_credit_amount.to_string()), attr("pre_deactivate_root", &msg.pre_deactivate_root.to_string()), attr( @@ -424,7 +468,10 @@ pub fn execute( execute_set_vote_options_map(deps, env, info, vote_option_map) } // ExecuteMsg::StartVotingPeriod {} => execute_start_voting_period(deps, env, info), - ExecuteMsg::SignUp { pubkey } => execute_sign_up(deps, env, info, pubkey), + ExecuteMsg::SignUp { + pubkey, + certificate, + } => execute_sign_up(deps, env, info, pubkey, certificate), // ExecuteMsg::StopVotingPeriod {} => execute_stop_voting_period(deps, env, info), ExecuteMsg::PublishDeactivateMessage { message, @@ -597,38 +644,100 @@ pub fn execute_set_vote_options_map( } } -// in voting +// in voting - unified signup for both traditional and oracle modes pub fn execute_sign_up( mut deps: DepsMut, env: Env, info: MessageInfo, pubkey: PubKey, + certificate: Option, ) -> Result { let voting_time = VOTINGTIME.load(deps.storage)?; - check_voting_time(env, voting_time)?; - if !is_whitelist(deps.as_ref(), &info.sender)? { - return Err(ContractError::Unauthorized {}); - } + check_voting_time(env.clone(), voting_time)?; - if is_register(deps.as_ref(), &info.sender)? { - return Err(ContractError::UserAlreadyRegistered {}); - } - // let user_balance = user_balance_of(deps.as_ref(), info.sender.as_ref())?; - // if user_balance == Uint256::from_u128(0u128) { - // return Err(ContractError::Unauthorized {}); - // } + // Determine which mode to use based on certificate parameter + let is_oracle_mode = certificate.is_some(); + + // Load voice credit amount (unified for both modes) let voice_credit_amount = VOICE_CREDIT_AMOUNT.load(deps.storage)?; - let mut num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + if is_oracle_mode { + // Oracle mode: verify signature using voice_credit_amount + let certificate = certificate.unwrap(); + + // Check if oracle whitelist pubkey exists + let oracle_whitelist_pubkey = ORACLE_WHITELIST_PUBKEY.may_load(deps.storage)?; + if oracle_whitelist_pubkey.is_none() { + return Err(ContractError::OracleWhitelistNotConfigured {}); + } + let oracle_pubkey_str = oracle_whitelist_pubkey.unwrap(); + + // Verify oracle signature using voice_credit_amount as the standard amount + // Convert contract address to uint256 format to match api-maci + let contract_address_uint256 = address_to_uint256(&env.contract.address); + + let payload = serde_json::json!({ + "amount": voice_credit_amount.to_string(), + "contract_address": contract_address_uint256.to_string(), + "pubkey_x": pubkey.x.to_string(), + "pubkey_y": pubkey.y.to_string(), + }); + + let msg = payload.to_string().into_bytes(); + let hash = Sha256::digest(&msg); + + let certificate_binary = + Binary::from_base64(&certificate).map_err(|_| ContractError::InvalidBase64 {})?; + let oracle_pubkey_binary = + Binary::from_base64(&oracle_pubkey_str).map_err(|_| ContractError::InvalidBase64 {})?; + let verify_result = deps + .api + .secp256k1_verify( + hash.as_ref(), + certificate_binary.as_slice(), + oracle_pubkey_binary.as_slice(), + ) + .map_err(|_| ContractError::VerificationFailed {})?; + if !verify_result { + return Err(ContractError::InvalidSignature {}); + } + + // Check if user already signed up in oracle mode - use pubkey instead of sender + if ORACLE_WHITELIST.has( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + ) { + return Err(ContractError::AlreadySignedUp {}); + } + + // Oracle verification passed - user is qualified + // In amaci, all verified users get the same voice_credit_amount + } else { + // Traditional mode: check if whitelist exists + let whitelist = WHITELIST.may_load(deps.storage)?; + if whitelist.is_none() { + return Err(ContractError::WhitelistNotConfigured {}); + } + // Traditional mode: check whitelist + if !is_whitelist(deps.as_ref(), &info.sender)? { + return Err(ContractError::Unauthorized {}); + } + + if is_register(deps.as_ref(), &info.sender)? { + return Err(ContractError::UserAlreadyRegistered {}); + } + } + + let mut num_sign_ups = NUMSIGNUPS.load(deps.storage)?; let max_leaves_count = MAX_LEAVES_COUNT.load(deps.storage)?; - // // Load the scalar field value + // Load the scalar field value let snark_scalar_field = uint256_from_hex_string("30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001"); - // let snark_scalar_field = uint256_from_decimal_string( - // "21888242871839275222246405745257275088548364400416034343698204186575808495617", - // ); // Check if the number of sign-ups is less than the maximum number of leaves assert!(num_sign_ups < max_leaves_count, "full"); @@ -638,7 +747,7 @@ pub fn execute_sign_up( "MACI: pubkey values should be less than the snark scalar field" ); - // Create a state leaf with the provided pubkey and amount + // Create a state leaf with the provided pubkey and voice credit amount let state_leaf = StateLeaf { pub_key: pubkey.clone(), voice_credit_balance: voice_credit_amount, @@ -652,22 +761,42 @@ pub fn execute_sign_up( state_enqueue(&mut deps, state_leaf)?; num_sign_ups += Uint256::from_u128(1u128); - // Save the updated state index, voice credit balance, and number of sign-ups - // STATEIDXINC.save(deps.storage, &info.sender, &num_sign_ups)?; - // VOICECREDITBALANCE.save( - // deps.storage, - // state_index.to_be_bytes().to_vec(), - // &voice_credit_amount, - // )?; + // Save the updated state index and number of sign-ups NUMSIGNUPS.save(deps.storage, &num_sign_ups)?; SIGNUPED.save(deps.storage, pubkey.x.to_be_bytes().to_vec(), &num_sign_ups)?; - let mut whitelist = WHITELIST.load(deps.storage)?; - whitelist.register(&info.sender); - WHITELIST.save(deps.storage, &whitelist)?; + // Update storage based on mode + if is_oracle_mode { + // Save oracle whitelist user - use pubkey instead of sender + let oracle_user = OracleWhitelistUser { + balance: voice_credit_amount, + is_register: true, + }; + ORACLE_WHITELIST.save( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + &oracle_user, + )?; + } else { + // Update traditional whitelist + let mut whitelist = WHITELIST.load(deps.storage)?; + whitelist.register(&info.sender); + WHITELIST.save(deps.storage, &whitelist)?; + } Ok(Response::new() .add_attribute("action", "sign_up") + .add_attribute( + "mode", + if is_oracle_mode { + "oracle" + } else { + "traditional" + }, + ) .add_attribute("state_idx", state_index.to_string()) .add_attribute( "pubkey", @@ -701,6 +830,15 @@ pub fn execute_publish_message( && enc_pub_key.x < snark_scalar_field && enc_pub_key.y < snark_scalar_field { + // Check if enc_pub_key has already been used + let pubkey_storage_key = generate_pubkey_storage_key(&enc_pub_key); + if USED_ENC_PUB_KEYS.has(deps.storage, pubkey_storage_key.clone()) { + return Err(ContractError::EncPubKeyAlreadyUsed {}); + } + + // Mark this enc_pub_key as used + USED_ENC_PUB_KEYS.save(deps.storage, pubkey_storage_key, &true)?; + let mut msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; let old_msg_hashes = MSG_HASHES.load(deps.storage, msg_chain_length.to_be_bytes().to_vec())?; @@ -758,10 +896,16 @@ pub fn execute_publish_deactivate_message( let maci_parameters: MaciParameters = MACIPARAMETERS.load(deps.storage)?; // Calculate maximum allowed deactivate messages: 5^(state_tree_depth+2)-1 - let max_deactivate_messages = Uint256::from_u128(5u128).pow((maci_parameters.state_tree_depth + - Uint256::from_u128(2u128)).to_string().parse().unwrap()) - Uint256::from_u128(1u128); + let max_deactivate_messages = Uint256::from_u128(5u128).pow( + (maci_parameters.state_tree_depth + Uint256::from_u128(2u128)) + .to_string() + .parse() + .unwrap(), + ) - Uint256::from_u128(1u128); if dmsg_chain_length + Uint256::from_u128(1u128) > max_deactivate_messages { - return Err(ContractError::MaxDeactivateMessagesReached { max_deactivate_messages }); + return Err(ContractError::MaxDeactivateMessagesReached { + max_deactivate_messages, + }); } // let snark_scalar_field = uint256_from_decimal_string( // "21888242871839275222246405745257275088548364400416034343698204186575808495617", @@ -1204,9 +1348,13 @@ pub fn execute_pre_add_new_key( let mut input: [Uint256; 7] = [Uint256::zero(); 7]; input[0] = PRE_DEACTIVATE_ROOT.load(deps.storage)?; - // input[1] = COORDINATORHASH.load(deps.storage)?; - input[1] = - uint256_from_hex_string("d53841ab0494365b341d519dcfaf0f69e375ffa406eb4484d38f55e9bdef10b"); + + // Use pre_deactivate_coordinator hash if available, otherwise fall back to COORDINATORHASH + input[1] = match PRE_DEACTIVATE_COORDINATOR_HASH.may_load(deps.storage)? { + Some(hash) => hash, + None => COORDINATORHASH.load(deps.storage)?, + }; + input[2] = nullifier; input[3] = d[0]; input[4] = d[1]; @@ -1478,11 +1626,17 @@ pub fn execute_stop_processing_period( return Err(ContractError::PeriodError {}); } - let processed_msg_count = PROCESSED_MSG_COUNT.load(deps.storage)?; - let msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; + let num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + + // If there are registered users, check if all messages have been processed + // If num_sign_ups is 0, skip the message processing check as all votes are invalid + if num_sign_ups != Uint256::zero() { + let processed_msg_count = PROCESSED_MSG_COUNT.load(deps.storage)?; + let msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; - if processed_msg_count != msg_chain_length { - return Err(ContractError::MsgLeftProcess {}); + if processed_msg_count != msg_chain_length { + return Err(ContractError::MsgLeftProcess {}); + } } let period = Period { @@ -1834,7 +1988,7 @@ fn execute_claim(deps: DepsMut, env: Env, _info: MessageInfo) -> Result = vec![]; - + // Send 10% to fee_recipient if !fee_amount.is_zero() { messages.push(CosmosMsg::Bank(BankMsg::Send { @@ -2009,6 +2163,14 @@ pub fn hash_message_and_enc_pub_key( return m_n_hash; } +// Generate storage key for PubKey +fn generate_pubkey_storage_key(pubkey: &PubKey) -> Vec { + let mut key = Vec::new(); + key.extend_from_slice(&pubkey.x.to_be_bytes()); + key.extend_from_slice(&pubkey.y.to_be_bytes()); + key +} + // Only admin can execute fn is_admin(deps: Deps, sender: &str) -> StdResult { let cfg = ADMIN.load(deps.storage)?; @@ -2115,6 +2277,10 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { .may_load(deps.storage)? .unwrap_or_default(), ), + QueryMsg::QueryPreDeactivateCoordinatorHash {} => { + let coordinator_hash = PRE_DEACTIVATE_COORDINATOR_HASH.may_load(deps.storage)?; + to_json_binary(&coordinator_hash) + } QueryMsg::GetDelayRecords {} => { let records = DELAY_RECORDS .may_load(deps.storage)? @@ -2126,6 +2292,28 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { .map_err(|e| cosmwasm_std::StdError::generic_err(e.to_string()))?; to_json_binary(&delay_info) } + QueryMsg::QueryOracleWhitelistConfig {} => { + let pubkey = ORACLE_WHITELIST_PUBKEY.may_load(deps.storage)?; + to_json_binary(&pubkey) + } + QueryMsg::CanSignUpWithOracle { + pubkey, + certificate, + } => { + let can_signup = can_sign_up_with_oracle(deps, _env, pubkey, certificate)?; + to_json_binary(&can_signup) + } + QueryMsg::WhiteBalanceOf { + pubkey, + certificate, + } => { + let balance = user_balance_of_oracle(deps, _env, pubkey, certificate)?; + to_json_binary(&balance) + } + QueryMsg::QueryCurrentStateCommitment {} => { + let current_state_commitment = CURRENT_STATE_COMMITMENT.may_load(deps.storage)?; + to_json_binary(¤t_state_commitment) + } } } @@ -2265,3 +2453,107 @@ pub fn calculate_tally_delay(deps: Deps) -> Result StdResult { + // Check if oracle whitelist pubkey exists + let oracle_whitelist_pubkey = ORACLE_WHITELIST_PUBKEY.may_load(deps.storage)?; + if oracle_whitelist_pubkey.is_none() { + return Ok(false); + } + let oracle_pubkey_str = oracle_whitelist_pubkey.unwrap(); + + // Use the contract's voice_credit_amount for verification + let voice_credit_amount = VOICE_CREDIT_AMOUNT.load(deps.storage)?; + + // Convert contract address to uint256 format to match api-maci + let contract_address_uint256 = address_to_uint256(&env.contract.address); + + let payload = serde_json::json!({ + "amount": voice_credit_amount.to_string(), + "contract_address": contract_address_uint256.to_string(), + "pubkey_x": pubkey.x.to_string(), + "pubkey_y": pubkey.y.to_string(), + }); + + let msg = payload.to_string().into_bytes(); + let hash = Sha256::digest(&msg); + + let certificate_binary = Binary::from_base64(&certificate)?; + let oracle_pubkey_binary = Binary::from_base64(&oracle_pubkey_str)?; + let verify_result = deps.api.secp256k1_verify( + hash.as_ref(), + certificate_binary.as_slice(), + oracle_pubkey_binary.as_slice(), + )?; + + Ok(verify_result) +} + +// Get user balance with oracle verification +fn user_balance_of_oracle( + deps: Deps, + env: Env, + pubkey: PubKey, + certificate: String, +) -> StdResult { + // Check if user already registered (by pubkey) + if ORACLE_WHITELIST.has( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + ) { + let cfg = ORACLE_WHITELIST.load( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + )?; + return Ok(cfg.balance_of()); + } + + // Check if oracle whitelist pubkey exists + let oracle_whitelist_pubkey = ORACLE_WHITELIST_PUBKEY.may_load(deps.storage)?; + if oracle_whitelist_pubkey.is_none() { + return Ok(Uint256::zero()); + } + let oracle_pubkey_str = oracle_whitelist_pubkey.unwrap(); + + // Use the contract's voice_credit_amount for verification + let voice_credit_amount = VOICE_CREDIT_AMOUNT.load(deps.storage)?; + + // Convert contract address to uint256 format to match api-maci + let contract_address_uint256 = address_to_uint256(&env.contract.address); + + let payload = serde_json::json!({ + "amount": voice_credit_amount.to_string(), + "contract_address": contract_address_uint256.to_string(), + "pubkey_x": pubkey.x.to_string(), + "pubkey_y": pubkey.y.to_string(), + }); + + let msg = payload.to_string().into_bytes(); + let hash = Sha256::digest(&msg); + + let certificate_binary = Binary::from_base64(&certificate)?; + let oracle_pubkey_binary = Binary::from_base64(&oracle_pubkey_str)?; + let verify_result = deps.api.secp256k1_verify( + hash.as_ref(), + certificate_binary.as_slice(), + oracle_pubkey_binary.as_slice(), + )?; + + if verify_result { + // Always return voice_credit_amount if verification passes + return Ok(voice_credit_amount); + } + Ok(Uint256::zero()) +} diff --git a/contracts/amaci/src/error.rs b/contracts/amaci/src/error.rs index 0500b3c..19ebfbd 100644 --- a/contracts/amaci/src/error.rs +++ b/contracts/amaci/src/error.rs @@ -128,4 +128,32 @@ pub enum ContractError { #[error("Maximum number of deactivate messages ({max_deactivate_messages}) has been reached")] MaxDeactivateMessagesReached { max_deactivate_messages: Uint256 }, + + #[error("Encrypted public key already used")] + EncPubKeyAlreadyUsed {}, + + // Oracle whitelist related errors + #[error("Amount is zero")] + AmountIsZero {}, + + #[error("Oracle whitelist not configured")] + OracleWhitelistNotConfigured {}, + + #[error("Whitelist not configured")] + WhitelistNotConfigured {}, + + #[error("Invalid base64 encoding")] + InvalidBase64 {}, + + #[error("Verification failed")] + VerificationFailed {}, + + #[error("Invalid signature")] + InvalidSignature {}, + + #[error("Already signed up")] + AlreadySignedUp {}, + + #[error("Voting power is zero")] + VotingPowerIsZero {}, } diff --git a/contracts/amaci/src/msg.rs b/contracts/amaci/src/msg.rs index 27a78fa..dc0a860 100644 --- a/contracts/amaci/src/msg.rs +++ b/contracts/amaci/src/msg.rs @@ -17,8 +17,8 @@ pub struct InstantiateMsg { // pub groth16_tally_vkey: Groth16VKeyType, // pub groth16_deactivate_vkey: Groth16VKeyType, // pub groth16_add_key_vkey: Groth16VKeyType, - pub max_vote_options: Uint256, pub voice_credit_amount: Uint256, + pub vote_option_map: Vec, pub round_info: RoundInfo, pub voting_time: VotingTime, @@ -28,6 +28,11 @@ pub struct InstantiateMsg { pub circuit_type: Uint256, // <0: 1p1v | 1: pv> pub certification_system: Uint256, // <0: groth16 | 1: plonk> + + // Oracle whitelist pubkey (optional) + pub oracle_whitelist_pubkey: Option, + // Pre Deactivate Coordinator + pub pre_deactivate_coordinator: Option, } #[cw_serde] @@ -70,6 +75,8 @@ pub enum ExecuteMsg { }, SignUp { pubkey: PubKey, // user's pubkey + // Oracle mode parameter (optional) + certificate: Option, }, StartProcessPeriod {}, PublishDeactivateMessage { @@ -210,11 +217,26 @@ pub enum QueryMsg { #[returns(Uint256)] QueryPreDeactivateRoot {}, + #[returns(Option)] + QueryPreDeactivateCoordinatorHash {}, + #[returns(DelayRecords)] GetDelayRecords {}, #[returns(TallyDelayInfo)] GetTallyDelay {}, + + #[returns(Option)] + QueryOracleWhitelistConfig {}, + + #[returns(bool)] + CanSignUpWithOracle { pubkey: PubKey, certificate: String }, + + #[returns(Uint256)] + WhiteBalanceOf { pubkey: PubKey, certificate: String }, + + #[returns(Uint256)] + QueryCurrentStateCommitment {}, } #[cw_serde] @@ -233,7 +255,8 @@ pub struct InstantiationData { pub coordinator: PubKey, pub admin: Addr, pub operator: Addr, - pub max_vote_options: Uint256, + pub vote_option_map: Vec, + // pub max_vote_options: Uint256, pub voice_credit_amount: Uint256, pub round_info: RoundInfo, pub voting_time: VotingTime, diff --git a/contracts/amaci/src/multitest/certificate_generator.rs b/contracts/amaci/src/multitest/certificate_generator.rs new file mode 100644 index 0000000..e1c4498 --- /dev/null +++ b/contracts/amaci/src/multitest/certificate_generator.rs @@ -0,0 +1,145 @@ +use base64::{engine::general_purpose, Engine as _}; +use cosmwasm_std::{Addr, Uint256}; +use secp256k1::{Message, PublicKey, Secp256k1, SecretKey}; +use serde_json; +use sha2::{Digest, Sha256}; + +// Private key (hex format) - Keep consistent with api-maci +const PRIVATE_KEY_HEX: &str = "84d85037a14db4a7a1424084cca70211685ad65f7325c4d26aca93edfb2995df"; + +// Pubkey (base64) - Keep consistent with api-maci +const PUBKEY_B64: &str = "A9ekxvWjYNpnHTasS008PG+EuF2ssIkUPaDdnn8ZdzTb"; + +/// Convert a contract address to Uint256 format +/// This function takes the address bytes and converts them to a Uint256 +fn address_to_uint256(address: &Addr) -> Uint256 { + let address_bytes = address.as_bytes(); + + // Use SHA256 hash to convert the address to a fixed-length 32-byte format + let mut hasher = Sha256::new(); + hasher.update(address_bytes); + let hash_result = hasher.finalize(); + + // Convert the hash bytes to Uint256 + let mut bytes = [0u8; 32]; + bytes.copy_from_slice(&hash_result[..]); + + // Convert bytes to Uint256 (big-endian) + let mut uint256_bytes = [0u8; 32]; + for (i, &byte) in bytes.iter().enumerate() { + uint256_bytes[31 - i] = byte; // Reverse for little-endian to big-endian conversion + } + + Uint256::from_be_bytes(uint256_bytes) +} + +/// Generate certificate for given user pubkey and amount (for amaci oracle mode) +pub fn generate_certificate_for_pubkey( + contract_address: &str, + pubkey_x: &str, + pubkey_y: &str, + amount: u128, +) -> String { + // Convert contract address to Uint256 format to match amaci logic + let addr = Addr::unchecked(contract_address); + let contract_address_uint256 = address_to_uint256(&addr); + + // Create payload matching the amaci oracle format + let payload = serde_json::json!({ + "amount": amount.to_string(), + "contract_address": contract_address_uint256.to_string(), + "pubkey_x": pubkey_x, + "pubkey_y": pubkey_y, + }); + + let msg = payload.to_string().into_bytes(); + let hash = Sha256::digest(&msg); + + // Parse private key + let private_key_bytes = hex::decode(PRIVATE_KEY_HEX).expect("Invalid private key hex"); + let secret_key = SecretKey::from_slice(&private_key_bytes).expect("Invalid private key"); + + // Create secp256k1 context + let secp = Secp256k1::new(); + + // Create message object + let message = Message::from_slice(&hash).expect("32 bytes"); + + // Sign + let signature = secp.sign_ecdsa(&message, &secret_key); + + // Serialize signature and convert to base64 + let signature_bytes = signature.serialize_compact(); + general_purpose::STANDARD.encode(&signature_bytes) +} + +/// Get backend public key for oracle verification +pub fn get_backend_pubkey() -> String { + PUBKEY_B64.to_string() +} + +/// Verify if public key matches private key +pub fn verify_keypair() -> bool { + let private_key_bytes = hex::decode(PRIVATE_KEY_HEX).expect("Invalid private key hex"); + let secret_key = SecretKey::from_slice(&private_key_bytes).expect("Invalid private key"); + + let secp = Secp256k1::new(); + let public_key = PublicKey::from_secret_key(&secp, &secret_key); + + // Expected public key (base64) + let expected_pubkey_b64 = PUBKEY_B64; + let expected_pubkey_bytes = general_purpose::STANDARD + .decode(expected_pubkey_b64) + .expect("Invalid base64"); + + // Compare public keys + public_key.serialize().to_vec() == expected_pubkey_bytes +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_keypair_match() { + assert!(verify_keypair(), "Public key and private key do not match"); + } + + #[test] + fn test_certificate_generation_for_pubkey() { + let pubkey_x = + "3557592161792765812904087712812111121909518311142005886657252371904276697771"; + let pubkey_y = + "4363822302427519764561660537570341277214758164895027920046745209970137856681"; + let certificate = generate_certificate_for_pubkey("contract0", pubkey_x, pubkey_y, 100u128); + + // Ensure certificate is not empty + assert!(!certificate.is_empty()); + + // Ensure certificate is valid base64 + assert!(general_purpose::STANDARD.decode(&certificate).is_ok()); + + println!("Generated certificate for pubkey: {}", certificate); + } + + #[test] + fn test_different_pubkeys() { + let pubkey0_x = + "3557592161792765812904087712812111121909518311142005886657252371904276697771"; + let pubkey0_y = + "4363822302427519764561660537570341277214758164895027920046745209970137856681"; + let pubkey1_x = + "1234567890123456789012345678901234567890123456789012345678901234567890123456"; + let pubkey1_y = + "9876543210987654321098765432109876543210987654321098765432109876543210987654"; + + let cert0 = generate_certificate_for_pubkey("contract0", pubkey0_x, pubkey0_y, 100u128); + let cert1 = generate_certificate_for_pubkey("contract0", pubkey1_x, pubkey1_y, 100u128); + + // Different pubkeys should have different certificates + assert_ne!(cert0, cert1); + + println!("Pubkey 0 certificate: {}", cert0); + println!("Pubkey 1 certificate: {}", cert1); + } +} diff --git a/contracts/amaci/src/multitest/mod.rs b/contracts/amaci/src/multitest/mod.rs index eb6c7f4..3bfe602 100644 --- a/contracts/amaci/src/multitest/mod.rs +++ b/contracts/amaci/src/multitest/mod.rs @@ -1,4 +1,6 @@ #[cfg(test)] +mod certificate_generator; +#[cfg(test)] mod tests; use anyhow::Result as AnyResult; @@ -325,8 +327,14 @@ impl MaciContract { "4363822302427519764561660537570341277214758164895027920046745209970137856681", ), }, - max_vote_options: Uint256::from_u128(5u128), voice_credit_amount: Uint256::from_u128(100u128), + vote_option_map: vec![ + "Option 1".to_string(), + "Option 2".to_string(), + "Option 3".to_string(), + "Option 4".to_string(), + "Option 5".to_string(), + ], pre_deactivate_root: Uint256::from_u128(0u128), round_info, whitelist, @@ -336,6 +344,8 @@ impl MaciContract { operator: operator(), admin: owner(), fee_recipient: fee_recipient(), + oracle_whitelist_pubkey: None, + pre_deactivate_coordinator: None, }; app.instantiate_contract( @@ -378,8 +388,14 @@ impl MaciContract { "4363822302427519764561660537570341277214758164895027920046745209970137856681", ), }, - max_vote_options: Uint256::from_u128(5u128), voice_credit_amount: Uint256::from_u128(100u128), + vote_option_map: vec![ + "Option 1".to_string(), + "Option 2".to_string(), + "Option 3".to_string(), + "Option 4".to_string(), + "Option 5".to_string(), + ], pre_deactivate_root: Uint256::from_u128(0u128), round_info, whitelist, @@ -389,6 +405,8 @@ impl MaciContract { operator: operator(), admin: owner(), fee_recipient: fee_recipient(), + oracle_whitelist_pubkey: None, + pre_deactivate_coordinator: None, }; app.instantiate_contract( @@ -404,7 +422,34 @@ impl MaciContract { #[track_caller] pub fn sign_up(&self, app: &mut App, sender: Addr, pubkey: PubKey) -> AnyResult { - app.execute_contract(sender, self.addr(), &ExecuteMsg::SignUp { pubkey }, &[]) + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SignUp { + pubkey, + certificate: None, + }, + &[], + ) + } + + #[track_caller] + pub fn sign_up_oracle( + &self, + app: &mut App, + sender: Addr, + pubkey: PubKey, + certificate: String, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SignUp { + pubkey, + certificate: Some(certificate), + }, + &[], + ) } #[track_caller] @@ -737,7 +782,34 @@ impl MaciContract { sender: Addr, pubkey: PubKey, ) -> AnyResult { - app.execute_contract(sender, self.addr(), &ExecuteMsg::SignUp { pubkey }, &[]) + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SignUp { + pubkey, + certificate: None, + }, + &[], + ) + } + + #[track_caller] + pub fn amaci_sign_up_oracle( + &self, + app: &mut DefaultApp, + sender: Addr, + pubkey: PubKey, + certificate: String, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SignUp { + pubkey, + certificate: Some(certificate), + }, + &[], + ) } #[track_caller] @@ -1091,6 +1163,68 @@ impl MaciContract { app.wrap() .query_wasm_smart(self.addr(), &QueryMsg::GetTallyDelay {}) } + + #[allow(clippy::too_many_arguments)] + #[track_caller] + pub fn instantiate_with_oracle( + app: &mut App, + code_id: MaciCodeId, + sender: Addr, + round_info: RoundInfo, + whitelist: Option, + voting_time: VotingTime, + circuit_type: Uint256, + certification_system: Uint256, + oracle_whitelist_pubkey: String, + label: &str, + ) -> AnyResult { + let parameters = MaciParameters { + state_tree_depth: Uint256::from_u128(2u128), + int_state_tree_depth: Uint256::from_u128(1u128), + message_batch_size: Uint256::from_u128(5u128), + vote_option_tree_depth: Uint256::from_u128(1u128), + }; + let init_msg = InstantiateMsg { + parameters, + coordinator: PubKey { + x: uint256_from_decimal_string( + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + ), + y: uint256_from_decimal_string( + "4363822302427519764561660537570341277214758164895027920046745209970137856681", + ), + }, + voice_credit_amount: Uint256::from_u128(100u128), + vote_option_map: vec![ + "Option 1".to_string(), + "Option 2".to_string(), + "Option 3".to_string(), + "Option 4".to_string(), + "Option 5".to_string(), + ], + pre_deactivate_root: Uint256::from_u128(0u128), + round_info, + whitelist, + voting_time, + circuit_type, + certification_system, + operator: operator(), + admin: owner(), + fee_recipient: fee_recipient(), + oracle_whitelist_pubkey: Some(oracle_whitelist_pubkey), + pre_deactivate_coordinator: None, + }; + + app.instantiate_contract( + code_id.0, + Addr::unchecked(sender), + &init_msg, + &[], + label, + None, + ) + .map(Self::from) + } } impl From for MaciContract { @@ -1122,3 +1256,31 @@ pub fn fee_recipient() -> Addr { pub fn operator() -> Addr { Addr::unchecked("operator") } + +// Test data for oracle mode +pub fn test_pubkey1() -> PubKey { + PubKey { + x: uint256_from_decimal_string( + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + ), + y: uint256_from_decimal_string( + "4363822302427519764561660537570341277214758164895027920046745209970137856681", + ), + } +} + +pub fn test_pubkey2() -> PubKey { + PubKey { + x: uint256_from_decimal_string( + "1234567890123456789012345678901234567890123456789012345678901234567890123456", + ), + y: uint256_from_decimal_string( + "9876543210987654321098765432109876543210987654321098765432109876543210987654", + ), + } +} + +// Generate test oracle pubkey +pub fn test_oracle_pubkey() -> String { + "A9ekxvWjYNpnHTasS008PG+EuF2ssIkUPaDdnn8ZdzTb".to_string() +} diff --git a/contracts/amaci/src/multitest/tests.rs b/contracts/amaci/src/multitest/tests.rs index 2d3e1e7..ef22932 100644 --- a/contracts/amaci/src/multitest/tests.rs +++ b/contracts/amaci/src/multitest/tests.rs @@ -2,8 +2,10 @@ mod test { use crate::error::ContractError; use crate::msg::Groth16ProofType; + use crate::multitest::certificate_generator::generate_certificate_for_pubkey; use crate::multitest::{ - create_app, owner, uint256_from_decimal_string, user1, user2, user3, MaciCodeId, + create_app, owner, test_oracle_pubkey, test_pubkey1, test_pubkey2, + uint256_from_decimal_string, user1, user2, user3, MaciCodeId, MaciContract, }; use crate::state::{ DelayRecord, DelayRecords, DelayType, MessageData, Period, PeriodStatus, PubKey, @@ -306,7 +308,7 @@ mod test { // ) // .unwrap_err(); // assert_eq!( - // // 注册之后不能再进行注册 + // // Cannot register again after registration // ContractError::Unauthorized {}, // sign_up_after_voting_end_error.downcast().unwrap() // ); @@ -590,7 +592,7 @@ mod test { // ) // .unwrap_err(); // assert_eq!( - // // 注册之后不能再进行注册 + // // Cannot register again after registration // ContractError::Unauthorized {}, // sign_up_after_voting_end_error.downcast().unwrap() // ); @@ -1062,7 +1064,7 @@ mod test { let new_tally_commitment = uint256_from_decimal_string(&data.new_tally_commitment); - let tally_proof = Groth16ProofType { + let tally_proof = Groth16ProofType { a: "24eefd06494531734508ae412053ed5688072c5fb4cf71fc3c8ec0d31f7d563f093e8b9a311e0caa1ba02de27e75c143f958248b5f486190edd8817f636f0ce8".to_string(), b: "1fc5e9cdc59c37c88c2a148ac2418659d6eea3448698b57d35c78c7c08b4c52921aa37dca6de3851abe0843338440de8024a6ece04d284e8abf2061a70be713f295339ddce483a56315c3feec141938028a544e62e38bb5bf050dd19146d9ab72b32fe75e87e6bd44ce0476177ebf796fc7eba01bcbf175ccbbd10e2f04a90f0".to_string(), c: "0ba9c3647f448b9ba9fcf39900c380dff4c9f0328529795f4013912b25a45b9f18f6ca48d63751f67800108105b7b34f88ddda72234ff7eda5c63de7bb90da48".to_string() @@ -1782,4 +1784,214 @@ mod test { } ); } + + #[test] + fn test_oracle_signup() { + let mut app = create_app(); + let code_id = MaciCodeId::store_code(&mut app); + let label = "Oracle Test"; + + // Create voting time period + let voting_time = crate::state::VotingTime { + start_time: Timestamp::from_seconds(1577836800), // 2020-01-01 + end_time: Timestamp::from_seconds(1577836800 + 11 * 60), // 2020-01-01 + 11 minutes + }; + + let round_info = crate::state::RoundInfo { + title: "Oracle Test Round".to_string(), + description: "Testing oracle signup functionality".to_string(), + link: "https://example.com".to_string(), + }; + + // Create contract with oracle configuration + let oracle_pubkey = test_oracle_pubkey(); + let contract = MaciContract::instantiate_with_oracle( + &mut app, + code_id, + owner(), + round_info, + None, // No traditional whitelist + voting_time, + Uint256::from_u128(0u128), // 1p1v + Uint256::from_u128(0u128), // groth16 + oracle_pubkey, + label, + ) + .unwrap(); + + // Set block time to be within voting period + app.update_block(|block| { + block.time = Timestamp::from_seconds(1577836800 + 5 * 60); // 5 minutes after start + }); + + // Test pubkeys and contract address for certificate generation + let pubkey1 = test_pubkey1(); + let pubkey2 = test_pubkey2(); + let contract_addr = contract.addr().to_string(); + + // Generate certificates for both test users + let cert1 = generate_certificate_for_pubkey( + &contract_addr, + &pubkey1.x.to_string(), + &pubkey1.y.to_string(), + 100u128, // amount = 100 (voice_credit_amount) + ); + + let cert2 = generate_certificate_for_pubkey( + &contract_addr, + &pubkey2.x.to_string(), + &pubkey2.y.to_string(), + 100u128, // amount = 100 (voice_credit_amount) + ); + + // Test oracle signup for user1 + let response1 = contract + .sign_up_oracle(&mut app, user1(), pubkey1.clone(), cert1) + .unwrap(); + assert!(response1.events.iter().any(|e| { + e.attributes + .iter() + .any(|attr| attr.key == "action" && attr.value == "sign_up") + })); + assert!(response1.events.iter().any(|e| { + e.attributes + .iter() + .any(|attr| attr.key == "mode" && attr.value == "oracle") + })); + + // Test oracle signup for user2 + let response2 = contract + .sign_up_oracle(&mut app, user2(), pubkey2.clone(), cert2) + .unwrap(); + assert!(response2.events.iter().any(|e| { + e.attributes + .iter() + .any(|attr| attr.key == "action" && attr.value == "sign_up") + })); + + // Verify signup count + let num_signups = contract.num_sign_up(&app).unwrap(); + assert_eq!(num_signups, Uint256::from_u128(2u128)); + + // Test duplicate signup should fail + let cert1_duplicate = generate_certificate_for_pubkey( + &contract_addr, + &pubkey1.x.to_string(), + &pubkey1.y.to_string(), + 100u128, + ); + + let duplicate_signup_error = contract + .sign_up_oracle(&mut app, user1(), pubkey1, cert1_duplicate) + .unwrap_err(); + assert_eq!( + ContractError::AlreadySignedUp {}, + duplicate_signup_error.downcast().unwrap() + ); + } + + #[test] + fn test_oracle_signup_invalid_certificate() { + let mut app = create_app(); + let code_id = MaciCodeId::store_code(&mut app); + let label = "Oracle Invalid Cert Test"; + + // Create voting time period + let voting_time = crate::state::VotingTime { + start_time: Timestamp::from_seconds(1577836800), + end_time: Timestamp::from_seconds(1577836800 + 11 * 60), // +11 minutes + }; + + let round_info = crate::state::RoundInfo { + title: "Oracle Invalid Cert Test".to_string(), + description: "Testing invalid certificate".to_string(), + link: "https://example.com".to_string(), + }; + + // Create contract with oracle configuration + let oracle_pubkey = test_oracle_pubkey(); + let contract = MaciContract::instantiate_with_oracle( + &mut app, + code_id, + owner(), + round_info, + None, + voting_time, + Uint256::from_u128(0u128), + Uint256::from_u128(0u128), + oracle_pubkey, + label, + ) + .unwrap(); + + // Set block time to be within voting period + app.update_block(|block| { + block.time = Timestamp::from_seconds(1577836800 + 5 * 60); // 5 minutes after start + }); + + let pubkey1 = test_pubkey1(); + + // Try signup with invalid certificate + let invalid_cert = "invalid_base64_certificate"; + let invalid_cert_error = contract + .sign_up_oracle(&mut app, user1(), pubkey1, invalid_cert.to_string()) + .unwrap_err(); + + // Should fail with InvalidBase64 or InvalidSignature error + let error = invalid_cert_error.downcast::().unwrap(); + assert!(matches!( + error, + ContractError::InvalidBase64 {} | ContractError::InvalidSignature {} + )); + } + + #[test] + fn test_oracle_without_config() { + let mut app = create_app(); + let code_id = MaciCodeId::store_code(&mut app); + let label = "Oracle No Config Test"; + + let voting_time = crate::state::VotingTime { + start_time: Timestamp::from_seconds(1577836800), + end_time: Timestamp::from_seconds(1577836800 + 11 * 60), // +11 minutes + }; + + let round_info = crate::state::RoundInfo { + title: "Oracle No Config Test".to_string(), + description: "Testing oracle without config".to_string(), + link: "https://example.com".to_string(), + }; + + // Create contract WITHOUT oracle configuration + let contract = MaciContract::instantiate( + &mut app, + code_id, + owner(), + round_info, + None, + voting_time, + Uint256::from_u128(0u128), + Uint256::from_u128(0u128), + label, + ) + .unwrap(); + + // Set block time to be within voting period + app.update_block(|block| { + block.time = Timestamp::from_seconds(1577836800 + 5 * 60); // 5 minutes after start + }); + + let pubkey1 = test_pubkey1(); + let fake_cert = "fake_certificate"; + + // Try oracle signup without oracle config + let no_config_error = contract + .sign_up_oracle(&mut app, user1(), pubkey1, fake_cert.to_string()) + .unwrap_err(); + + assert_eq!( + ContractError::OracleWhitelistNotConfigured {}, + no_config_error.downcast().unwrap() + ); + } } diff --git a/contracts/amaci/src/state.rs b/contracts/amaci/src/state.rs index 474597c..9ba5884 100644 --- a/contracts/amaci/src/state.rs +++ b/contracts/amaci/src/state.rs @@ -147,6 +147,9 @@ pub const MSG_CHAIN_LENGTH: Item = Item::new("msg_chain_length"); pub const PROCESSED_MSG_COUNT: Item = Item::new("processed_msg_count"); pub const PROCESSED_USER_COUNT: Item = Item::new("processed_user_count"); +// Storage for tracking used enc_pub_keys to ensure uniqueness +pub const USED_ENC_PUB_KEYS: Map, bool> = Map::new("used_enc_pub_keys"); + pub const DMSG_CHAIN_LENGTH: Item = Item::new("dmsg_chain_length"); pub const DMSG_HASHES: Map, Uint256> = Map::new("dmsg_hashes"); pub const STATE_ROOT_BY_DMSG: Map, Uint256> = Map::new("state_root_by_dmsg"); @@ -157,6 +160,8 @@ pub const NULLIFIERS: Map, bool> = Map::new("nullifiers"); pub const CURRENT_DEACTIVATE_COMMITMENT: Item = Item::new("current_deactivate_commitment"); pub const SIGNUPED: Map, Uint256> = Map::new("signuped"); pub const PRE_DEACTIVATE_ROOT: Item = Item::new("pre_deactivate_root"); +pub const PRE_DEACTIVATE_COORDINATOR_HASH: Item = + Item::new("pre_deactivate_coordinator_hash"); pub const DEACTIVATE_COUNT: Item = Item::new("deactivate_count"); @@ -346,6 +351,29 @@ pub struct DelayRecords { pub const DELAY_RECORDS: Item = Item::new("delay_records"); +// Oracle whitelist backend pubkey +pub const ORACLE_WHITELIST_PUBKEY: Item = Item::new("oracle_whitelist_pubkey"); + +// Oracle whitelist storage per user +#[cw_serde] +pub struct OracleWhitelistUser { + pub balance: Uint256, + pub is_register: bool, +} + +impl OracleWhitelistUser { + pub fn register(&mut self) { + self.is_register = true; + } + + pub fn balance_of(&self) -> Uint256 { + return self.balance; + } +} + +pub const ORACLE_WHITELIST: Map<&(Vec, Vec), OracleWhitelistUser> = + Map::new("oracle_whitelist"); + #[cfg(test)] mod tests { use super::*; diff --git a/contracts/amaci/ts/AMaci.client.ts b/contracts/amaci/ts/AMaci.client.ts new file mode 100644 index 0000000..306cd39 --- /dev/null +++ b/contracts/amaci/ts/AMaci.client.ts @@ -0,0 +1,666 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; +import { Coin, StdFee } from "@cosmjs/amino"; +import { Addr, Uint256, Timestamp, Uint64, InstantiateMsg, PubKey, MaciParameters, RoundInfo, VotingTime, WhitelistBase, WhitelistBaseConfig, ExecuteMsg, MessageData, Groth16ProofType, QueryMsg, Boolean, DelayType, DelayRecords, DelayRecord, PeriodStatus, Period, TallyDelayInfo, NullableString, NullableUint256, Uint128, ArrayOfString, Whitelist, WhitelistConfig } from "./AMaci.types"; +export interface AMaciReadOnlyInterface { + contractAddress: string; + admin: () => Promise; + operator: () => Promise; + getRoundInfo: () => Promise; + getVotingTime: () => Promise; + getPeriod: () => Promise; + getNumSignUp: () => Promise; + getMsgChainLength: () => Promise; + getDMsgChainLength: () => Promise; + getProcessedDMsgCount: () => Promise; + getProcessedMsgCount: () => Promise; + getProcessedUserCount: () => Promise; + getResult: ({ + index + }: { + index: Uint256; + }) => Promise; + getAllResult: () => Promise; + getStateIdxInc: ({ + address + }: { + address: Addr; + }) => Promise; + getVoiceCreditBalance: ({ + index + }: { + index: Uint256; + }) => Promise; + getVoiceCreditAmount: () => Promise; + whiteList: () => Promise; + canSignUp: ({ + sender + }: { + sender: Addr; + }) => Promise; + isWhiteList: ({ + sender + }: { + sender: Addr; + }) => Promise; + isRegister: ({ + sender + }: { + sender: Addr; + }) => Promise; + signuped: ({ + pubkeyX + }: { + pubkeyX: Uint256; + }) => Promise; + voteOptionMap: () => Promise; + maxVoteOptions: () => Promise; + queryTotalFeeGrant: () => Promise; + queryCircuitType: () => Promise; + queryCertSystem: () => Promise; + queryPreDeactivateRoot: () => Promise; + queryPreDeactivateCoordinatorHash: () => Promise; + getDelayRecords: () => Promise; + getTallyDelay: () => Promise; + queryOracleWhitelistConfig: () => Promise; + canSignUpWithOracle: ({ + certificate, + pubkey + }: { + certificate: string; + pubkey: PubKey; + }) => Promise; + whiteBalanceOf: ({ + certificate, + pubkey + }: { + certificate: string; + pubkey: PubKey; + }) => Promise; +} +export class AMaciQueryClient implements AMaciReadOnlyInterface { + client: CosmWasmClient; + contractAddress: string; + constructor(client: CosmWasmClient, contractAddress: string) { + this.client = client; + this.contractAddress = contractAddress; + this.admin = this.admin.bind(this); + this.operator = this.operator.bind(this); + this.getRoundInfo = this.getRoundInfo.bind(this); + this.getVotingTime = this.getVotingTime.bind(this); + this.getPeriod = this.getPeriod.bind(this); + this.getNumSignUp = this.getNumSignUp.bind(this); + this.getMsgChainLength = this.getMsgChainLength.bind(this); + this.getDMsgChainLength = this.getDMsgChainLength.bind(this); + this.getProcessedDMsgCount = this.getProcessedDMsgCount.bind(this); + this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this); + this.getProcessedUserCount = this.getProcessedUserCount.bind(this); + this.getResult = this.getResult.bind(this); + this.getAllResult = this.getAllResult.bind(this); + this.getStateIdxInc = this.getStateIdxInc.bind(this); + this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this); + this.getVoiceCreditAmount = this.getVoiceCreditAmount.bind(this); + this.whiteList = this.whiteList.bind(this); + this.canSignUp = this.canSignUp.bind(this); + this.isWhiteList = this.isWhiteList.bind(this); + this.isRegister = this.isRegister.bind(this); + this.signuped = this.signuped.bind(this); + this.voteOptionMap = this.voteOptionMap.bind(this); + this.maxVoteOptions = this.maxVoteOptions.bind(this); + this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this); + this.queryCircuitType = this.queryCircuitType.bind(this); + this.queryCertSystem = this.queryCertSystem.bind(this); + this.queryPreDeactivateRoot = this.queryPreDeactivateRoot.bind(this); + this.queryPreDeactivateCoordinatorHash = this.queryPreDeactivateCoordinatorHash.bind(this); + this.getDelayRecords = this.getDelayRecords.bind(this); + this.getTallyDelay = this.getTallyDelay.bind(this); + this.queryOracleWhitelistConfig = this.queryOracleWhitelistConfig.bind(this); + this.canSignUpWithOracle = this.canSignUpWithOracle.bind(this); + this.whiteBalanceOf = this.whiteBalanceOf.bind(this); + } + admin = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + admin: {} + }); + }; + operator = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + operator: {} + }); + }; + getRoundInfo = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_round_info: {} + }); + }; + getVotingTime = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_voting_time: {} + }); + }; + getPeriod = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_period: {} + }); + }; + getNumSignUp = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_num_sign_up: {} + }); + }; + getMsgChainLength = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_msg_chain_length: {} + }); + }; + getDMsgChainLength = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_d_msg_chain_length: {} + }); + }; + getProcessedDMsgCount = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_processed_d_msg_count: {} + }); + }; + getProcessedMsgCount = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_processed_msg_count: {} + }); + }; + getProcessedUserCount = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_processed_user_count: {} + }); + }; + getResult = async ({ + index + }: { + index: Uint256; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_result: { + index + } + }); + }; + getAllResult = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_all_result: {} + }); + }; + getStateIdxInc = async ({ + address + }: { + address: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_state_idx_inc: { + address + } + }); + }; + getVoiceCreditBalance = async ({ + index + }: { + index: Uint256; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_voice_credit_balance: { + index + } + }); + }; + getVoiceCreditAmount = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_voice_credit_amount: {} + }); + }; + whiteList = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + white_list: {} + }); + }; + canSignUp = async ({ + sender + }: { + sender: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + can_sign_up: { + sender + } + }); + }; + isWhiteList = async ({ + sender + }: { + sender: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + is_white_list: { + sender + } + }); + }; + isRegister = async ({ + sender + }: { + sender: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + is_register: { + sender + } + }); + }; + signuped = async ({ + pubkeyX + }: { + pubkeyX: Uint256; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + signuped: { + pubkey_x: pubkeyX + } + }); + }; + voteOptionMap = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + vote_option_map: {} + }); + }; + maxVoteOptions = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + max_vote_options: {} + }); + }; + queryTotalFeeGrant = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_total_fee_grant: {} + }); + }; + queryCircuitType = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_circuit_type: {} + }); + }; + queryCertSystem = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_cert_system: {} + }); + }; + queryPreDeactivateRoot = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_pre_deactivate_root: {} + }); + }; + queryPreDeactivateCoordinatorHash = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_pre_deactivate_coordinator_hash: {} + }); + }; + getDelayRecords = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_delay_records: {} + }); + }; + getTallyDelay = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_tally_delay: {} + }); + }; + queryOracleWhitelistConfig = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_oracle_whitelist_config: {} + }); + }; + canSignUpWithOracle = async ({ + certificate, + pubkey + }: { + certificate: string; + pubkey: PubKey; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + can_sign_up_with_oracle: { + certificate, + pubkey + } + }); + }; + whiteBalanceOf = async ({ + certificate, + pubkey + }: { + certificate: string; + pubkey: PubKey; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + white_balance_of: { + certificate, + pubkey + } + }); + }; +} +export interface AMaciInterface extends AMaciReadOnlyInterface { + contractAddress: string; + sender: string; + setRoundInfo: ({ + roundInfo + }: { + roundInfo: RoundInfo; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + setWhitelists: ({ + whitelists + }: { + whitelists: WhitelistBase; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + setVoteOptionsMap: ({ + voteOptionMap + }: { + voteOptionMap: string[]; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + signUp: ({ + certificate, + pubkey + }: { + certificate?: string; + pubkey: PubKey; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + startProcessPeriod: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + publishDeactivateMessage: ({ + encPubKey, + message + }: { + encPubKey: PubKey; + message: MessageData; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + processDeactivateMessage: ({ + groth16Proof, + newDeactivateCommitment, + newDeactivateRoot, + size + }: { + groth16Proof: Groth16ProofType; + newDeactivateCommitment: Uint256; + newDeactivateRoot: Uint256; + size: Uint256; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + addNewKey: ({ + d, + groth16Proof, + nullifier, + pubkey + }: { + d: Uint256[]; + groth16Proof: Groth16ProofType; + nullifier: Uint256; + pubkey: PubKey; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + preAddNewKey: ({ + d, + groth16Proof, + nullifier, + pubkey + }: { + d: Uint256[]; + groth16Proof: Groth16ProofType; + nullifier: Uint256; + pubkey: PubKey; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + publishMessage: ({ + encPubKey, + message + }: { + encPubKey: PubKey; + message: MessageData; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + processMessage: ({ + groth16Proof, + newStateCommitment + }: { + groth16Proof: Groth16ProofType; + newStateCommitment: Uint256; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + stopProcessingPeriod: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + processTally: ({ + groth16Proof, + newTallyCommitment + }: { + groth16Proof: Groth16ProofType; + newTallyCommitment: Uint256; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + stopTallyingPeriod: ({ + results, + salt + }: { + results: Uint256[]; + salt: Uint256; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + claim: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; +} +export class AMaciClient extends AMaciQueryClient implements AMaciInterface { + client: SigningCosmWasmClient; + sender: string; + contractAddress: string; + constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + super(client, contractAddress); + this.client = client; + this.sender = sender; + this.contractAddress = contractAddress; + this.setRoundInfo = this.setRoundInfo.bind(this); + this.setWhitelists = this.setWhitelists.bind(this); + this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this); + this.signUp = this.signUp.bind(this); + this.startProcessPeriod = this.startProcessPeriod.bind(this); + this.publishDeactivateMessage = this.publishDeactivateMessage.bind(this); + this.processDeactivateMessage = this.processDeactivateMessage.bind(this); + this.addNewKey = this.addNewKey.bind(this); + this.preAddNewKey = this.preAddNewKey.bind(this); + this.publishMessage = this.publishMessage.bind(this); + this.processMessage = this.processMessage.bind(this); + this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this); + this.processTally = this.processTally.bind(this); + this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this); + this.claim = this.claim.bind(this); + } + setRoundInfo = async ({ + roundInfo + }: { + roundInfo: RoundInfo; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_round_info: { + round_info: roundInfo + } + }, fee, memo, _funds); + }; + setWhitelists = async ({ + whitelists + }: { + whitelists: WhitelistBase; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_whitelists: { + whitelists + } + }, fee, memo, _funds); + }; + setVoteOptionsMap = async ({ + voteOptionMap + }: { + voteOptionMap: string[]; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_vote_options_map: { + vote_option_map: voteOptionMap + } + }, fee, memo, _funds); + }; + signUp = async ({ + certificate, + pubkey + }: { + certificate?: string; + pubkey: PubKey; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + sign_up: { + certificate, + pubkey + } + }, fee, memo, _funds); + }; + startProcessPeriod = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + start_process_period: {} + }, fee, memo, _funds); + }; + publishDeactivateMessage = async ({ + encPubKey, + message + }: { + encPubKey: PubKey; + message: MessageData; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + publish_deactivate_message: { + enc_pub_key: encPubKey, + message + } + }, fee, memo, _funds); + }; + processDeactivateMessage = async ({ + groth16Proof, + newDeactivateCommitment, + newDeactivateRoot, + size + }: { + groth16Proof: Groth16ProofType; + newDeactivateCommitment: Uint256; + newDeactivateRoot: Uint256; + size: Uint256; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + process_deactivate_message: { + groth16_proof: groth16Proof, + new_deactivate_commitment: newDeactivateCommitment, + new_deactivate_root: newDeactivateRoot, + size + } + }, fee, memo, _funds); + }; + addNewKey = async ({ + d, + groth16Proof, + nullifier, + pubkey + }: { + d: Uint256[]; + groth16Proof: Groth16ProofType; + nullifier: Uint256; + pubkey: PubKey; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + add_new_key: { + d, + groth16_proof: groth16Proof, + nullifier, + pubkey + } + }, fee, memo, _funds); + }; + preAddNewKey = async ({ + d, + groth16Proof, + nullifier, + pubkey + }: { + d: Uint256[]; + groth16Proof: Groth16ProofType; + nullifier: Uint256; + pubkey: PubKey; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + pre_add_new_key: { + d, + groth16_proof: groth16Proof, + nullifier, + pubkey + } + }, fee, memo, _funds); + }; + publishMessage = async ({ + encPubKey, + message + }: { + encPubKey: PubKey; + message: MessageData; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + publish_message: { + enc_pub_key: encPubKey, + message + } + }, fee, memo, _funds); + }; + processMessage = async ({ + groth16Proof, + newStateCommitment + }: { + groth16Proof: Groth16ProofType; + newStateCommitment: Uint256; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + process_message: { + groth16_proof: groth16Proof, + new_state_commitment: newStateCommitment + } + }, fee, memo, _funds); + }; + stopProcessingPeriod = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + stop_processing_period: {} + }, fee, memo, _funds); + }; + processTally = async ({ + groth16Proof, + newTallyCommitment + }: { + groth16Proof: Groth16ProofType; + newTallyCommitment: Uint256; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + process_tally: { + groth16_proof: groth16Proof, + new_tally_commitment: newTallyCommitment + } + }, fee, memo, _funds); + }; + stopTallyingPeriod = async ({ + results, + salt + }: { + results: Uint256[]; + salt: Uint256; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + stop_tallying_period: { + results, + salt + } + }, fee, memo, _funds); + }; + claim = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + claim: {} + }, fee, memo, _funds); + }; +} \ No newline at end of file diff --git a/contracts/amaci/ts/AMaci.types.ts b/contracts/amaci/ts/AMaci.types.ts new file mode 100644 index 0000000..675de87 --- /dev/null +++ b/contracts/amaci/ts/AMaci.types.ts @@ -0,0 +1,251 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +export type Addr = string; +export type Uint256 = string; +export type Timestamp = Uint64; +export type Uint64 = string; +export interface InstantiateMsg { + admin: Addr; + certification_system: Uint256; + circuit_type: Uint256; + coordinator: PubKey; + fee_recipient: Addr; + operator: Addr; + oracle_whitelist_pubkey?: string | null; + parameters: MaciParameters; + pre_deactivate_coordinator?: PubKey | null; + pre_deactivate_root: Uint256; + round_info: RoundInfo; + voice_credit_amount: Uint256; + vote_option_map: string[]; + voting_time: VotingTime; + whitelist?: WhitelistBase | null; +} +export interface PubKey { + x: Uint256; + y: Uint256; +} +export interface MaciParameters { + int_state_tree_depth: Uint256; + message_batch_size: Uint256; + state_tree_depth: Uint256; + vote_option_tree_depth: Uint256; +} +export interface RoundInfo { + description: string; + link: string; + title: string; +} +export interface VotingTime { + end_time: Timestamp; + start_time: Timestamp; +} +export interface WhitelistBase { + users: WhitelistBaseConfig[]; +} +export interface WhitelistBaseConfig { + addr: Addr; +} +export type ExecuteMsg = { + set_round_info: { + round_info: RoundInfo; + }; +} | { + set_whitelists: { + whitelists: WhitelistBase; + }; +} | { + set_vote_options_map: { + vote_option_map: string[]; + }; +} | { + sign_up: { + certificate?: string | null; + pubkey: PubKey; + }; +} | { + start_process_period: {}; +} | { + publish_deactivate_message: { + enc_pub_key: PubKey; + message: MessageData; + }; +} | { + process_deactivate_message: { + groth16_proof: Groth16ProofType; + new_deactivate_commitment: Uint256; + new_deactivate_root: Uint256; + size: Uint256; + }; +} | { + add_new_key: { + d: [Uint256, Uint256, Uint256, Uint256]; + groth16_proof: Groth16ProofType; + nullifier: Uint256; + pubkey: PubKey; + }; +} | { + pre_add_new_key: { + d: [Uint256, Uint256, Uint256, Uint256]; + groth16_proof: Groth16ProofType; + nullifier: Uint256; + pubkey: PubKey; + }; +} | { + publish_message: { + enc_pub_key: PubKey; + message: MessageData; + }; +} | { + process_message: { + groth16_proof: Groth16ProofType; + new_state_commitment: Uint256; + }; +} | { + stop_processing_period: {}; +} | { + process_tally: { + groth16_proof: Groth16ProofType; + new_tally_commitment: Uint256; + }; +} | { + stop_tallying_period: { + results: Uint256[]; + salt: Uint256; + }; +} | { + claim: {}; +}; +export interface MessageData { + data: [Uint256, Uint256, Uint256, Uint256, Uint256, Uint256, Uint256]; +} +export interface Groth16ProofType { + a: string; + b: string; + c: string; +} +export type QueryMsg = { + admin: {}; +} | { + operator: {}; +} | { + get_round_info: {}; +} | { + get_voting_time: {}; +} | { + get_period: {}; +} | { + get_num_sign_up: {}; +} | { + get_msg_chain_length: {}; +} | { + get_d_msg_chain_length: {}; +} | { + get_processed_d_msg_count: {}; +} | { + get_processed_msg_count: {}; +} | { + get_processed_user_count: {}; +} | { + get_result: { + index: Uint256; + }; +} | { + get_all_result: {}; +} | { + get_state_idx_inc: { + address: Addr; + }; +} | { + get_voice_credit_balance: { + index: Uint256; + }; +} | { + get_voice_credit_amount: {}; +} | { + white_list: {}; +} | { + can_sign_up: { + sender: Addr; + }; +} | { + is_white_list: { + sender: Addr; + }; +} | { + is_register: { + sender: Addr; + }; +} | { + signuped: { + pubkey_x: Uint256; + }; +} | { + vote_option_map: {}; +} | { + max_vote_options: {}; +} | { + query_total_fee_grant: {}; +} | { + query_circuit_type: {}; +} | { + query_cert_system: {}; +} | { + query_pre_deactivate_root: {}; +} | { + query_pre_deactivate_coordinator_hash: {}; +} | { + get_delay_records: {}; +} | { + get_tally_delay: {}; +} | { + query_oracle_whitelist_config: {}; +} | { + can_sign_up_with_oracle: { + certificate: string; + pubkey: PubKey; + }; +} | { + white_balance_of: { + certificate: string; + pubkey: PubKey; + }; +}; +export type Boolean = boolean; +export type DelayType = "deactivate_delay" | "tally_delay"; +export interface DelayRecords { + records: DelayRecord[]; +} +export interface DelayRecord { + delay_duration: number; + delay_process_dmsg_count: Uint256; + delay_reason: string; + delay_timestamp: Timestamp; + delay_type: DelayType; +} +export type PeriodStatus = "pending" | "voting" | "processing" | "tallying" | "ended"; +export interface Period { + status: PeriodStatus; +} +export interface TallyDelayInfo { + calculated_hours: number; + delay_seconds: number; + msg_chain_length: Uint256; + num_sign_ups: Uint256; + total_work: number; +} +export type NullableString = string | null; +export type NullableUint256 = Uint256 | null; +export type Uint128 = string; +export type ArrayOfString = string[]; +export interface Whitelist { + users: WhitelistConfig[]; +} +export interface WhitelistConfig { + addr: Addr; + is_register: boolean; +} \ No newline at end of file diff --git a/contracts/amaci/yarn.lock b/contracts/amaci/yarn.lock deleted file mode 100644 index ee6dbce..0000000 --- a/contracts/amaci/yarn.lock +++ /dev/null @@ -1,10184 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@apideck/better-ajv-errors@^0.3.1": - version "0.3.6" - resolved "https://registry.npmmirror.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" - integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== - dependencies: - json-schema "^0.4.0" - jsonpointer "^5.0.0" - leven "^3.1.0" - -"@aptos-labs/aptos-client@^0.0.2": - version "0.0.2" - resolved "https://registry.npmmirror.com/@aptos-labs/aptos-client/-/aptos-client-0.0.2.tgz#e8266a731a9a906d1e8aefc04539ae548dead750" - integrity sha512-FgKZb5zDPz8MmAcVxXzYhxP6OkzuIPoDRJp48YJ8+vrZ9EOZ35HaWGN2M3u+GPdnFE9mODFqkxw3azh3kHGZjQ== - dependencies: - axios "0.27.2" - got "^11.0.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.8.3": - version "7.22.13" - resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/core/-/core-7.22.15.tgz#15d4fd03f478a459015a4b94cfbb3bd42c48d2f4" - integrity sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.22.15" - "@babel/helpers" "^7.22.15" - "@babel/parser" "^7.22.15" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/eslint-parser@^7.16.3": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz#263f059c476e29ca4972481a17b8b660cb025a34" - integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.1" - -"@babel/generator@^7.22.15", "@babel/generator@^7.7.2": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" - integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== - dependencies: - "@babel/types" "^7.22.15" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" - integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz#40ad2f6950f143900e9c1c72363c0b431a606082" - integrity sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.15" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.9" - resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" - integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.9" - -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.9" - resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" - integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.15", "@babel/helper-validator-identifier@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" - integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helper-wrap-function@^7.22.9": - version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" - integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.10" - -"@babel/helpers@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" - integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/highlight@^7.22.13": - version "7.22.13" - resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" - integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.15.tgz#d34592bfe288a32e741aa0663dbc4829fcd55160" - integrity sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - -"@babel/plugin-proposal-class-properties@^7.16.0": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-decorators@^7.16.4": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.15.tgz#dc774eae73ab8c28a644d490b45aa47a85bb0bf5" - integrity sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.22.10" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.16.0": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-optional-chaining@^7.16.0": - version "7.21.0" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.16.0": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-decorators@^7.22.10": - version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" - integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" - integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" - integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" - integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" - integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.22.5" - -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" - integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== - dependencies: - "@babel/helper-module-transforms" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" - integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" - integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz#6dfa7c1c37f7d7279e417ceddf5a04abb8bb9c29" - integrity sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" - -"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" - integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.15" - -"@babel/plugin-transform-react-pure-annotations@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" - integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-runtime@^7.16.4": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9" - integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - semver "^6.3.1" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typescript@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127" - integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.15.tgz#142716f8e00bc030dae5b2ac6a46fbd8b3e18ff8" - integrity sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.15" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc" - integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.22.5" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.22.5" - -"@babel/preset-typescript@^7.16.0": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz#43db30516fae1d417d748105a0bc95f637239d48" - integrity sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-typescript" "^7.22.15" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.8.4": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.22.15", "@babel/traverse@^7.7.2": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.22.15.tgz#75be4d2d6e216e880e93017f4e2389aeb77ef2d9" - integrity sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/types/-/types-7.22.15.tgz#266cb21d2c5fd0b3931e7a91b6dd72d2f617d282" - integrity sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.15" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@confio/ics23@^0.6.8": - version "0.6.8" - resolved "https://registry.npmmirror.com/@confio/ics23/-/ics23-0.6.8.tgz#2a6b4f1f2b7b20a35d9a0745bb5a446e72930b3d" - integrity sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w== - dependencies: - "@noble/hashes" "^1.0.0" - protobufjs "^6.8.8" - -"@cosmjs/amino@0.27.1": - version "0.27.1" - resolved "https://registry.npmmirror.com/@cosmjs/amino/-/amino-0.27.1.tgz#0910256b5aecd794420bb5f7319d98fc63252fa1" - integrity sha512-w56ar/nK9+qlvWDpBPRmD0Blk2wfkkLqRi1COs1x7Ll1LF0AtkIBUjbRKplENLbNovK0T3h+w8bHiFm+GBGQOA== - dependencies: - "@cosmjs/crypto" "0.27.1" - "@cosmjs/encoding" "0.27.1" - "@cosmjs/math" "0.27.1" - "@cosmjs/utils" "0.27.1" - -"@cosmjs/amino@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/amino/-/amino-0.31.1.tgz#e6b4adc3ebe19ddfd953c67ee04b1eae488238af" - integrity sha512-kkB9IAkNEUFtjp/uwHv95TgM8VGJ4VWfZwrTyLNqBDD1EpSX2dsNrmUe7k8OMPzKlZUFcKmD4iA0qGvIwzjbGA== - dependencies: - "@cosmjs/crypto" "^0.31.1" - "@cosmjs/encoding" "^0.31.1" - "@cosmjs/math" "^0.31.1" - "@cosmjs/utils" "^0.31.1" - -"@cosmjs/cosmwasm-stargate@^0.31.0": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.31.1.tgz#36d4386238fd4310d144486a27585a4fec3f27cd" - integrity sha512-5hwv4oztFnpqnFaXhYxZc93na3qdxylT2kqms4pLzD8CWMEQmrwhdM4KpZimrsyZK55WiMQtTPsdSh7M8KLOow== - dependencies: - "@cosmjs/amino" "^0.31.1" - "@cosmjs/crypto" "^0.31.1" - "@cosmjs/encoding" "^0.31.1" - "@cosmjs/math" "^0.31.1" - "@cosmjs/proto-signing" "^0.31.1" - "@cosmjs/stargate" "^0.31.1" - "@cosmjs/tendermint-rpc" "^0.31.1" - "@cosmjs/utils" "^0.31.1" - cosmjs-types "^0.8.0" - long "^4.0.0" - pako "^2.0.2" - -"@cosmjs/crypto@0.27.1": - version "0.27.1" - resolved "https://registry.npmmirror.com/@cosmjs/crypto/-/crypto-0.27.1.tgz#271c853089a3baf3acd6cf0b2122fd49f8815743" - integrity sha512-vbcxwSt99tIYJg8Spp00wc3zx72qx+pY3ozGuBN8gAvySnagK9dQ/jHwtWQWdammmdD6oW+75WfIHZ+gNa+Ybg== - dependencies: - "@cosmjs/encoding" "0.27.1" - "@cosmjs/math" "0.27.1" - "@cosmjs/utils" "0.27.1" - bip39 "^3.0.2" - bn.js "^5.2.0" - elliptic "^6.5.3" - js-sha3 "^0.8.0" - libsodium-wrappers "^0.7.6" - ripemd160 "^2.0.2" - sha.js "^2.4.11" - -"@cosmjs/crypto@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/crypto/-/crypto-0.31.1.tgz#ce4917df0f7b38f0909a32020907ccff04acefe6" - integrity sha512-4R/SqdzdVzd4E5dpyEh1IKm5GbTqwDogutyIyyb1bcOXiX/x3CrvPI9Tb4WSIMDLvlb5TVzu2YnUV51Q1+6mMA== - dependencies: - "@cosmjs/encoding" "^0.31.1" - "@cosmjs/math" "^0.31.1" - "@cosmjs/utils" "^0.31.1" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.4" - libsodium-wrappers-sumo "^0.7.11" - -"@cosmjs/encoding@0.27.1": - version "0.27.1" - resolved "https://registry.npmmirror.com/@cosmjs/encoding/-/encoding-0.27.1.tgz#3cd5bc0af743485eb2578cdb08cfa84c86d610e1" - integrity sha512-rayLsA0ojHeniaRfWWcqSsrE/T1rl1gl0OXVNtXlPwLJifKBeLEefGbOUiAQaT0wgJ8VNGBazVtAZBpJidfDhw== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - -"@cosmjs/encoding@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/encoding/-/encoding-0.31.1.tgz#0041b2650c443d883e22f27c7d3cd7b844c6d0ec" - integrity sha512-IuxP6ewwX6vg9sUJ8ocJD92pkerI4lyG8J5ynAM3NaX3q+n+uMoPRSQXNeL9bnlrv01FF1kIm8if/f5F7ZPtkA== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - -"@cosmjs/json-rpc@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/json-rpc/-/json-rpc-0.31.1.tgz#54d1064adb3ebd0412b04f87a3c2029384e4cb5e" - integrity sha512-gIkCj2mUDHAxvmJnHtybXtMLZDeXrkDZlujjzhvJlWsIuj1kpZbKtYqh+eNlfwhMkMMAlQa/y4422jDmizW+ng== - dependencies: - "@cosmjs/stream" "^0.31.1" - xstream "^11.14.0" - -"@cosmjs/launchpad@^0.27.1": - version "0.27.1" - resolved "https://registry.npmmirror.com/@cosmjs/launchpad/-/launchpad-0.27.1.tgz#b6f1995748be96560f5f01e84d3ff907477dda77" - integrity sha512-DcFwGD/z5PK8CzO2sojDxa+Be9EIEtRZb2YawgVnw2Ht/p5FlNv+OVo8qlishpBdalXEN7FvQ1dVeDFEe9TuJw== - dependencies: - "@cosmjs/amino" "0.27.1" - "@cosmjs/crypto" "0.27.1" - "@cosmjs/encoding" "0.27.1" - "@cosmjs/math" "0.27.1" - "@cosmjs/utils" "0.27.1" - axios "^0.21.2" - fast-deep-equal "^3.1.3" - -"@cosmjs/math@0.27.1": - version "0.27.1" - resolved "https://registry.npmmirror.com/@cosmjs/math/-/math-0.27.1.tgz#be78857b008ffc6b1ed6fecaa1c4cd5bc38c07d7" - integrity sha512-cHWVjmfIjtRc7f80n7x+J5k8pe+vTVTQ0lA82tIxUgqUvgS6rogPP/TmGtTiZ4+NxWxd11DUISY6gVpr18/VNQ== - dependencies: - bn.js "^5.2.0" - -"@cosmjs/math@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/math/-/math-0.31.1.tgz#74c02cf237c2996b77661b636b014168b18d95e6" - integrity sha512-kiuHV6m6DSB8/4UV1qpFhlc4ul8SgLXTGRlYkYiIIP4l0YNeJ+OpPYaOlEgx4Unk2mW3/O2FWYj7Jc93+BWXng== - dependencies: - bn.js "^5.2.0" - -"@cosmjs/proto-signing@^0.31.0", "@cosmjs/proto-signing@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/proto-signing/-/proto-signing-0.31.1.tgz#3929d5bee3c88c42b3bc3c4b9db4ab3bddb684c4" - integrity sha512-hipbBVrssPu+jnmRzQRP5hhS/mbz2nU7RvxG/B1ZcdNhr1AtZC5DN09OTUoEpMSRgyQvScXmk/NTbyf+xmCgYg== - dependencies: - "@cosmjs/amino" "^0.31.1" - "@cosmjs/crypto" "^0.31.1" - "@cosmjs/encoding" "^0.31.1" - "@cosmjs/math" "^0.31.1" - "@cosmjs/utils" "^0.31.1" - cosmjs-types "^0.8.0" - long "^4.0.0" - -"@cosmjs/socket@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/socket/-/socket-0.31.1.tgz#887d4e9b6aad4b3d264d64a47bdb40bcfa9802ff" - integrity sha512-XTtEr+x3WGbqkzoGX0sCkwVqf5n+bBqDwqNgb+DWaBABQxHVRuuainrTVp0Yc91D3Iy2twLQzeBA9OrRxDSerw== - dependencies: - "@cosmjs/stream" "^0.31.1" - isomorphic-ws "^4.0.1" - ws "^7" - xstream "^11.14.0" - -"@cosmjs/stargate@^0.31.0", "@cosmjs/stargate@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/stargate/-/stargate-0.31.1.tgz#7e2b0fd6f181250915b1d73ecf9dfbab6f3cdd0d" - integrity sha512-TqOJZYOH5W3sZIjR6949GfjhGXO3kSHQ3/KmE+SuKyMMmQ5fFZ45beawiRtVF0/CJg5RyPFyFGJKhb1Xxv3Lcg== - dependencies: - "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "^0.31.1" - "@cosmjs/encoding" "^0.31.1" - "@cosmjs/math" "^0.31.1" - "@cosmjs/proto-signing" "^0.31.1" - "@cosmjs/stream" "^0.31.1" - "@cosmjs/tendermint-rpc" "^0.31.1" - "@cosmjs/utils" "^0.31.1" - cosmjs-types "^0.8.0" - long "^4.0.0" - protobufjs "~6.11.3" - xstream "^11.14.0" - -"@cosmjs/stream@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/stream/-/stream-0.31.1.tgz#01bab56278bfe32cd601043949fcdc021a5f7ca7" - integrity sha512-xsIGD9bpBvYYZASajCyOevh1H5pDdbOWmvb4UwGZ78doGVz3IC3Kb9BZKJHIX2fjq9CMdGVJHmlM+Zp5aM8yZA== - dependencies: - xstream "^11.14.0" - -"@cosmjs/tendermint-rpc@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.31.1.tgz#0699c6046fc8afd1eee3c648cfb3b896119ce52e" - integrity sha512-KX+wwi725sSePqIxfMPPOqg+xTETV8BHGOBhRhCZXEl5Fq48UlXXq3/yG1sn7K67ADC0kqHqcCF41Wn1GxNNPA== - dependencies: - "@cosmjs/crypto" "^0.31.1" - "@cosmjs/encoding" "^0.31.1" - "@cosmjs/json-rpc" "^0.31.1" - "@cosmjs/math" "^0.31.1" - "@cosmjs/socket" "^0.31.1" - "@cosmjs/stream" "^0.31.1" - "@cosmjs/utils" "^0.31.1" - axios "^0.21.2" - readonly-date "^1.0.0" - xstream "^11.14.0" - -"@cosmjs/utils@0.27.1": - version "0.27.1" - resolved "https://registry.npmmirror.com/@cosmjs/utils/-/utils-0.27.1.tgz#1c8efde17256346ef142a3bd15158ee4055470e2" - integrity sha512-VG7QPDiMUzVPxRdJahDV8PXxVdnuAHiIuG56hldV4yPnOz/si/DLNd7VAUUA5923b6jS1Hhev0Hr6AhEkcxBMg== - -"@cosmjs/utils@^0.31.1": - version "0.31.1" - resolved "https://registry.npmmirror.com/@cosmjs/utils/-/utils-0.31.1.tgz#e6055cd7d722fa72df9cbd0d39cd1f7a9ac80483" - integrity sha512-n4Se1wu4GnKwztQHNFfJvUeWcpvx3o8cWhSbNs9JQShEuB3nv3R5lqFBtDCgHZF/emFQAP+ZjF8bTfCs9UBGhA== - -"@csstools/normalize.css@*": - version "12.0.0" - resolved "https://registry.npmmirror.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" - integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== - -"@csstools/postcss-cascade-layers@^1.1.1": - version "1.1.1" - resolved "https://registry.npmmirror.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad" - integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== - dependencies: - "@csstools/selector-specificity" "^2.0.2" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-color-function@^1.1.1": - version "1.1.1" - resolved "https://registry.npmmirror.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" - integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-font-format-keywords@^1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" - integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-hwb-function@^1.0.2": - version "1.0.2" - resolved "https://registry.npmmirror.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" - integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-ic-unit@^1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" - integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^2.0.7": - version "2.0.7" - resolved "https://registry.npmmirror.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" - integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== - dependencies: - "@csstools/selector-specificity" "^2.0.0" - postcss-selector-parser "^6.0.10" - -"@csstools/postcss-nested-calc@^1.0.0": - version "1.0.0" - resolved "https://registry.npmmirror.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" - integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" - integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^1.1.1": - version "1.1.1" - resolved "https://registry.npmmirror.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" - integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": - version "1.3.0" - resolved "https://registry.npmmirror.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" - integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-stepped-value-functions@^1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" - integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-text-decoration-shorthand@^1.0.0": - version "1.0.0" - resolved "https://registry.npmmirror.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" - integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^1.0.2": - version "1.0.2" - resolved "https://registry.npmmirror.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" - integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-unset-value@^1.0.2": - version "1.0.2" - resolved "https://registry.npmmirror.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" - integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== - -"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": - version "2.2.0" - resolved "https://registry.npmmirror.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" - integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.8.0" - resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" - integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== - -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.48.0": - version "8.48.0" - resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" - integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== - -"@humanwhocodes/config-array@^0.11.10": - version "0.11.11" - resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - -"@jest/console@^28.1.3": - version "28.1.3" - resolved "https://registry.npmmirror.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" - integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" - -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" - micromatch "^4.0.4" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== - dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== - dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" - "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" - -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" - -"@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.npmmirror.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== - dependencies: - "@sinclair/typebox" "^0.24.1" - -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.9" - source-map "^0.6.0" - -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== - dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-result@^28.1.3": - version "28.1.3" - resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" - integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== - dependencies: - "@jest/console" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== - dependencies: - "@jest/test-result" "^27.5.1" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" - -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - -"@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.npmmirror.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== - dependencies: - "@jest/schemas" "^28.1.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - -"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": - version "5.1.1-v1" - resolved "https://registry.npmmirror.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" - integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== - dependencies: - eslint-scope "5.1.1" - -"@noble/hashes@1.1.3": - version "1.1.3" - resolved "https://registry.npmmirror.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" - integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== - -"@noble/hashes@^1", "@noble/hashes@^1.0.0", "@noble/hashes@^1.2.0": - version "1.3.2" - resolved "https://registry.npmmirror.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@noble/hashes@~1.1.1": - version "1.1.5" - resolved "https://registry.npmmirror.com/@noble/hashes/-/hashes-1.1.5.tgz#1a0377f3b9020efe2fae03290bd2a12140c95c11" - integrity sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pmmmwh/react-refresh-webpack-plugin@^0.5.3": - version "0.5.11" - resolved "https://registry.npmmirror.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" - integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== - dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" - core-js-pure "^3.23.3" - error-stack-parser "^2.0.6" - find-up "^5.0.0" - html-entities "^2.1.0" - loader-utils "^2.0.4" - schema-utils "^3.0.0" - source-map "^0.7.3" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.npmmirror.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.npmmirror.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.npmmirror.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.npmmirror.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.npmmirror.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@rollup/plugin-babel@^5.2.0": - version "5.3.1" - resolved "https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-node-resolve@^11.2.1": - version "11.2.1" - resolved "https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/plugin-replace@^2.4.1": - version "2.4.2" - resolved "https://registry.npmmirror.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rushstack/eslint-patch@^1.1.0": - version "1.3.3" - resolved "https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz#16ab6c727d8c2020a5b6e4a176a243ecd88d8d69" - integrity sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw== - -"@scure/base@~1.1.0": - version "1.1.3" - resolved "https://registry.npmmirror.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" - integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== - -"@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.npmmirror.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== - dependencies: - "@noble/hashes" "~1.1.1" - "@scure/base" "~1.1.0" - -"@sinclair/typebox@^0.24.1": - version "0.24.51" - resolved "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" - integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@surma/rollup-plugin-off-main-thread@^2.2.3": - version "2.2.3" - resolved "https://registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" - integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== - dependencies: - ejs "^3.1.6" - json5 "^2.2.0" - magic-string "^0.25.0" - string.prototype.matchall "^4.0.6" - -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" - integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== - -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" - integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== - -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - version "5.0.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" - integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - version "5.0.1" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" - integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== - -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - version "5.4.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" - integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== - -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - version "5.4.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" - integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== - -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - version "5.4.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" - integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== - -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - version "5.5.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" - integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== - -"@svgr/babel-preset@^5.5.0": - version "5.5.0" - resolved "https://registry.npmmirror.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" - integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" - -"@svgr/core@^5.5.0": - version "5.5.0" - resolved "https://registry.npmmirror.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" - integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== - dependencies: - "@svgr/plugin-jsx" "^5.5.0" - camelcase "^6.2.0" - cosmiconfig "^7.0.0" - -"@svgr/hast-util-to-babel-ast@^5.5.0": - version "5.5.0" - resolved "https://registry.npmmirror.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" - integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== - dependencies: - "@babel/types" "^7.12.6" - -"@svgr/plugin-jsx@^5.5.0": - version "5.5.0" - resolved "https://registry.npmmirror.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" - integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== - dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - svg-parser "^2.0.2" - -"@svgr/plugin-svgo@^5.5.0": - version "5.5.0" - resolved "https://registry.npmmirror.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== - dependencies: - cosmiconfig "^7.0.0" - deepmerge "^4.2.2" - svgo "^1.2.2" - -"@svgr/webpack@^5.5.0": - version "5.5.0" - resolved "https://registry.npmmirror.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmmirror.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.1" - resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.1" - resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" - integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== - dependencies: - "@babel/types" "^7.20.7" - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.npmmirror.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.5.1" - resolved "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz#6e5e3602d93bda975cebc3449e1a318340af9e20" - integrity sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.36" - resolved "https://registry.npmmirror.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" - integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.44.2" - resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" - integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.36" - resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz#baa9022119bdc05a4adfe740ffc97b5f9360e545" - integrity sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.17" - resolved "https://registry.npmmirror.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/graceful-fs@^4.1.2": - version "4.1.6" - resolved "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== - dependencies: - "@types/node" "*" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/http-errors@*": - version "2.0.1" - resolved "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" - integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== - -"@types/http-proxy@^1.17.8": - version "1.17.11" - resolved "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" - integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.npmmirror.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/long@^4.0.1": - version "4.0.2" - resolved "https://registry.npmmirror.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.npmmirror.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/node@*", "@types/node@>=13.7.0": - version "20.5.9" - resolved "https://registry.npmmirror.com/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a" - integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/q@^1.5.1": - version "1.5.6" - resolved "https://registry.npmmirror.com/@types/q/-/q-1.5.6.tgz#a6edffe8283910e46dc7a573621f928e6b47fa56" - integrity sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ== - -"@types/qs@*": - version "6.9.8" - resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmmirror.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - -"@types/semver@^7.3.12": - version "7.5.1" - resolved "https://registry.npmmirror.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" - integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== - -"@types/send@*": - version "0.17.1" - resolved "https://registry.npmmirror.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" - integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.2" - resolved "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" - integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/trusted-types@^2.0.2": - version "2.0.3" - resolved "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" - integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== - -"@types/ws@^8.5.5": - version "8.5.5" - resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb" - integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^16.0.0": - version "16.0.5" - resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" - integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.5.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@^5.0.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz#14559bf73383a308026b427a4a6129bae2146741" - integrity sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw== - dependencies: - "@typescript-eslint/utils" "5.62.0" - -"@typescript-eslint/parser@^5.5.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.58.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -accepts@^1.3.8, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-import-assertions@^1.8.0, acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^7.1.1, acorn-walk@^7.2.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -address@^1.0.1, address@^1.1.2, address@^1.2.2: - version "1.2.2" - resolved "https://registry.npmmirror.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - -adjust-sourcemap-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" - integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== - dependencies: - loader-utils "^2.0.0" - regex-parser "^2.2.11" - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.12.6: - version "6.12.6" - resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1, ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -any-promise@^1.0.0, any-promise@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@^3.0.3, anymatch@^3.1.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aptos@^1.9.0: - version "1.19.0" - resolved "https://registry.npmmirror.com/aptos/-/aptos-1.19.0.tgz#47d075bfd8d28da4ff3c59aa5d1d25335744e168" - integrity sha512-IEvEfBFndhDce1HCMdow24Dh52sFFuRcgDpjTbH3Fi4TQpCD9s7zX+C5eCzTNiWQmEH/dfL2uDw5dbREGQxsbQ== - dependencies: - "@aptos-labs/aptos-client" "^0.0.2" - "@noble/hashes" "1.1.3" - "@scure/bip39" "1.1.0" - eventemitter3 "^5.0.1" - form-data "4.0.0" - tweetnacl "1.0.3" - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^1.0.10, argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^5.1.3: - version "5.3.0" - resolved "https://registry.npmmirror.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-includes@^3.1.6: - version "3.1.7" - resolved "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlastindex@^1.2.2: - version "1.2.3" - resolved "https://registry.npmmirror.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.reduce@^1.0.5, array.prototype.reduce@^1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" - integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -asap@^2.0.6, asap@~2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.npmmirror.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -async@^3.2.3, async@^3.2.4: - version "3.2.4" - resolved "https://registry.npmmirror.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@^10.4.13, autoprefixer@^10.4.14: - version "10.4.15" - resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" - integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001520" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -axe-core@^4.6.2, axe-core@^4.6.3: - version "4.7.2" - resolved "https://registry.npmmirror.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" - integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== - -axios@0.27.2, axios@^0.27.2: - version "0.27.2" - resolved "https://registry.npmmirror.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -axios@^0.21.2: - version "0.21.4" - resolved "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axobject-query@^3.1.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - -babel-jest@^27.4.2, babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== - dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-loader@^8.2.3, babel-loader@^8.3.0: - version "8.3.0" - resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -babel-plugin-named-asset-import@^0.3.8: - version "0.3.8" - resolved "https://registry.npmmirror.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" - integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== - -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" - -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" - -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.3" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" - integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.31.0" - -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - -babel-plugin-transform-react-remove-prop-types@^0.4.24: - version "0.4.24" - resolved "https://registry.npmmirror.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== - -babel-preset-current-node-syntax@^1.0.0, babel-preset-current-node-syntax@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== - dependencies: - babel-plugin-jest-hoist "^27.5.1" - babel-preset-current-node-syntax "^1.0.0" - -babel-preset-react-app@^10.0.1: - version "10.0.1" - resolved "https://registry.npmmirror.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584" - integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg== - dependencies: - "@babel/core" "^7.16.0" - "@babel/plugin-proposal-class-properties" "^7.16.0" - "@babel/plugin-proposal-decorators" "^7.16.4" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" - "@babel/plugin-proposal-numeric-separator" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-private-methods" "^7.16.0" - "@babel/plugin-transform-flow-strip-types" "^7.16.0" - "@babel/plugin-transform-react-display-name" "^7.16.0" - "@babel/plugin-transform-runtime" "^7.16.4" - "@babel/preset-env" "^7.16.4" - "@babel/preset-react" "^7.16.0" - "@babel/preset-typescript" "^7.16.0" - "@babel/runtime" "^7.16.3" - babel-plugin-macros "^3.1.0" - babel-plugin-transform-react-remove-prop-types "^0.4.24" - -balanced-match@^1.0.0, balanced-match@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.0: - version "1.5.1" - resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -batch@0.6.1, batch@^0.6.1: - version "0.6.1" - resolved "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -bech32@^1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -bfj@^7.0.2: - version "7.0.2" - resolved "https://registry.npmmirror.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" - integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== - dependencies: - bluebird "^3.5.5" - check-types "^11.1.1" - hoopy "^0.1.4" - tryer "^1.0.1" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0, binary-extensions@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bip39@^3.0.2: - version "3.1.0" - resolved "https://registry.npmmirror.com/bip39/-/bip39-3.1.0.tgz#c55a418deaf48826a6ceb34ac55b3ee1577e18a3" - integrity sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A== - dependencies: - "@noble/hashes" "^1.2.0" - -bluebird@^3.5.5, bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.0: - version "5.2.1" - resolved "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^1.20.1: - version "1.20.2" - resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11, bonjour-service@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" - integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.11, brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -bser@2.1.1, bser@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0, buffer-from@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -builtin-modules@^3.1.0, builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2, bytes@^3.0.0: - version "3.1.2" - resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmmirror.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.npmmirror.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0, callsites@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0, camelcase@^6.2.1, camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001473, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: - version "1.0.30001527" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001527.tgz#813826554828245ccee776c850566dce12bdeaba" - integrity sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ== - -case-sensitive-paths-webpack-plugin@^2.4.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - -chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -char-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" - integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== - -check-types@^11.1.1, check-types@^11.2.2: - version "11.2.2" - resolved "https://registry.npmmirror.com/check-types/-/check-types-11.2.2.tgz#7afc0b6a860d686885062f2dba888ba5710335b4" - integrity sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA== - -chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2, chrome-trace-event@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0, ci-info@^3.8.0: - version "3.8.0" - resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -cjs-module-lexer@^1.0.0, cjs-module-lexer@^1.2.2: - version "1.2.3" - resolved "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -clean-css@^5.2.2, clean-css@^5.3.2: - version "5.3.2" - resolved "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== - dependencies: - source-map "~0.6.0" - -cliui@^7.0.2, cliui@^7.0.4: - version "7.0.4" - resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -collect-v8-coverage@^1.0.0, collect-v8-coverage@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.1.3, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colord@^2.9.1, colord@^2.9.3: - version "2.9.3" - resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10, colorette@^2.0.19: - version "2.0.20" - resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -common-tags@^1.8.0, common-tags@^1.8.2: - version "1.8.2" - resolved "https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compressible@^2.0.18, compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1, concat-map@^0.0.1: - version "0.0.1" - resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -confusing-browser-globals@^1.0.11: - version "1.0.11" - resolved "https://registry.npmmirror.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -content-disposition@0.5.4, content-disposition@^0.5.4: - version "0.5.4" - resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0, convert-source-map@^1.9.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie-signature@^1.0.6: - version "1.2.1" - resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.2.1.tgz#790dea2cce64638c7ae04d9fabed193bd7ccf3b4" - integrity sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw== - -cookie@0.5.0, cookie@^0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -core-js-compat@^3.25.1, core-js-compat@^3.29.1, core-js-compat@^3.31.0: - version "3.32.1" - resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" - integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== - dependencies: - browserslist "^4.21.10" - -core-js-pure@^3.23.3, core-js-pure@^3.29.1: - version "3.32.1" - resolved "https://registry.npmmirror.com/core-js-pure/-/core-js-pure-3.32.1.tgz#5775b88f9062885f67b6d7edce59984e89d276f3" - integrity sha512-f52QZwkFVDPf7UEQZGHKx6NYxsxmVGJe5DIvbzOdRMJlmT6yv0KDjR8rmy3ngr/t5wU54c7Sp/qIJH0ppbhVpQ== - -core-js@^3.19.2, core-js@^3.29.1: - version "3.32.1" - resolved "https://registry.npmmirror.com/core-js/-/core-js-3.32.1.tgz#a7d8736a3ed9dd05940c3c4ff32c591bb735be77" - integrity sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ== - -core-util-is@^1.0.3, core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -cosmiconfig@^7.0.0, cosmiconfig@^7.1.0: - version "7.1.0" - resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cosmjs-types@^0.8.0: - version "0.8.0" - resolved "https://registry.npmmirror.com/cosmjs-types/-/cosmjs-types-0.8.0.tgz#2ed78f3e990f770229726f95f3ef5bf9e2b6859b" - integrity sha512-Q2Mj95Fl0PYMWEhA2LuGEIhipF7mQwd9gTQ85DdP9jjjopeoGaDxvmPa5nakNzsq7FnO1DMTatXTAx6bxMH7Lg== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-blank-pseudo@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" - integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== - dependencies: - postcss-selector-parser "^6.0.9" - -css-declaration-sorter@^6.3.1, css-declaration-sorter@^6.4.0: - version "6.4.1" - resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" - integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== - -css-has-pseudo@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" - integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== - dependencies: - postcss-selector-parser "^6.0.9" - -css-loader@^6.5.1, css-loader@^6.7.3: - version "6.8.1" - resolved "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.21" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.8" - -css-minimizer-webpack-plugin@^3.2.0, css-minimizer-webpack-plugin@^3.4.1: - version "3.4.1" - resolved "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" - integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== - dependencies: - cssnano "^5.0.6" - jest-worker "^27.0.2" - postcss "^8.3.5" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - -css-prefers-color-scheme@^6.0.3: - version "6.0.3" - resolved "https://registry.npmmirror.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" - integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@^4.1.3, css-select@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.0.0-alpha.37, css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.npmmirror.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - -cssdb@^7.1.0, cssdb@^7.5.3: - version "7.7.2" - resolved "https://registry.npmmirror.com/cssdb/-/cssdb-7.7.2.tgz#fbebd90edfc6af129fda4fd986f9dd604a209094" - integrity sha512-pQPYP7/kch4QlkTcLuUNiNL2v/E+O+VIdotT+ug62/+2B2/jkzs5fMM6RHCzGCZ9C82pODEMSIzRRUzJOrl78g== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^5.2.14: - version "5.2.14" - resolved "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" - integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.1" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.4" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.2" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@^5.0.6, cssnano@^5.1.15: - version "5.1.15" - resolved "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" - integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== - dependencies: - cssnano-preset-default "^5.2.14" - lilconfig "^2.0.3" - yaml "^1.10.2" - -csso@^4.0.2, csso@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -csstype@^3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.npmmirror.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -debug@2.6.9, debug@^2.6.0: - version "2.6.9" - resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decimal.js@^10.2.1, decimal.js@^10.4.3: - version "10.4.3" - resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-equal@^2.2.0: - version "2.2.2" - resolved "https://registry.npmmirror.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -deep-is@^0.1.3, deep-is@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2, deepmerge@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@^1.0.0, delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0, depd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0, destroy@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-newline@^3.0.0, detect-newline@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -detect-node@^2.0.4, detect-node@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -detect-port-alt@^1.1.6: - version "1.1.6" - resolved "https://registry.npmmirror.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^5.2.2, dns-packet@^5.5.0: - version "5.6.1" - resolved "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-accessibility-api@^0.5.16: - version "0.5.16" - resolved "https://registry.npmmirror.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1, dom-serializer@^1.4.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@1: - version "1.3.1" - resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -ee-first@1.1.1, ee-first@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -ejs@^3.1.6, ejs@^3.1.9: - version "3.1.9" - resolved "https://registry.npmmirror.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.348, electron-to-chromium@^1.4.477: - version "1.4.508" - resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz#5641ff2f5ba11df4bd960fe6a2f9f70aa8b9af96" - integrity sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg== - -elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@^0.10.2: - version "0.10.2" - resolved "https://registry.npmmirror.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== - -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.npmmirror.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@^1.0.2, encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0, entities@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -error-ex@^1.3.1, error-ex@^1.3.2: - version "1.3.2" - resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.6, error-stack-parser@^2.1.4: - version "2.1.4" - resolved "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-abstract@^1.17.2, es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.22.1: - version "1.22.1" - resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.12: - version "1.0.14" - resolved "https://registry.npmmirror.com/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz#19cd7903697d97e21198f3293b55e8985791c365" - integrity sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.0" - safe-array-concat "^1.0.0" - -es-module-lexer@^0.9.3: - version "0.9.3" - resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -es-module-lexer@^1.2.1: - version "1.3.0" - resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" - integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-react-app@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4" - integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA== - dependencies: - "@babel/core" "^7.16.0" - "@babel/eslint-parser" "^7.16.3" - "@rushstack/eslint-patch" "^1.1.0" - "@typescript-eslint/eslint-plugin" "^5.5.0" - "@typescript-eslint/parser" "^5.5.0" - babel-preset-react-app "^10.0.1" - confusing-browser-globals "^1.0.11" - eslint-plugin-flowtype "^8.0.3" - eslint-plugin-import "^2.25.3" - eslint-plugin-jest "^25.3.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.27.1" - eslint-plugin-react-hooks "^4.3.0" - eslint-plugin-testing-library "^5.0.1" - -eslint-import-resolver-node@^0.3.7: - version "0.3.9" - resolved "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-flowtype@^8.0.3: - version "8.0.3" - resolved "https://registry.npmmirror.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" - integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== - dependencies: - lodash "^4.17.21" - string-natural-compare "^3.0.1" - -eslint-plugin-import@^2.25.3, eslint-plugin-import@^2.27.5: - version "2.28.1" - resolved "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" - semver "^6.3.1" - tsconfig-paths "^3.14.2" - -eslint-plugin-jest@^25.3.0, eslint-plugin-jest@^25.7.0: - version "25.7.0" - resolved "https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" - integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== - dependencies: - "@typescript-eslint/experimental-utils" "^5.0.0" - -eslint-plugin-jsx-a11y@^6.5.1, eslint-plugin-jsx-a11y@^6.7.1: - version "6.7.1" - resolved "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" - -eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.6.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react@^7.27.1, eslint-plugin-react@^7.32.2: - version "7.33.2" - resolved "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.1" - string.prototype.matchall "^4.0.8" - -eslint-plugin-testing-library@^5.0.1, eslint-plugin-testing-library@^5.10.2: - version "5.11.1" - resolved "https://registry.npmmirror.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz#5b46cdae96d4a78918711c0b4792f90088e62d20" - integrity sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw== - dependencies: - "@typescript-eslint/utils" "^5.58.0" - -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1, eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-webpack-plugin@^3.1.1, eslint-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz#1978cdb9edc461e4b0195a20da950cf57988347c" - integrity sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w== - dependencies: - "@types/eslint" "^7.29.0 || ^8.4.1" - jest-worker "^28.0.2" - micromatch "^4.0.5" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - -eslint@^8.3.0, eslint@^8.37.0: - version "8.48.0" - resolved "https://registry.npmmirror.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" - integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.48.0" - "@humanwhocodes/config-array" "^0.11.10" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.5.1, espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2, esquery@^1.5.0: - version "1.5.0" - resolved "https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -esutils@^2.0.2, esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@^1.8.1, etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eventemitter3@^4.0.0, eventemitter3@^4.0.7: - version "4.0.7" - resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -events@^3.2.0, events@^3.3.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== - dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - -express@^4.17.3, express@^4.18.2: - version "4.18.2" - resolved "https://registry.npmmirror.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.12, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.15.0, fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3, faye-websocket@^0.11.4: - version "0.11.4" - resolved "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0, fb-watchman@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.npmmirror.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -filesize@^8.0.6, filesize@^8.0.7: - version "8.0.7" - resolved "https://registry.npmmirror.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" - integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0, finalhandler@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^3.3.1, find-cache-dir@^3.3.2: - version "3.3.2" - resolved "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== - dependencies: - flatted "^3.2.7" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9, follow-redirects@^1.15.2: - version "1.15.2" - resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -fork-ts-checker-webpack-plugin@^6.5.0, fork-ts-checker-webpack-plugin@^6.5.3: - version "6.5.3" - resolved "https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" - integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" - -form-data@4.0.0, form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@^3.0.0, form-data@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0, forwarded@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.2.0: - version "4.3.6" - resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d" - integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg== - -fresh@0.5.2, fresh@^0.5.2: - version "0.5.2" - resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^10.0.0, fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.0, fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.3, fs-monkey@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747" - integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.6" - resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-own-enumerable-property-symbols@^3.0.0, get-own-enumerable-property-symbols@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@7.1.6: - version "7.1.6" - resolved "https://registry.npmmirror.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.3: - version "7.2.3" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0, globals@^11.12.0: - version "11.12.0" - resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.21.0" - resolved "https://registry.npmmirror.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.1, globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.0.4, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^11.0.0: - version "11.8.6" - resolved "https://registry.npmmirror.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -handle-thing@^2.0.0, handle-thing@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -harmony-reflect@^1.4.6, harmony-reflect@^1.6.2: - version "1.6.2" - resolved "https://registry.npmmirror.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" - integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-entities@^2.1.0, html-entities@^2.3.2, html-entities@^2.3.3: - version "2.4.0" - resolved "https://registry.npmmirror.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - -html-escaper@^2.0.0, html-escaper@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-webpack-plugin@^5.5.0: - version "5.5.3" - resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@2.0.0, http-errors@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1, http-parser-js@^0.5.8: - version "0.5.8" - resolved "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy-middleware@^2.0.3, http-proxy-middleware@^2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -idb@^7.0.1, idb@^7.1.1: - version "7.1.1" - resolved "https://registry.npmmirror.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" - integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== - -identity-obj-proxy@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== - dependencies: - harmony-reflect "^1.4.6" - -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -immer@^9.0.21, immer@^9.0.7: - version "9.0.21" - resolved "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== - -import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2, import-local@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4, inflight@^1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@^1.3.5, ini@^1.3.8: - version "1.3.8" - resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== - -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1, is-bigint@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@^2.1.0, is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0, is-boolean-object@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.9.0: - version "2.13.0" - resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1, is-docker@^2.2.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0, is-generator-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4, is-number-object@^1.0.7: - version "1.0.7" - resolved "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-root@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== - -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^2.0.0, is-stream@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3, is-symbol@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1, is-weakset@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0, istanbul-lib-instrument@^5.2.1: - version "5.2.1" - resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0, istanbul-lib-source-maps@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3, istanbul-reports@^3.1.5: - version "3.1.6" - resolved "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -iterator.prototype@^1.1.0: - version "1.1.1" - resolved "https://registry.npmmirror.com/iterator.prototype/-/iterator.prototype-1.1.1.tgz#ab5b790e23ec00658f5974e032a2b05188bd3a5c" - integrity sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ== - dependencies: - define-properties "^1.2.0" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.3" - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.npmmirror.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== - dependencies: - "@jest/types" "^27.5.1" - execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - throat "^6.0.1" - -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== - dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^27.5.1" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== - dependencies: - detect-newline "^3.0.0" - -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== - -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== - dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== - dependencies: - chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-message-util@^28.1.3: - version "28.1.3" - resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" - integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2, jest-pnp-resolver@^1.2.3: - version "1.2.3" - resolved "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - -jest-regex-util@^28.0.0: - version "28.0.2" - resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== - -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== - dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" - -jest-resolve@^27.4.2, jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.8.1" - graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^27.5.1" - graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" - -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.npmmirror.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== - dependencies: - "@jest/types" "^28.1.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== - dependencies: - "@jest/types" "^27.5.1" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^27.5.1" - leven "^3.1.0" - pretty-format "^27.5.1" - -jest-watch-typeahead@^1.0.0, jest-watch-typeahead@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz#b4a6826dfb9c9420da2f7bc900de59dad11266a9" - integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== - dependencies: - ansi-escapes "^4.3.1" - chalk "^4.0.0" - jest-regex-util "^28.0.0" - jest-watcher "^28.0.0" - slash "^4.0.0" - string-length "^5.0.1" - strip-ansi "^7.0.1" - -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== - dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.5.1" - string-length "^4.0.1" - -jest-watcher@^28.0.0: - version "28.1.3" - resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" - integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== - dependencies: - "@jest/test-result" "^28.1.3" - "@jest/types" "^28.1.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.10.2" - jest-util "^28.1.3" - string-length "^4.0.1" - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^28.0.2: - version "28.1.3" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^27.4.3, jest@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== - dependencies: - "@jest/core" "^27.5.1" - import-local "^3.0.2" - jest-cli "^27.5.1" - -jiti@^1.18.2: - version "1.19.3" - resolved "https://registry.npmmirror.com/jiti/-/jiti-1.19.3.tgz#ef554f76465b3c2b222dc077834a71f0d4a37569" - integrity sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w== - -js-sdsl@^4.4.0: - version "4.4.2" - resolved "https://registry.npmmirror.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.npmmirror.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1, js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdom@^16.6.0, jsdom@^16.7.0: - version "16.7.0" - resolved "https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1, jsesc@^2.5.2: - version "2.5.2" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2, json5@^2.2.0, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1, jsonfile@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonpointer@^5.0.0, jsonpointer@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: - version "3.3.5" - resolved "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -keyv@^4.0.0, keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -klona@^2.0.4, klona@^2.0.5, klona@^2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -language-subtag-registry@^0.3.20, language-subtag-registry@^0.3.22, language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.npmmirror.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== - -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== - dependencies: - language-subtag-registry "~0.3.2" - -language-tags@^1.0.5: - version "1.0.9" - resolved "https://registry.npmmirror.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - -launch-editor@^2.6.0: - version "2.6.0" - resolved "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" - integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.7.3" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libsodium-sumo@^0.7.11: - version "0.7.11" - resolved "https://registry.npmmirror.com/libsodium-sumo/-/libsodium-sumo-0.7.11.tgz#ab0389e2424fca5c1dc8c4fd394906190da88a11" - integrity sha512-bY+7ph7xpk51Ez2GbE10lXAQ5sJma6NghcIDaSPbM/G9elfrjLa0COHl/7P6Wb/JizQzl5UQontOOP1z0VwbLA== - -libsodium-wrappers-sumo@^0.7.11: - version "0.7.11" - resolved "https://registry.npmmirror.com/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.11.tgz#d96329ee3c0e7ec7f5fcf4cdde16cc3a1ae91d82" - integrity sha512-DGypHOmJbB1nZn89KIfGOAkDgfv5N6SBGC3Qvmy/On0P0WD1JQvNRS/e3UL3aFF+xC0m+MYz5M+MnRnK2HMrKQ== - dependencies: - libsodium-sumo "^0.7.11" - -libsodium-wrappers@^0.7.6: - version "0.7.11" - resolved "https://registry.npmmirror.com/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz#53bd20606dffcc54ea2122133c7da38218f575f7" - integrity sha512-SrcLtXj7BM19vUKtQuyQKiQCRJPgbpauzl3s0rSwD+60wtHqSUuqcoawlMDheCJga85nKOQwxNYQxf/CKAvs6Q== - dependencies: - libsodium "^0.7.11" - -libsodium@^0.7.11: - version "0.7.11" - resolved "https://registry.npmmirror.com/libsodium/-/libsodium-0.7.11.tgz#cd10aae7bcc34a300cc6ad0ac88fcca674cfbc2e" - integrity sha512-WPfJ7sS53I2s4iM58QxY3Inb83/6mjlYgcmZs7DJsvDlnmVUwNinBCi5vBT43P6bHRy01O4zsMU2CoVR6xJ40A== - -lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6, lines-and-columns@^1.2.4: - version "1.2.4" - resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0, loader-runner@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.0, loader-utils@^2.0.4: - version "2.0.4" - resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -loader-utils@^3.2.0: - version "3.2.1" - resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.npmmirror.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - -magic-string@^0.25.0, magic-string@^0.25.7, magic-string@^0.25.9: - version "0.25.9" - resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -makeerror@1.0.12, makeerror@^1.0.12: - version "1.0.12" - resolved "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -mdn-data@^2.0.4: - version "2.1.0" - resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.1.0.tgz#e0ab1f7bbc23bbc5e2e398e8d7d04bfd8eaab0a6" - integrity sha512-dbAWH6A+2NGuVJlQFrTKHJc07Vqn5frnhyTOGz+7BsK7V2hHdoBcwoiyV3QVhLHYpM/zqe2OSUn5ZWbVXLBB8A== - -media-typer@0.3.0, media-typer@^0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.1.2, memfs@^3.4.13, memfs@^3.4.3: - version "3.6.0" - resolved "https://registry.npmmirror.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -merge-descriptors@1.0.1, merge-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@^1.1.2, methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.52.0: - version "1.52.0" - resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0, mime@^1.6.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-indent@^1.0.0, min-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -mini-css-extract-plugin@^2.4.5, mini-css-extract-plugin@^2.7.5: - version "2.7.6" - resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== - dependencies: - schema-utils "^4.0.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp@^0.5.6, mkdirp@~0.5.1: - version "0.5.6" - resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1, ms@^2.1.2: - version "2.1.3" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-forge@^1, node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.10, node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^6.0.1, normalize-url@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.1, nth-check@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -nwsapi@^2.2.0, nwsapi@^2.2.2: - version "2.2.7" - resolved "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.6: - version "1.1.7" - resolved "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.fromentries@^2.0.6: - version "2.0.7" - resolved "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.5, object.getownpropertydescriptors@^2.1.6: - version "2.1.7" - resolved "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" - integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== - dependencies: - array.prototype.reduce "^1.0.6" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - safe-array-concat "^1.0.0" - -object.groupby@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.npmmirror.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== - dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.values@^1.1.0, object.values@^1.1.6: - version "1.1.7" - resolved "https://registry.npmmirror.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1, on-finished@^2.4.1: - version "2.4.1" - resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@^1.0.2, on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.0.9, open@^8.4.0, open@^8.4.2: - version "8.4.2" - resolved "https://registry.npmmirror.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1, optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-retry@^4.5.0, p-retry@^4.6.2: - version "4.6.2" - resolved "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - -p-try@^2.0.0, p-try@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@^2.0.2: - version "2.1.0" - resolved "https://registry.npmmirror.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0, parent-module@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5@6.0.1, parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0, path-key@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7, path-to-regexp@^0.1.7: - version "0.1.7" - resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: - version "4.0.6" - resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -postcss-attribute-case-insensitive@^5.0.2: - version "5.0.2" - resolved "https://registry.npmmirror.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" - integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-browser-comments@^4, postcss-browser-comments@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz#bcfc86134df5807f5d3c0eefa191d42136b5e72a" - integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg== - -postcss-calc@^8.2.3, postcss-calc@^8.2.4: - version "8.2.4" - resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== - dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^4.2.4: - version "4.2.4" - resolved "https://registry.npmmirror.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" - integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-hex-alpha@^8.0.4: - version "8.0.4" - resolved "https://registry.npmmirror.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" - integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^7.1.1: - version "7.1.1" - resolved "https://registry.npmmirror.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" - integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-colormin@^5.3.1: - version "5.3.1" - resolved "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" - integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^8.0.2: - version "8.0.2" - resolved "https://registry.npmmirror.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" - integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-properties@^12.1.10, postcss-custom-properties@^12.1.11: - version "12.1.11" - resolved "https://registry.npmmirror.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" - integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^6.0.3: - version "6.0.3" - resolved "https://registry.npmmirror.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" - integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-dir-pseudo-class@^6.0.5: - version "6.0.5" - resolved "https://registry.npmmirror.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" - integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-double-position-gradients@^3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" - integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-env-function@^4.0.6: - version "4.0.6" - resolved "https://registry.npmmirror.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" - integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-flexbugs-fixes@^5.0.2: - version "5.0.2" - resolved "https://registry.npmmirror.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" - integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== - -postcss-focus-visible@^6.0.4: - version "6.0.4" - resolved "https://registry.npmmirror.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" - integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-focus-within@^5.0.4: - version "5.0.4" - resolved "https://registry.npmmirror.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" - integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== - dependencies: - postcss-selector-parser "^6.0.9" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^3.0.5: - version "3.0.5" - resolved "https://registry.npmmirror.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" - integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== - -postcss-image-set-function@^4.0.7: - version "4.0.7" - resolved "https://registry.npmmirror.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" - integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-import@^14.1.0: - version "14.1.0" - resolved "https://registry.npmmirror.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" - integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-initial@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" - integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== - -postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-lab-function@^4.2.1: - version "4.2.1" - resolved "https://registry.npmmirror.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" - integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^1.1.0" - postcss-value-parser "^4.2.0" - -postcss-load-config@^3.1.4: - version "3.1.4" - resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== - dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" - -postcss-loader@^6.2.1: - version "6.2.1" - resolved "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - -postcss-logical@^5.0.4: - version "5.0.4" - resolved "https://registry.npmmirror.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" - integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== - -postcss-media-minmax@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" - integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== - -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" - -postcss-merge-rules@^5.1.4: - version "5.1.4" - resolved "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" - integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nested@^6.0.0, postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== - dependencies: - postcss-selector-parser "^6.0.11" - -postcss-nesting@^10.2.0: - version "10.2.0" - resolved "https://registry.npmmirror.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" - integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== - dependencies: - "@csstools/selector-specificity" "^2.0.0" - postcss-selector-parser "^6.0.10" - -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize@^10.0.1: - version "10.0.1" - resolved "https://registry.npmmirror.com/postcss-normalize/-/postcss-normalize-10.0.1.tgz#464692676b52792a06b06880a176279216540dd7" - integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA== - dependencies: - "@csstools/normalize.css" "*" - postcss-browser-comments "^4" - sanitize.css "*" - -postcss-opacity-percentage@^1.1.2, postcss-opacity-percentage@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz#5b89b35551a556e20c5d23eb5260fbfcf5245da6" - integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== - -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" - integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^7.0.5: - version "7.0.5" - resolved "https://registry.npmmirror.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" - integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^7.0.1, postcss-preset-env@^7.8.3: - version "7.8.3" - resolved "https://registry.npmmirror.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2" - integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== - dependencies: - "@csstools/postcss-cascade-layers" "^1.1.1" - "@csstools/postcss-color-function" "^1.1.1" - "@csstools/postcss-font-format-keywords" "^1.0.1" - "@csstools/postcss-hwb-function" "^1.0.2" - "@csstools/postcss-ic-unit" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^2.0.7" - "@csstools/postcss-nested-calc" "^1.0.0" - "@csstools/postcss-normalize-display-values" "^1.0.1" - "@csstools/postcss-oklab-function" "^1.1.1" - "@csstools/postcss-progressive-custom-properties" "^1.3.0" - "@csstools/postcss-stepped-value-functions" "^1.0.1" - "@csstools/postcss-text-decoration-shorthand" "^1.0.0" - "@csstools/postcss-trigonometric-functions" "^1.0.2" - "@csstools/postcss-unset-value" "^1.0.2" - autoprefixer "^10.4.13" - browserslist "^4.21.4" - css-blank-pseudo "^3.0.3" - css-has-pseudo "^3.0.4" - css-prefers-color-scheme "^6.0.3" - cssdb "^7.1.0" - postcss-attribute-case-insensitive "^5.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^4.2.4" - postcss-color-hex-alpha "^8.0.4" - postcss-color-rebeccapurple "^7.1.1" - postcss-custom-media "^8.0.2" - postcss-custom-properties "^12.1.10" - postcss-custom-selectors "^6.0.3" - postcss-dir-pseudo-class "^6.0.5" - postcss-double-position-gradients "^3.1.2" - postcss-env-function "^4.0.6" - postcss-focus-visible "^6.0.4" - postcss-focus-within "^5.0.4" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.5" - postcss-image-set-function "^4.0.7" - postcss-initial "^4.0.1" - postcss-lab-function "^4.2.1" - postcss-logical "^5.0.4" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.2.0" - postcss-opacity-percentage "^1.1.2" - postcss-overflow-shorthand "^3.0.4" - postcss-page-break "^3.0.4" - postcss-place "^7.0.5" - postcss-pseudo-class-any-link "^7.1.6" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^7.1.6: - version "7.1.6" - resolved "https://registry.npmmirror.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" - integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-reduce-initial@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" - integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" - integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^7.0.35: - version "7.0.39" - resolved "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.3.5, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.4: - version "8.4.29" - resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" - integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -pretty-bytes@^5.3.0, pretty-bytes@^5.4.1, pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== - dependencies: - "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -process-nextick-args@^2.0.1, process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -promise@^8.1.0, promise@^8.3.0: - version "8.3.0" - resolved "https://registry.npmmirror.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" - integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== - dependencies: - asap "~2.0.6" - -prompts@^2.0.1, prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: - version "6.11.4" - resolved "https://registry.npmmirror.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" - integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - long "^4.0.0" - -proxy-addr@^2.0.7, proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -psl@^1.1.33, psl@^1.9.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -q@^1.1.2, q@^1.5.1: - version "1.5.1" - resolved "https://registry.npmmirror.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.11.0: - version "6.11.2" - resolved "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -querystringify@^2.1.1, querystringify@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -raf@^3.4.1: - version "3.4.1" - resolved "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.2, raw-body@^2.5.1: - version "2.5.2" - resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-app-polyfill@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7" - integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w== - dependencies: - core-js "^3.19.2" - object-assign "^4.1.1" - promise "^8.1.0" - raf "^3.4.1" - regenerator-runtime "^0.13.9" - whatwg-fetch "^3.6.2" - -react-dev-utils@^12.0.1: - version "12.0.1" - resolved "https://registry.npmmirror.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" - integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== - dependencies: - "@babel/code-frame" "^7.16.0" - address "^1.1.2" - browserslist "^4.18.1" - chalk "^4.1.2" - cross-spawn "^7.0.3" - detect-port-alt "^1.1.6" - escape-string-regexp "^4.0.0" - filesize "^8.0.6" - find-up "^5.0.0" - fork-ts-checker-webpack-plugin "^6.5.0" - global-modules "^2.0.0" - globby "^11.0.4" - gzip-size "^6.0.0" - immer "^9.0.7" - is-root "^2.1.0" - loader-utils "^3.2.0" - open "^8.4.0" - pkg-up "^3.1.0" - prompts "^2.4.2" - react-error-overlay "^6.0.11" - recursive-readdir "^2.2.2" - shell-quote "^1.7.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.npmmirror.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.npmmirror.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1, react-is@^17.0.2: - version "17.0.2" - resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react-refresh@^0.11.0: - version "0.11.0" - resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" - integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== - -react-scripts@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003" - integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== - dependencies: - "@babel/core" "^7.16.0" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3" - "@svgr/webpack" "^5.5.0" - babel-jest "^27.4.2" - babel-loader "^8.2.3" - babel-plugin-named-asset-import "^0.3.8" - babel-preset-react-app "^10.0.1" - bfj "^7.0.2" - browserslist "^4.18.1" - camelcase "^6.2.1" - case-sensitive-paths-webpack-plugin "^2.4.0" - css-loader "^6.5.1" - css-minimizer-webpack-plugin "^3.2.0" - dotenv "^10.0.0" - dotenv-expand "^5.1.0" - eslint "^8.3.0" - eslint-config-react-app "^7.0.1" - eslint-webpack-plugin "^3.1.1" - file-loader "^6.2.0" - fs-extra "^10.0.0" - html-webpack-plugin "^5.5.0" - identity-obj-proxy "^3.0.0" - jest "^27.4.3" - jest-resolve "^27.4.2" - jest-watch-typeahead "^1.0.0" - mini-css-extract-plugin "^2.4.5" - postcss "^8.4.4" - postcss-flexbugs-fixes "^5.0.2" - postcss-loader "^6.2.1" - postcss-normalize "^10.0.1" - postcss-preset-env "^7.0.1" - prompts "^2.4.2" - react-app-polyfill "^3.0.0" - react-dev-utils "^12.0.1" - react-refresh "^0.11.0" - resolve "^1.20.0" - resolve-url-loader "^4.0.0" - sass-loader "^12.3.0" - semver "^7.3.5" - source-map-loader "^3.0.0" - style-loader "^3.3.1" - tailwindcss "^3.0.2" - terser-webpack-plugin "^5.2.5" - webpack "^5.64.4" - webpack-dev-server "^4.6.0" - webpack-manifest-plugin "^4.0.2" - workbox-webpack-plugin "^6.4.1" - optionalDependencies: - fsevents "^2.3.2" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.npmmirror.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -readable-stream@^2.0.1: - version "2.3.8" - resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.6.0, readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^3.6.0, readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -readonly-date@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" - integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== - -recursive-readdir@^2.2.2, recursive-readdir@^2.2.3: - version "2.2.3" - resolved "https://registry.npmmirror.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" - integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== - dependencies: - minimatch "^3.0.5" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -reflect.getprototypeof@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.9: - version "0.13.11" - resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.1, regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-parser@^2.2.11: - version "2.2.11" - resolved "https://registry.npmmirror.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" - integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== - -regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -regexpu-core@^5.3.1, regexpu-core@^5.3.2: - version "5.3.2" - resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.npmmirror.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" - integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== - dependencies: - adjust-sourcemap-loader "^4.0.0" - convert-source-map "^1.7.0" - loader-utils "^2.0.0" - postcss "^7.0.35" - source-map "0.6.1" - -resolve.exports@^1.1.0, resolve.exports@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" - integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== - -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.4" - resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-terser@^7.0.0, rollup-plugin-terser@^7.0.2: - version "7.0.2" - resolved "https://registry.npmmirror.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup@^2.43.1, rollup@^2.79.1: - version "2.79.1" - resolved "https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - -run-parallel@^1.1.9, run-parallel@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sanitize.css@*, sanitize.css@^13.0.0: - version "13.0.0" - resolved "https://registry.npmmirror.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" - integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== - -sass-loader@^12.3.0, sass-loader@^12.6.0: - version "12.6.0" - resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sax@^1.2.4, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: - version "7.5.4" - resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0, send@^0.18.0: - version "0.18.0" - resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.15.0, serve-static@^1.15.0: - version "1.15.0" - resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0, setprototypeof@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.11: - version "2.4.11" - resolved "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3, shell-quote@^1.8.0: - version "1.8.1" - resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -source-list-map@^2.0.0, source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-loader@^3.0.0, source-map-loader@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/source-map-loader/-/source-map-loader-3.0.2.tgz#af23192f9b344daa729f6772933194cc5fa54fee" - integrity sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.3" - source-map-js "^1.0.1" - -source-map-support@^0.5.21, source-map-support@^0.5.6, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3, source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -source-map@^0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.npmmirror.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -sprintf-js@^1.0.3: - version "1.1.2" - resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-utils@^2.0.3, stack-utils@^2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -statuses@2.0.1, statuses@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - -string-length@^4.0.1, string-length@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-length@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/string-length/-/string-length-5.0.1.tgz#3d647f497b6e8e8d41e422f7e0b23bc536c8381e" - integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== - dependencies: - char-regex "^2.0.0" - strip-ansi "^7.0.1" - -string-natural-compare@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" - integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: - version "4.0.9" - resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz#148779de0f75d36b13b15885fec5cadde994520d" - integrity sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - side-channel "^1.0.4" - -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.7" - resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -style-loader@^3.3.1, style-loader@^3.3.2: - version "3.3.3" - resolved "https://registry.npmmirror.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" - integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== - -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - -sucrase@^3.31.0, sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "7.1.6" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^5.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-parser@^2.0.2, svg-parser@^2.0.4: - version "2.0.4" - resolved "https://registry.npmmirror.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svgo@^1.2.2, svgo@^1.3.2: - version "1.3.2" - resolved "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -symbol-observable@^2.0.3: - version "2.0.3" - resolved "https://registry.npmmirror.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" - integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -tailwindcss@^3.0.2, tailwindcss@^3.3.1: - version "3.3.3" - resolved "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf" - integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.2.12" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.18.2" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" - integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== - dependencies: - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -terminal-link@^2.0.0, terminal-link@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.0.0, terser@^5.10.0, terser@^5.16.8: - version "5.19.4" - resolved "https://registry.npmmirror.com/terser/-/terser-5.19.4.tgz#941426fa482bf9b40a0308ab2b3cd0cf7c775ebd" - integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0, thenify-all@^1.6.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4", thenify@^3.3.1: - version "3.3.1" - resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -throat@^6.0.1, throat@^6.0.2: - version "6.0.2" - resolved "https://registry.npmmirror.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" - integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== - -thunky@^1.0.2, thunky@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tmpl@1.0.5, tmpl@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1, toidentifier@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^4.0.0, tough-cookie@^4.1.2: - version "4.1.3" - resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - -ts-interface-checker@^0.1.13, ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3, tslib@^2.5.0: - version "2.6.2" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tweetnacl@1.0.3, tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@^1.6.18, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0, unicode-property-aliases-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@^1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unquote@^1.1.1, unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== - -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-browserslist-db@^1.0.10, update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2, uri-js@^4.4.1: - version "4.4.1" - resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-parse@^1.5.10, url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util.promisify@^1.0.1: - version "1.1.2" - resolved "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.1.2.tgz#02b3dbadbb80071eee4c43aed58747afdfc516db" - integrity sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - for-each "^0.3.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - object.getownpropertydescriptors "^2.1.6" - safe-array-concat "^1.0.0" - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -utila@^0.4.0, utila@~0.4: - version "0.4.0" - resolved "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utils-merge@1.0.1, utils-merge@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-to-istanbul@^8.1.0, v8-to-istanbul@^8.1.1: - version "8.1.1" - resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -vary@^1.1.2, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@^1.0.8: - version "1.0.8" - resolved "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -web-vitals@^2.1.4: - version "2.1.4" - resolved "https://registry.npmmirror.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c" - integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg== - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -webpack-dev-middleware@^5.3.1, webpack-dev-middleware@^5.3.3: - version "5.3.3" - resolved "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@^4.13.2, webpack-dev-server@^4.6.0: - version "4.15.1" - resolved "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" - -webpack-manifest-plugin@^4.0.2, webpack-manifest-plugin@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f" - integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow== - dependencies: - tapable "^2.0.0" - webpack-sources "^2.2.0" - -webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^2.2.0: - version "2.3.1" - resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" - integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.64.4, webpack@^5.77.0: - version "5.88.2" - resolved "https://registry.npmmirror.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1, websocket-extensions@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-fetch@^3.6.2: - version "3.6.18" - resolved "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.18.tgz#2f640cdee315abced7daeaed2309abd1e44e62d4" - integrity sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q== - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^8.0.0, whatwg-url@^8.5.0, whatwg-url@^8.7.0: - version "8.7.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^1.3.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.3: - version "1.2.5" - resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -workbox-background-sync@6.6.1, workbox-background-sync@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" - integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg== - dependencies: - idb "^7.0.1" - workbox-core "6.6.1" - -workbox-broadcast-update@6.6.1, workbox-broadcast-update@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e" - integrity sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ== - dependencies: - workbox-core "6.6.1" - -workbox-build@6.6.1, workbox-build@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-build/-/workbox-build-6.6.1.tgz#6010e9ce550910156761448f2dbea8cfcf759cb0" - integrity sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw== - dependencies: - "@apideck/better-ajv-errors" "^0.3.1" - "@babel/core" "^7.11.1" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.2" - "@rollup/plugin-babel" "^5.2.0" - "@rollup/plugin-node-resolve" "^11.2.1" - "@rollup/plugin-replace" "^2.4.1" - "@surma/rollup-plugin-off-main-thread" "^2.2.3" - ajv "^8.6.0" - common-tags "^1.8.0" - fast-json-stable-stringify "^2.1.0" - fs-extra "^9.0.1" - glob "^7.1.6" - lodash "^4.17.20" - pretty-bytes "^5.3.0" - rollup "^2.43.1" - rollup-plugin-terser "^7.0.0" - source-map "^0.8.0-beta.0" - stringify-object "^3.3.0" - strip-comments "^2.0.1" - tempy "^0.6.0" - upath "^1.2.0" - workbox-background-sync "6.6.1" - workbox-broadcast-update "6.6.1" - workbox-cacheable-response "6.6.1" - workbox-core "6.6.1" - workbox-expiration "6.6.1" - workbox-google-analytics "6.6.1" - workbox-navigation-preload "6.6.1" - workbox-precaching "6.6.1" - workbox-range-requests "6.6.1" - workbox-recipes "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - workbox-streams "6.6.1" - workbox-sw "6.6.1" - workbox-window "6.6.1" - -workbox-cacheable-response@6.6.1, workbox-cacheable-response@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz#284c2b86be3f4fd191970ace8c8e99797bcf58e9" - integrity sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag== - dependencies: - workbox-core "6.6.1" - -workbox-core@6.6.1, workbox-core@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265" - integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw== - -workbox-expiration@6.6.1, workbox-expiration@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-expiration/-/workbox-expiration-6.6.1.tgz#a841fa36676104426dbfb9da1ef6a630b4f93739" - integrity sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A== - dependencies: - idb "^7.0.1" - workbox-core "6.6.1" - -workbox-google-analytics@6.6.1, workbox-google-analytics@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz#a07a6655ab33d89d1b0b0a935ffa5dea88618c5d" - integrity sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA== - dependencies: - workbox-background-sync "6.6.1" - workbox-core "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - -workbox-navigation-preload@6.6.1, workbox-navigation-preload@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059" - integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA== - dependencies: - workbox-core "6.6.1" - -workbox-precaching@6.6.1, workbox-precaching@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2" - integrity sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A== - dependencies: - workbox-core "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - -workbox-range-requests@6.6.1, workbox-range-requests@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz#ddaf7e73af11d362fbb2f136a9063a4c7f507a39" - integrity sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g== - dependencies: - workbox-core "6.6.1" - -workbox-recipes@6.6.1, workbox-recipes@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-recipes/-/workbox-recipes-6.6.1.tgz#ea70d2b2b0b0bce8de0a9d94f274d4a688e69fae" - integrity sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g== - dependencies: - workbox-cacheable-response "6.6.1" - workbox-core "6.6.1" - workbox-expiration "6.6.1" - workbox-precaching "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - -workbox-routing@6.6.1, workbox-routing@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581" - integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg== - dependencies: - workbox-core "6.6.1" - -workbox-strategies@6.6.1, workbox-strategies@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf" - integrity sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw== - dependencies: - workbox-core "6.6.1" - -workbox-streams@6.6.1, workbox-streams@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-streams/-/workbox-streams-6.6.1.tgz#b2f7ba7b315c27a6e3a96a476593f99c5d227d26" - integrity sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q== - dependencies: - workbox-core "6.6.1" - workbox-routing "6.6.1" - -workbox-sw@6.6.1, workbox-sw@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-sw/-/workbox-sw-6.6.1.tgz#d4c4ca3125088e8b9fd7a748ed537fa0247bd72c" - integrity sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ== - -workbox-webpack-plugin@^6.4.1, workbox-webpack-plugin@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.1.tgz#4f81cc1ad4e5d2cd7477a86ba83c84ee2d187531" - integrity sha512-zpZ+ExFj9NmiI66cFEApyjk7hGsfJ1YMOaLXGXBoZf0v7Iu6hL0ZBe+83mnDq3YYWAfA3fnyFejritjOHkFcrA== - dependencies: - fast-json-stable-stringify "^2.1.0" - pretty-bytes "^5.4.1" - upath "^1.2.0" - webpack-sources "^1.4.3" - workbox-build "6.6.1" - -workbox-window@6.6.1, workbox-window@^6.5.4: - version "6.6.1" - resolved "https://registry.npmmirror.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e" - integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ== - dependencies: - "@types/trusted-types" "^2.0.2" - workbox-core "6.6.1" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1, wrappy@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7, ws@^7.4.6, ws@^7.5.9: - version "7.5.9" - resolved "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.13.0: - version "8.13.0" - resolved "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xstream@^11.14.0: - version "11.14.0" - resolved "https://registry.npmmirror.com/xstream/-/xstream-11.14.0.tgz#2c071d26b18310523b6877e86b4e54df068a9ae5" - integrity sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw== - dependencies: - globalthis "^1.0.1" - symbol-observable "^2.0.3" - -y18n@^5.0.5, y18n@^5.0.8: - version "5.0.8" - resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yaml@^2.1.1: - version "2.3.2" - resolved "https://registry.npmmirror.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== - -yargs-parser@^20.2.2, yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/contracts/api-maci/.cargo/config b/contracts/api-maci/.cargo/config new file mode 100644 index 0000000..af5698e --- /dev/null +++ b/contracts/api-maci/.cargo/config @@ -0,0 +1,4 @@ +[alias] +wasm = "build --release --lib --target wasm32-unknown-unknown" +unit-test = "test --lib" +schema = "run --bin schema" diff --git a/contracts/api-maci/.editorconfig b/contracts/api-maci/.editorconfig new file mode 100644 index 0000000..3d36f20 --- /dev/null +++ b/contracts/api-maci/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.rs] +indent_size = 4 diff --git a/contracts/api-maci/.gitignore b/contracts/api-maci/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/contracts/api-maci/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/contracts/api-maci/Cargo.lock b/contracts/api-maci/Cargo.lock new file mode 100644 index 0000000..379363f --- /dev/null +++ b/contracts/api-maci/Cargo.lock @@ -0,0 +1,2103 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom 0.2.11", + "once_cell", + "version_check", +] + +[[package]] +name = "alga" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +dependencies = [ + "approx", + "num-complex", + "num-traits", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "approx" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bellman-ce-verifier" +version = "0.1.0" +source = "git+https://github.com/DoraFactory/snarkjs-bellman-adapter.git#4f46ef70b5f301236a66dc74a09ed56b106f8ba5" +dependencies = [ + "pairing_ce 0.28.5", + "parity-scale-codec", +] + +[[package]] +name = "bellman_ce" +version = "0.3.2" +source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" +dependencies = [ + "bit-vec", + "blake2s_const 0.6.0 (git+https://github.com/matter-labs/bellman?branch=beta)", + "blake2s_simd", + "byteorder", + "cfg-if 1.0.0", + "crossbeam", + "futures", + "hex", + "lazy_static", + "num_cpus", + "pairing_ce 0.24.2", + "rand 0.4.6", + "tiny-keccak", +] + +[[package]] +name = "bellman_ce" +version = "0.3.2" +source = "git+https://github.com/DoraFactory/bellman.git#135ea382722778065b140963f5fb0a7bd1e46375" +dependencies = [ + "arrayvec 0.7.4", + "bit-vec", + "blake2s_const 0.6.0 (git+https://github.com/DoraFactory/bellman.git)", + "blake2s_simd", + "byteorder", + "cfg-if 1.0.0", + "crossbeam", + "futures", + "hex", + "lazy_static", + "num_cpus", + "pairing_ce 0.28.5", + "rand 0.4.6", + "serde", + "smallvec", + "tiny-keccak", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +dependencies = [ + "serde", +] + +[[package]] +name = "blake2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "blake2-rfc_bellman_edition" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc60350286c7c3db13b98e91dbe5c8b6830a6821bc20af5b0c310ce94d74915" +dependencies = [ + "arrayvec 0.4.12", + "byteorder", + "constant_time_eq", +] + +[[package]] +name = "blake2s_const" +version = "0.6.0" +source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_const" +version = "0.6.0" +source = "git+https://github.com/DoraFactory/bellman.git#135ea382722778065b140963f5fb0a7bd1e46375" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "bnum" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9008b6bb9fc80b5277f2fe481c09e828743d9151203e804583eb4c9e15b31d" + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73c9d2043a9e617b0d602fbc0a0ecd621568edbf3a9774890a6d562389bd8e1c" +dependencies = [ + "prost 0.11.9", + "prost-types", + "tendermint-proto", +] + +[[package]] +name = "cosmwasm-crypto" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bb3c77c3b7ce472056968c745eb501c440fbc07be5004eba02782c35bfbbe3" +dependencies = [ + "digest 0.10.7", + "ecdsa", + "ed25519-zebra", + "k256", + "rand_core 0.6.4", + "thiserror", +] + +[[package]] +name = "cosmwasm-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea73e9162e6efde00018d55ed0061e93a108b5d6ec4548b4f8ce3c706249687" +dependencies = [ + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-schema" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df41ea55f2946b6b43579659eec048cc2f66e8c8e2e3652fc5e5e476f673856" +dependencies = [ + "cosmwasm-schema-derive", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43609e92ce1b9368aa951b334dd354a2d0dd4d484931a5f83ae10e12a26c8ba9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-std" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d6864742e3a7662d024b51a94ea81c9af21db6faea2f9a6d2232bb97c6e53e" +dependencies = [ + "base64", + "bech32", + "bnum", + "cosmwasm-crypto", + "cosmwasm-derive", + "derivative", + "forward_ref", + "hex", + "schemars", + "serde", + "serde-json-wasm", + "sha2 0.10.8", + "static_assertions", + "thiserror", +] + +[[package]] +name = "cosmwasm-storage" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd2b4ae72a03e8f56c85df59d172d51d2d7dc9cec6e2bc811e3fb60c588032a4" +dependencies = [ + "cosmwasm-std", + "serde", +] + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" +dependencies = [ + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-deque" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "crossbeam-utils", + "lazy_static", + "maybe-uninit", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "cw-multi-test" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fff029689ae89127cf6d7655809a68d712f3edbdb9686c70b018ba438b26ca" +dependencies = [ + "anyhow", + "bech32", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "derivative", + "itertools 0.12.0", + "prost 0.12.3", + "schemars", + "serde", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "cw-storage-plus" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-utils" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw4" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24754ff6e45f2a1c60adc409d9b2eb87666012c44021329141ffaab3388fccd2" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "serde", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[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", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dyn-clone" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_ce" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a682c12d0cc98a32ab7540401a5ea1ed21d11571eea11d5829cd721f85ff0" +dependencies = [ + "byteorder", + "ff_derive_ce 0.8.0", + "hex", + "rand 0.4.6", +] + +[[package]] +name = "ff_ce" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38107cbd8bac0d907d7e7513c9f68c95adbda9e6f6f6bdf3f5111c6ecac4fe47" +dependencies = [ + "byteorder", + "ff_derive_ce 0.9.3", + "hex", + "rand 0.4.6", +] + +[[package]] +name = "ff_ce" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b538e4231443a5b9c507caee3356f016d832cf7393d2d90f03ea3180d4e3fbc" +dependencies = [ + "byteorder", + "ff_derive_ce 0.11.2", + "hex", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "ff_derive_ce" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c052fa6d4c2f12305ec364bfb8ef884836f3f61ea015b202372ff996d1ac4b" +dependencies = [ + "num-bigint 0.2.6", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ff_derive_ce" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde5a00073374b4d7aa2d3a8359a5709f9c0bfac8393f254655d16b4acdfe823" +dependencies = [ + "num-bigint 0.4.4", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ff_derive_ce" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96fbccd88dbb1fac4ee4a07c2fcc4ca719a74ffbd9d2b9d41d8c8eb073d8b20" +dependencies = [ + "num-bigint 0.4.4", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "paste", +] + +[[package]] +name = "forward_ref" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" + +[[package]] +name = "franklin-crypto" +version = "0.0.5" +source = "git+https://github.com/matter-labs/franklin-crypto?branch=beta#9e3c2a12053c014df9b6c1f227db4470e02b4c5b" +dependencies = [ + "bellman_ce 0.3.2 (git+https://github.com/matter-labs/bellman?branch=beta)", + "bit-vec", + "blake2", + "blake2-rfc_bellman_edition", + "blake2s_simd", + "byteorder", + "digest 0.9.0", + "hex", + "hmac 0.11.0", + "itertools 0.9.0", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "poseidon_hash", + "rand 0.4.6", + "serde", + "serde_derive", + "sha2 0.9.9", + "splitmut", + "tiny-keccak", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "futures" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-executor" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac 0.11.1", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" +dependencies = [ + "cfg-if 1.0.0", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "maci" +version = "0.1.0" +dependencies = [ + "anyhow", + "assert_matches", + "bellman-ce-verifier", + "bellman_ce 0.3.2 (git+https://github.com/DoraFactory/bellman.git)", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus", + "cw2", + "cw4", + "derivative", + "ff_ce 0.11.0", + "ff_ce 0.14.3", + "franklin-crypto", + "getrandom 0.2.11", + "hex", + "num-bigint 0.4.4", + "num-traits", + "pairing_ce 0.28.5", + "poseidon-rs", + "prost 0.11.9", + "prost-types", + "schemars", + "serde", + "serde_json", + "sha2 0.9.9", + "thiserror", +] + +[[package]] +name = "mathru" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7584d97fddf282cc3e5cc6fae54e596cfcd708a3b375633294d9db8e8b6d776" +dependencies = [ + "rand 0.7.3", + "serde", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +dependencies = [ + "autocfg", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "pairing_ce" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e753515675eaaa98071d814bea0148ae8c9d7995fa0531bf222e7857e3f1759" +dependencies = [ + "byteorder", + "cfg-if 1.0.0", + "ff_ce 0.12.0", + "rand 0.4.6", +] + +[[package]] +name = "pairing_ce" +version = "0.28.5" +source = "git+https://github.com/matter-labs/pairing.git#f55393fd366596eac792d78525d26e9c4d6ed1ca" +dependencies = [ + "byteorder", + "cfg-if 1.0.0", + "ff_ce 0.14.3", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec 0.7.4", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "poseidon-rs" +version = "0.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7bd44e953add4c619a75a970cc4335e3175dfecc61ab64ee6caa8fffde95c95" +dependencies = [ + "ff_ce 0.11.0", + "rand 0.4.6", + "serde_json", +] + +[[package]] +name = "poseidon_hash" +version = "0.0.1" +source = "git+https://github.com/shamatar/poseidon_hash.git#495ae87ff066d066b140c7d0dff8d929b87d31ee" +dependencies = [ + "alga", + "approx", + "blake2-rfc_bellman_edition", + "byteorder", + "mathru", + "num-bigint 0.2.6", + "num-integer", + "num-traits", + "pairing_ce 0.24.2", + "rand 0.4.6", + "sha2 0.8.2", + "tiny-keccak", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive 0.12.3", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.11", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "schemars" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 1.0.109", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a62a1fad1e1828b24acac8f2b468971dade7b8c3c2e672bcadefefb1f8c137" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "splitmut" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85070f382340e8b23a75808e83573ddf65f9ad9143df9573ca37c1ed2ee956a" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tendermint-proto" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cec054567d16d85e8c3f6a3139963d1a66d9d3051ed545d31562550e9bcc3d" +dependencies = [ + "bytes", + "flex-error", + "num-derive", + "num-traits", + "prost 0.11.9", + "prost-types", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "time" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +dependencies = [ + "deranged", + "powerfmt", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winnow" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +dependencies = [ + "memchr", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/contracts/api-maci/Cargo.toml b/contracts/api-maci/Cargo.toml new file mode 100644 index 0000000..1c6ca3e --- /dev/null +++ b/contracts/api-maci/Cargo.toml @@ -0,0 +1,84 @@ +[package] +name = "cw-api-maci" +version = "0.1.0" +authors = ["feng"] +edition = "2021" + +exclude = [ + # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. + "contract.wasm", + "hash.txt", +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ["cdylib", "rlib"] + +[profile.release] +opt-level = 3 +debug = false +rpath = false +lto = true +debug-assertions = false +codegen-units = 1 +panic = 'abort' +incremental = false +overflow-checks = true + +[features] +# for more explicit tests, cargo test --features=backtraces +backtraces = ["cosmwasm-std/backtraces"] +# use library feature to disable all instantiate/execute/query exports +library = [] +mt = [] + +[package.metadata.scripts] +optimize = """docker run --rm -v "$(pwd)":/code \ + --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ + --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ + cosmwasm/rust-optimizer:0.12.10 +""" + +[dependencies] +cosmwasm-std = { version = "1.5.0", features = ["stargate"] } +cosmwasm-storage = "1.5.0" +cw-storage-plus = "1.1.0" +cosmwasm-schema = "1.5.0" +cw2 = "1.1.0" +schemars = "0.8.10" +serde = { version = "1.0.145", default-features = false, features = ["derive"] } +thiserror = "1.0.31" +bellman-ce-verifier = { git = "https://github.com/DoraFactory/snarkjs-bellman-adapter.git", default-features = false, version = "0.1.0" } +hex = "0.4" +# pairing_ce = { git = "https://github.com/matter-labs/pairing.git" } +pairing_ce = { git = "https://github.com/matter-labs/pairing.git" } +ff_ce = "0.14.3" +num-bigint = "0.4.3" +num-traits = "0.2" +# sha256 = "1.1.3" +sha2 = { version = "0.9.5", default-features = false } +poseidon-rs = "0.0.10" +getrandom = { version = "0.2.9", features = ["js"] } +ff = { package = "ff_ce", version = "0.11", features = ["derive"] } +cosmos-sdk-proto = { version = "0.19.0", default-features = false } +prost = "0.11" +prost-types = "0.11" +cw4 = "1.1.0" +serde_json = "1.0" + +bellman_ce = { git = "https://github.com/DoraFactory/bellman.git" } +franklin-crypto = { git = "https://github.com/matter-labs/franklin-crypto", branch = "beta", features = [ + "multicore", + "plonk", +] } + +[dev-dependencies] +anyhow = "1" +assert_matches = "1" +cw-multi-test = { version = "0.20.0", features = ["cosmwasm_1_4"] } +derivative = "2" +serde_json = "1.0" +num-bigint = "0.4.3" +secp256k1 = { version = "0.27", features = ["rand-std"] } +base64 = "0.21" diff --git a/contracts/api-maci/README.md b/contracts/api-maci/README.md new file mode 100644 index 0000000..f69f47b --- /dev/null +++ b/contracts/api-maci/README.md @@ -0,0 +1,60 @@ +# CosmWasm Maci Contract +This is maci cosmwasm contract. + +### Maci Support + +- Related `circuits` and offchain js scripts from: https://github.com/dorahacksglobal/qf-maci. + +## cw-groth16 +This cosmwasm contract verifies Groth16 proofs, using the previously developed [SnarkJS-Bellman Adapter](https://github.com/DoraFactory/snarkjs-bellman-adapter). + +### Environment: +- OS: Mac M1 +- Rust version: stable-aarch64-apple-darwin (default) rustc 1.69.0 (84c898d65 2023-04-16) + +### Get Start + +**1. Get code** + +```bash +git clone https://github.com/DoraFactory/cosmwasm-maci +``` + + + +**2. About test code** + +> In [test_all_round()](./src/tests.rs) we tested the entire maci process, with relevant test data from [qf-maci](https://github.com/dorahacksglobal/qf-maci). + +```bash +cd cosmwasm-maci/maci +cargo test +``` + + + +**3. Compile contract** + +Compile and Optimize the wasm code + +> If you are using different os, you can change the docker image on your machine and run, otherwise you will compile failed. + +If your system archtecture is `arm`,go into the `maci` dir and run with this command: + +```bash +docker run --rm -v "$(pwd)":/code \ + --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ + --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ + cosmwasm/rust-optimizer-arm64:0.12.11 +``` + +and then you will see an `artifacts` dir and next we will upload it to chain. + +If your system archtecture is `amd`, run with this: + +```bash +docker run --rm -v "$(pwd)":/code \ + --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ + --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ + cosmwasm/rust-optimizer:0.12.11 +``` diff --git a/contracts/api-maci/schema/cw-api-maci.json b/contracts/api-maci/schema/cw-api-maci.json new file mode 100644 index 0000000..ac60762 --- /dev/null +++ b/contracts/api-maci/schema/cw-api-maci.json @@ -0,0 +1,1220 @@ +{ + "contract_name": "cw-api-maci", + "contract_version": "0.1.0", + "idl_version": "1.0.0", + "instantiate": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "InstantiateMsg", + "type": "object", + "required": [ + "certification_system", + "circuit_type", + "coordinator", + "max_voters", + "round_info", + "vote_option_map", + "voting_time", + "whitelist_backend_pubkey", + "whitelist_voting_power_args" + ], + "properties": { + "certification_system": { + "$ref": "#/definitions/Uint256" + }, + "circuit_type": { + "$ref": "#/definitions/Uint256" + }, + "coordinator": { + "$ref": "#/definitions/PubKey" + }, + "max_voters": { + "type": "integer", + "format": "uint128", + "minimum": 0.0 + }, + "round_info": { + "$ref": "#/definitions/RoundInfo" + }, + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + }, + "voting_time": { + "$ref": "#/definitions/VotingTime" + }, + "whitelist_backend_pubkey": { + "type": "string" + }, + "whitelist_voting_power_args": { + "$ref": "#/definitions/VotingPowerArgs" + } + }, + "additionalProperties": false, + "definitions": { + "PubKey": { + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/definitions/Uint256" + }, + "y": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "RoundInfo": { + "type": "object", + "required": [ + "description", + "link", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + }, + "VotingPowerArgs": { + "type": "object", + "required": [ + "mode", + "slope", + "threshold" + ], + "properties": { + "mode": { + "$ref": "#/definitions/VotingPowerMode" + }, + "slope": { + "$ref": "#/definitions/Uint256" + }, + "threshold": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "VotingPowerMode": { + "type": "string", + "enum": [ + "slope", + "threshold" + ] + }, + "VotingTime": { + "type": "object", + "required": [ + "end_time", + "start_time" + ], + "properties": { + "end_time": { + "$ref": "#/definitions/Timestamp" + }, + "start_time": { + "$ref": "#/definitions/Timestamp" + } + }, + "additionalProperties": false + } + } + }, + "execute": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ExecuteMsg", + "oneOf": [ + { + "type": "object", + "required": [ + "set_round_info" + ], + "properties": { + "set_round_info": { + "type": "object", + "required": [ + "round_info" + ], + "properties": { + "round_info": { + "$ref": "#/definitions/RoundInfo" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "set_vote_options_map" + ], + "properties": { + "set_vote_options_map": { + "type": "object", + "required": [ + "vote_option_map" + ], + "properties": { + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "sign_up" + ], + "properties": { + "sign_up": { + "type": "object", + "required": [ + "amount", + "certificate", + "pubkey" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint256" + }, + "certificate": { + "type": "string" + }, + "pubkey": { + "$ref": "#/definitions/PubKey" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "start_process_period" + ], + "properties": { + "start_process_period": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "publish_message" + ], + "properties": { + "publish_message": { + "type": "object", + "required": [ + "enc_pub_key", + "message" + ], + "properties": { + "enc_pub_key": { + "$ref": "#/definitions/PubKey" + }, + "message": { + "$ref": "#/definitions/MessageData" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "process_message" + ], + "properties": { + "process_message": { + "type": "object", + "required": [ + "new_state_commitment" + ], + "properties": { + "groth16_proof": { + "anyOf": [ + { + "$ref": "#/definitions/Groth16ProofType" + }, + { + "type": "null" + } + ] + }, + "new_state_commitment": { + "$ref": "#/definitions/Uint256" + }, + "plonk_proof": { + "anyOf": [ + { + "$ref": "#/definitions/PlonkProofType" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "stop_processing_period" + ], + "properties": { + "stop_processing_period": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "process_tally" + ], + "properties": { + "process_tally": { + "type": "object", + "required": [ + "new_tally_commitment" + ], + "properties": { + "groth16_proof": { + "anyOf": [ + { + "$ref": "#/definitions/Groth16ProofType" + }, + { + "type": "null" + } + ] + }, + "new_tally_commitment": { + "$ref": "#/definitions/Uint256" + }, + "plonk_proof": { + "anyOf": [ + { + "$ref": "#/definitions/PlonkProofType" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "stop_tallying_period" + ], + "properties": { + "stop_tallying_period": { + "type": "object", + "required": [ + "results", + "salt" + ], + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Uint256" + } + }, + "salt": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "bond" + ], + "properties": { + "bond": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "withdraw" + ], + "properties": { + "withdraw": { + "type": "object", + "properties": { + "amount": { + "anyOf": [ + { + "$ref": "#/definitions/Uint128" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "definitions": { + "Groth16ProofType": { + "type": "object", + "required": [ + "a", + "b", + "c" + ], + "properties": { + "a": { + "type": "string" + }, + "b": { + "type": "string" + }, + "c": { + "type": "string" + } + }, + "additionalProperties": false + }, + "MessageData": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/Uint256" + }, + "maxItems": 7, + "minItems": 7 + } + }, + "additionalProperties": false + }, + "PlonkProofType": { + "type": "object", + "required": [ + "grand_product_at_z_omega", + "grand_product_commitment", + "input_values", + "linearization_polynomial_at_z", + "n", + "num_inputs", + "opening_at_z_omega_proof", + "opening_at_z_proof", + "permutation_polynomials_at_z", + "quotient_poly_commitments", + "quotient_polynomial_at_z", + "wire_commitments", + "wire_values_at_z", + "wire_values_at_z_omega" + ], + "properties": { + "grand_product_at_z_omega": { + "type": "string" + }, + "grand_product_commitment": { + "type": "string" + }, + "input_values": { + "type": "array", + "items": { + "type": "string" + } + }, + "linearization_polynomial_at_z": { + "type": "string" + }, + "n": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "num_inputs": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "opening_at_z_omega_proof": { + "type": "string" + }, + "opening_at_z_proof": { + "type": "string" + }, + "permutation_polynomials_at_z": { + "type": "array", + "items": { + "type": "string" + } + }, + "quotient_poly_commitments": { + "type": "array", + "items": { + "type": "string" + } + }, + "quotient_polynomial_at_z": { + "type": "string" + }, + "wire_commitments": { + "type": "array", + "items": { + "type": "string" + } + }, + "wire_values_at_z": { + "type": "array", + "items": { + "type": "string" + } + }, + "wire_values_at_z_omega": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "PubKey": { + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/definitions/Uint256" + }, + "y": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "RoundInfo": { + "type": "object", + "required": [ + "description", + "link", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + } + } + }, + "query": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "QueryMsg", + "oneOf": [ + { + "type": "object", + "required": [ + "get_round_info" + ], + "properties": { + "get_round_info": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_voting_time" + ], + "properties": { + "get_voting_time": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_period" + ], + "properties": { + "get_period": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_num_sign_up" + ], + "properties": { + "get_num_sign_up": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_msg_chain_length" + ], + "properties": { + "get_msg_chain_length": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_processed_msg_count" + ], + "properties": { + "get_processed_msg_count": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_processed_user_count" + ], + "properties": { + "get_processed_user_count": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_result" + ], + "properties": { + "get_result": { + "type": "object", + "required": [ + "index" + ], + "properties": { + "index": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_all_result" + ], + "properties": { + "get_all_result": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_state_idx_inc" + ], + "properties": { + "get_state_idx_inc": { + "type": "object", + "required": [ + "address" + ], + "properties": { + "address": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_voice_credit_balance" + ], + "properties": { + "get_voice_credit_balance": { + "type": "object", + "required": [ + "index" + ], + "properties": { + "index": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "description": "Checks permissions of the caller on this proxy. If CanExecute returns true then a call to `Execute` with the same message, before any further state changes, should also succeed.", + "type": "object", + "required": [ + "is_white_list" + ], + "properties": { + "is_white_list": { + "type": "object", + "required": [ + "amount", + "certificate", + "pubkey" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint256" + }, + "certificate": { + "type": "string" + }, + "pubkey": { + "$ref": "#/definitions/PubKey" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "white_balance_of" + ], + "properties": { + "white_balance_of": { + "type": "object", + "required": [ + "amount", + "certificate", + "pubkey" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint256" + }, + "certificate": { + "type": "string" + }, + "pubkey": { + "$ref": "#/definitions/PubKey" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "white_info" + ], + "properties": { + "white_info": { + "type": "object", + "required": [ + "pubkey" + ], + "properties": { + "pubkey": { + "$ref": "#/definitions/PubKey" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "max_whitelist_num" + ], + "properties": { + "max_whitelist_num": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "vote_option_map" + ], + "properties": { + "vote_option_map": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "max_vote_options" + ], + "properties": { + "max_vote_options": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "query_total_fee_grant" + ], + "properties": { + "query_total_fee_grant": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "query_circuit_type" + ], + "properties": { + "query_circuit_type": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "query_cert_system" + ], + "properties": { + "query_cert_system": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "query_oracle_whitelist_config" + ], + "properties": { + "query_oracle_whitelist_config": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "PubKey": { + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/definitions/Uint256" + }, + "y": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + } + } + }, + "migrate": null, + "sudo": null, + "responses": { + "get_all_result": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "get_msg_chain_length": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "get_num_sign_up": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "get_period": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Period", + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "$ref": "#/definitions/PeriodStatus" + } + }, + "additionalProperties": false, + "definitions": { + "PeriodStatus": { + "type": "string", + "enum": [ + "pending", + "voting", + "processing", + "tallying", + "ended" + ] + } + } + }, + "get_processed_msg_count": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "get_processed_user_count": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "get_result": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "get_round_info": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RoundInfo", + "type": "object", + "required": [ + "description", + "link", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "get_state_idx_inc": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "get_voice_credit_balance": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "get_voting_time": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "VotingTime", + "type": "object", + "required": [ + "end_time", + "start_time" + ], + "properties": { + "end_time": { + "$ref": "#/definitions/Timestamp" + }, + "start_time": { + "$ref": "#/definitions/Timestamp" + } + }, + "additionalProperties": false, + "definitions": { + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + } + } + }, + "is_white_list": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Boolean", + "type": "boolean" + }, + "max_vote_options": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "max_whitelist_num": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "uint128", + "type": "integer", + "format": "uint128", + "minimum": 0.0 + }, + "query_cert_system": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "query_circuit_type": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "query_oracle_whitelist_config": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "OracleWhitelistConfig", + "type": "object", + "required": [ + "backend_pubkey", + "slope", + "threshold", + "voting_power_mode" + ], + "properties": { + "backend_pubkey": { + "$ref": "#/definitions/Binary" + }, + "slope": { + "$ref": "#/definitions/Uint256" + }, + "threshold": { + "$ref": "#/definitions/Uint256" + }, + "voting_power_mode": { + "$ref": "#/definitions/VotingPowerMode" + } + }, + "additionalProperties": false, + "definitions": { + "Binary": { + "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .", + "type": "string" + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "VotingPowerMode": { + "type": "string", + "enum": [ + "slope", + "threshold" + ] + } + } + }, + "query_total_fee_grant": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint128", + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "vote_option_map": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Array_of_String", + "type": "array", + "items": { + "type": "string" + } + }, + "white_balance_of": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "white_info": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "WhitelistConfig", + "type": "object", + "required": [ + "balance", + "is_register" + ], + "properties": { + "balance": { + "$ref": "#/definitions/Uint256" + }, + "is_register": { + "type": "boolean" + } + }, + "additionalProperties": false, + "definitions": { + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + } + } + } + } +} diff --git a/contracts/api-maci/schema/raw/execute.json b/contracts/api-maci/schema/raw/execute.json new file mode 100644 index 0000000..83157b4 --- /dev/null +++ b/contracts/api-maci/schema/raw/execute.json @@ -0,0 +1,448 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ExecuteMsg", + "oneOf": [ + { + "type": "object", + "required": [ + "set_round_info" + ], + "properties": { + "set_round_info": { + "type": "object", + "required": [ + "round_info" + ], + "properties": { + "round_info": { + "$ref": "#/definitions/RoundInfo" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "set_vote_options_map" + ], + "properties": { + "set_vote_options_map": { + "type": "object", + "required": [ + "vote_option_map" + ], + "properties": { + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "sign_up" + ], + "properties": { + "sign_up": { + "type": "object", + "required": [ + "amount", + "certificate", + "pubkey" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint256" + }, + "certificate": { + "type": "string" + }, + "pubkey": { + "$ref": "#/definitions/PubKey" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "start_process_period" + ], + "properties": { + "start_process_period": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "publish_message" + ], + "properties": { + "publish_message": { + "type": "object", + "required": [ + "enc_pub_key", + "message" + ], + "properties": { + "enc_pub_key": { + "$ref": "#/definitions/PubKey" + }, + "message": { + "$ref": "#/definitions/MessageData" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "process_message" + ], + "properties": { + "process_message": { + "type": "object", + "required": [ + "new_state_commitment" + ], + "properties": { + "groth16_proof": { + "anyOf": [ + { + "$ref": "#/definitions/Groth16ProofType" + }, + { + "type": "null" + } + ] + }, + "new_state_commitment": { + "$ref": "#/definitions/Uint256" + }, + "plonk_proof": { + "anyOf": [ + { + "$ref": "#/definitions/PlonkProofType" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "stop_processing_period" + ], + "properties": { + "stop_processing_period": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "process_tally" + ], + "properties": { + "process_tally": { + "type": "object", + "required": [ + "new_tally_commitment" + ], + "properties": { + "groth16_proof": { + "anyOf": [ + { + "$ref": "#/definitions/Groth16ProofType" + }, + { + "type": "null" + } + ] + }, + "new_tally_commitment": { + "$ref": "#/definitions/Uint256" + }, + "plonk_proof": { + "anyOf": [ + { + "$ref": "#/definitions/PlonkProofType" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "stop_tallying_period" + ], + "properties": { + "stop_tallying_period": { + "type": "object", + "required": [ + "results", + "salt" + ], + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Uint256" + } + }, + "salt": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "bond" + ], + "properties": { + "bond": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "withdraw" + ], + "properties": { + "withdraw": { + "type": "object", + "properties": { + "amount": { + "anyOf": [ + { + "$ref": "#/definitions/Uint128" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "definitions": { + "Groth16ProofType": { + "type": "object", + "required": [ + "a", + "b", + "c" + ], + "properties": { + "a": { + "type": "string" + }, + "b": { + "type": "string" + }, + "c": { + "type": "string" + } + }, + "additionalProperties": false + }, + "MessageData": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/Uint256" + }, + "maxItems": 7, + "minItems": 7 + } + }, + "additionalProperties": false + }, + "PlonkProofType": { + "type": "object", + "required": [ + "grand_product_at_z_omega", + "grand_product_commitment", + "input_values", + "linearization_polynomial_at_z", + "n", + "num_inputs", + "opening_at_z_omega_proof", + "opening_at_z_proof", + "permutation_polynomials_at_z", + "quotient_poly_commitments", + "quotient_polynomial_at_z", + "wire_commitments", + "wire_values_at_z", + "wire_values_at_z_omega" + ], + "properties": { + "grand_product_at_z_omega": { + "type": "string" + }, + "grand_product_commitment": { + "type": "string" + }, + "input_values": { + "type": "array", + "items": { + "type": "string" + } + }, + "linearization_polynomial_at_z": { + "type": "string" + }, + "n": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "num_inputs": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "opening_at_z_omega_proof": { + "type": "string" + }, + "opening_at_z_proof": { + "type": "string" + }, + "permutation_polynomials_at_z": { + "type": "array", + "items": { + "type": "string" + } + }, + "quotient_poly_commitments": { + "type": "array", + "items": { + "type": "string" + } + }, + "quotient_polynomial_at_z": { + "type": "string" + }, + "wire_commitments": { + "type": "array", + "items": { + "type": "string" + } + }, + "wire_values_at_z": { + "type": "array", + "items": { + "type": "string" + } + }, + "wire_values_at_z_omega": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "PubKey": { + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/definitions/Uint256" + }, + "y": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "RoundInfo": { + "type": "object", + "required": [ + "description", + "link", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + } + } +} diff --git a/contracts/api-maci/schema/raw/instantiate.json b/contracts/api-maci/schema/raw/instantiate.json new file mode 100644 index 0000000..8b4e936 --- /dev/null +++ b/contracts/api-maci/schema/raw/instantiate.json @@ -0,0 +1,148 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "InstantiateMsg", + "type": "object", + "required": [ + "certification_system", + "circuit_type", + "coordinator", + "max_voters", + "round_info", + "vote_option_map", + "voting_time", + "whitelist_backend_pubkey", + "whitelist_voting_power_args" + ], + "properties": { + "certification_system": { + "$ref": "#/definitions/Uint256" + }, + "circuit_type": { + "$ref": "#/definitions/Uint256" + }, + "coordinator": { + "$ref": "#/definitions/PubKey" + }, + "max_voters": { + "type": "integer", + "format": "uint128", + "minimum": 0.0 + }, + "round_info": { + "$ref": "#/definitions/RoundInfo" + }, + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + }, + "voting_time": { + "$ref": "#/definitions/VotingTime" + }, + "whitelist_backend_pubkey": { + "type": "string" + }, + "whitelist_voting_power_args": { + "$ref": "#/definitions/VotingPowerArgs" + } + }, + "additionalProperties": false, + "definitions": { + "PubKey": { + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/definitions/Uint256" + }, + "y": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "RoundInfo": { + "type": "object", + "required": [ + "description", + "link", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + }, + "VotingPowerArgs": { + "type": "object", + "required": [ + "mode", + "slope", + "threshold" + ], + "properties": { + "mode": { + "$ref": "#/definitions/VotingPowerMode" + }, + "slope": { + "$ref": "#/definitions/Uint256" + }, + "threshold": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "VotingPowerMode": { + "type": "string", + "enum": [ + "slope", + "threshold" + ] + }, + "VotingTime": { + "type": "object", + "required": [ + "end_time", + "start_time" + ], + "properties": { + "end_time": { + "$ref": "#/definitions/Timestamp" + }, + "start_time": { + "$ref": "#/definitions/Timestamp" + } + }, + "additionalProperties": false + } + } +} diff --git a/contracts/api-maci/schema/raw/query.json b/contracts/api-maci/schema/raw/query.json new file mode 100644 index 0000000..91832a8 --- /dev/null +++ b/contracts/api-maci/schema/raw/query.json @@ -0,0 +1,370 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "QueryMsg", + "oneOf": [ + { + "type": "object", + "required": [ + "get_round_info" + ], + "properties": { + "get_round_info": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_voting_time" + ], + "properties": { + "get_voting_time": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_period" + ], + "properties": { + "get_period": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_num_sign_up" + ], + "properties": { + "get_num_sign_up": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_msg_chain_length" + ], + "properties": { + "get_msg_chain_length": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_processed_msg_count" + ], + "properties": { + "get_processed_msg_count": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_processed_user_count" + ], + "properties": { + "get_processed_user_count": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_result" + ], + "properties": { + "get_result": { + "type": "object", + "required": [ + "index" + ], + "properties": { + "index": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_all_result" + ], + "properties": { + "get_all_result": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_state_idx_inc" + ], + "properties": { + "get_state_idx_inc": { + "type": "object", + "required": [ + "address" + ], + "properties": { + "address": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "get_voice_credit_balance" + ], + "properties": { + "get_voice_credit_balance": { + "type": "object", + "required": [ + "index" + ], + "properties": { + "index": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "description": "Checks permissions of the caller on this proxy. If CanExecute returns true then a call to `Execute` with the same message, before any further state changes, should also succeed.", + "type": "object", + "required": [ + "is_white_list" + ], + "properties": { + "is_white_list": { + "type": "object", + "required": [ + "amount", + "certificate", + "pubkey" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint256" + }, + "certificate": { + "type": "string" + }, + "pubkey": { + "$ref": "#/definitions/PubKey" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "white_balance_of" + ], + "properties": { + "white_balance_of": { + "type": "object", + "required": [ + "amount", + "certificate", + "pubkey" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint256" + }, + "certificate": { + "type": "string" + }, + "pubkey": { + "$ref": "#/definitions/PubKey" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "white_info" + ], + "properties": { + "white_info": { + "type": "object", + "required": [ + "pubkey" + ], + "properties": { + "pubkey": { + "$ref": "#/definitions/PubKey" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "max_whitelist_num" + ], + "properties": { + "max_whitelist_num": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "vote_option_map" + ], + "properties": { + "vote_option_map": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "max_vote_options" + ], + "properties": { + "max_vote_options": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "query_total_fee_grant" + ], + "properties": { + "query_total_fee_grant": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "query_circuit_type" + ], + "properties": { + "query_circuit_type": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "query_cert_system" + ], + "properties": { + "query_cert_system": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "query_oracle_whitelist_config" + ], + "properties": { + "query_oracle_whitelist_config": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "PubKey": { + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/definitions/Uint256" + }, + "y": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + } + } +} diff --git a/contracts/api-maci/schema/raw/response_to_get_all_result.json b/contracts/api-maci/schema/raw/response_to_get_all_result.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_all_result.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_get_config.json b/contracts/api-maci/schema/raw/response_to_get_config.json new file mode 100644 index 0000000..73559d2 --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_config.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Config", + "type": "object", + "required": [ + "round_description" + ], + "properties": { + "round_description": { + "type": "string" + } + }, + "additionalProperties": false +} diff --git a/contracts/api-maci/schema/raw/response_to_get_msg_chain_length.json b/contracts/api-maci/schema/raw/response_to_get_msg_chain_length.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_msg_chain_length.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_get_num_sign_up.json b/contracts/api-maci/schema/raw/response_to_get_num_sign_up.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_num_sign_up.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_get_period.json b/contracts/api-maci/schema/raw/response_to_get_period.json new file mode 100644 index 0000000..8835e05 --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_period.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Period", + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "$ref": "#/definitions/PeriodStatus" + } + }, + "additionalProperties": false, + "definitions": { + "PeriodStatus": { + "type": "string", + "enum": [ + "pending", + "voting", + "processing", + "tallying", + "ended" + ] + } + } +} diff --git a/contracts/api-maci/schema/raw/response_to_get_processed_msg_count.json b/contracts/api-maci/schema/raw/response_to_get_processed_msg_count.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_processed_msg_count.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_get_processed_user_count.json b/contracts/api-maci/schema/raw/response_to_get_processed_user_count.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_processed_user_count.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_get_result.json b/contracts/api-maci/schema/raw/response_to_get_result.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_result.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_get_round_info.json b/contracts/api-maci/schema/raw/response_to_get_round_info.json new file mode 100644 index 0000000..0316f60 --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_round_info.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RoundInfo", + "type": "object", + "required": [ + "description", + "link", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false +} diff --git a/contracts/api-maci/schema/raw/response_to_get_state_idx_inc.json b/contracts/api-maci/schema/raw/response_to_get_state_idx_inc.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_state_idx_inc.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_get_voice_credit_balance.json b/contracts/api-maci/schema/raw/response_to_get_voice_credit_balance.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_voice_credit_balance.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_get_voting_time.json b/contracts/api-maci/schema/raw/response_to_get_voting_time.json new file mode 100644 index 0000000..c266ffd --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_get_voting_time.json @@ -0,0 +1,32 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "VotingTime", + "type": "object", + "required": [ + "end_time", + "start_time" + ], + "properties": { + "end_time": { + "$ref": "#/definitions/Timestamp" + }, + "start_time": { + "$ref": "#/definitions/Timestamp" + } + }, + "additionalProperties": false, + "definitions": { + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + } + } +} diff --git a/contracts/api-maci/schema/raw/response_to_grant_info.json b/contracts/api-maci/schema/raw/response_to_grant_info.json new file mode 100644 index 0000000..1c9b3af --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_grant_info.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GrantConfig", + "type": "object", + "required": [ + "fee_amount", + "fee_grant" + ], + "properties": { + "fee_amount": { + "$ref": "#/definitions/Uint128" + }, + "fee_grant": { + "type": "boolean" + } + }, + "additionalProperties": false, + "definitions": { + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + } + } +} diff --git a/contracts/api-maci/schema/raw/response_to_is_white_list.json b/contracts/api-maci/schema/raw/response_to_is_white_list.json new file mode 100644 index 0000000..a7fe2bf --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_is_white_list.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Boolean", + "type": "boolean" +} diff --git a/contracts/api-maci/schema/raw/response_to_max_vote_options.json b/contracts/api-maci/schema/raw/response_to_max_vote_options.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_max_vote_options.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_max_whitelist_num.json b/contracts/api-maci/schema/raw/response_to_max_whitelist_num.json new file mode 100644 index 0000000..d05e862 --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_max_whitelist_num.json @@ -0,0 +1,7 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "uint128", + "type": "integer", + "format": "uint128", + "minimum": 0.0 +} diff --git a/contracts/api-maci/schema/raw/response_to_query_cert_system.json b/contracts/api-maci/schema/raw/response_to_query_cert_system.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_query_cert_system.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_query_circuit_type.json b/contracts/api-maci/schema/raw/response_to_query_circuit_type.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_query_circuit_type.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_query_oracle_whitelist_config.json b/contracts/api-maci/schema/raw/response_to_query_oracle_whitelist_config.json new file mode 100644 index 0000000..574127e --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_query_oracle_whitelist_config.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "OracleWhitelistConfig", + "type": "object", + "required": [ + "backend_pubkey", + "slope", + "threshold", + "voting_power_mode" + ], + "properties": { + "backend_pubkey": { + "$ref": "#/definitions/Binary" + }, + "slope": { + "$ref": "#/definitions/Uint256" + }, + "threshold": { + "$ref": "#/definitions/Uint256" + }, + "voting_power_mode": { + "$ref": "#/definitions/VotingPowerMode" + } + }, + "additionalProperties": false, + "definitions": { + "Binary": { + "description": "Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also .", + "type": "string" + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "VotingPowerMode": { + "type": "string", + "enum": [ + "slope", + "threshold" + ] + } + } +} diff --git a/contracts/api-maci/schema/raw/response_to_query_total_fee_grant.json b/contracts/api-maci/schema/raw/response_to_query_total_fee_grant.json new file mode 100644 index 0000000..25b73e8 --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_query_total_fee_grant.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint128", + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_vote_option_map.json b/contracts/api-maci/schema/raw/response_to_vote_option_map.json new file mode 100644 index 0000000..4290cb1 --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_vote_option_map.json @@ -0,0 +1,8 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Array_of_String", + "type": "array", + "items": { + "type": "string" + } +} diff --git a/contracts/api-maci/schema/raw/response_to_white_balance_of.json b/contracts/api-maci/schema/raw/response_to_white_balance_of.json new file mode 100644 index 0000000..9534e6a --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_white_balance_of.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint256", + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" +} diff --git a/contracts/api-maci/schema/raw/response_to_white_info.json b/contracts/api-maci/schema/raw/response_to_white_info.json new file mode 100644 index 0000000..a04eebc --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_white_info.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "WhitelistConfig", + "type": "object", + "required": [ + "balance", + "is_register" + ], + "properties": { + "balance": { + "$ref": "#/definitions/Uint256" + }, + "is_register": { + "type": "boolean" + } + }, + "additionalProperties": false, + "definitions": { + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + } + } +} diff --git a/contracts/api-maci/schema/raw/response_to_white_list.json b/contracts/api-maci/schema/raw/response_to_white_list.json new file mode 100644 index 0000000..4f77f30 --- /dev/null +++ b/contracts/api-maci/schema/raw/response_to_white_list.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Whitelist", + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/WhitelistConfig" + } + } + }, + "additionalProperties": false, + "definitions": { + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "WhitelistConfig": { + "type": "object", + "required": [ + "addr", + "balance" + ], + "properties": { + "addr": { + "type": "string" + }, + "balance": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + } + } +} diff --git a/contracts/api-maci/src/bin/schema.rs b/contracts/api-maci/src/bin/schema.rs new file mode 100644 index 0000000..dbcde54 --- /dev/null +++ b/contracts/api-maci/src/bin/schema.rs @@ -0,0 +1,11 @@ +use cosmwasm_schema::write_api; + +use cw_api_maci::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; + +fn main() { + write_api! { + instantiate: InstantiateMsg, + execute: ExecuteMsg, + query: QueryMsg, + } +} diff --git a/contracts/api-maci/src/circuit_params.rs b/contracts/api-maci/src/circuit_params.rs new file mode 100644 index 0000000..df7ad84 --- /dev/null +++ b/contracts/api-maci/src/circuit_params.rs @@ -0,0 +1,169 @@ +use crate::error::ContractError; +use crate::groth16_parser::parse_groth16_vkey; +use crate::{ + msg::Groth16VKeyType, + state::{Groth16VkeyStr, MaciParameters}, +}; +use cosmwasm_std::Uint256; +use pairing_ce::bn256::Bn256; + +pub struct OracleVkeyParams { + pub process_vkey: Groth16VkeyStr, + pub tally_vkey: Groth16VkeyStr, +} + +pub fn format_vkey(groth16_vkey: &Groth16VKeyType) -> Result { + // Create a process_vkeys struct from the process_vkey in the message + let groth16_vkey_formatted = Groth16VkeyStr { + alpha_1: hex::decode(&groth16_vkey.vk_alpha1) + .map_err(|_| ContractError::HexDecodingError {})?, + beta_2: hex::decode(&groth16_vkey.vk_beta_2) + .map_err(|_| ContractError::HexDecodingError {})?, + gamma_2: hex::decode(&groth16_vkey.vk_gamma_2) + .map_err(|_| ContractError::HexDecodingError {})?, + delta_2: hex::decode(&groth16_vkey.vk_delta_2) + .map_err(|_| ContractError::HexDecodingError {})?, + ic0: hex::decode(&groth16_vkey.vk_ic0).map_err(|_| ContractError::HexDecodingError {})?, + ic1: hex::decode(&groth16_vkey.vk_ic1).map_err(|_| ContractError::HexDecodingError {})?, + }; + parse_groth16_vkey::(groth16_vkey_formatted.clone()) + .map_err(|_| ContractError::InvalidVKeyError {})?; + + Ok(groth16_vkey_formatted) +} + +pub fn calculate_circuit_params( + max_voters: u128, + max_vote_options: u128, +) -> Result { + // Select the minimum circuit parameters that can meet the requirements based on max_voters and max_vote_options + if max_voters <= 25 && max_vote_options <= 5 { + // 2-1-1-5 scale: supports up to 25 voters, 5 options + Ok(MaciParameters { + state_tree_depth: Uint256::from_u128(2u128), + int_state_tree_depth: Uint256::from_u128(1u128), + vote_option_tree_depth: Uint256::from_u128(1u128), + message_batch_size: Uint256::from_u128(5u128), + }) + } else if max_voters <= 625 && max_vote_options <= 25 { + // 4-2-2-25 scale: supports up to 625 voters, 25 options + Ok(MaciParameters { + state_tree_depth: Uint256::from_u128(4u128), + int_state_tree_depth: Uint256::from_u128(2u128), + vote_option_tree_depth: Uint256::from_u128(2u128), + message_batch_size: Uint256::from_u128(25u128), + }) + } else if max_voters <= 15625 && max_vote_options <= 125 { + // 6-3-3-125 scale: supports up to 15625 voters, 125 options + Ok(MaciParameters { + state_tree_depth: Uint256::from_u128(6u128), + int_state_tree_depth: Uint256::from_u128(3u128), + vote_option_tree_depth: Uint256::from_u128(3u128), + message_batch_size: Uint256::from_u128(125u128), + }) + } else { + Err(ContractError::UnsupportedCircuitSize {}) + } +} + +pub fn match_oracle_vkeys(parameters: &MaciParameters) -> Result { + if parameters.state_tree_depth == Uint256::from_u128(2) + && parameters.int_state_tree_depth == Uint256::from_u128(1) + && parameters.vote_option_tree_depth == Uint256::from_u128(1) + && parameters.message_batch_size == Uint256::from_u128(5) + { + // vkey for 2-1-1-5 scale + let groth16_process_vkey = Groth16VKeyType { + vk_alpha1: "2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926".to_string(), + vk_beta_2: "0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8".to_string(), + vk_gamma_2: "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa".to_string(), + vk_delta_2: "0dc5c56eca93b0758f0f1aab37e40fe8dc9e7b094f0753d3b4790561722ae10d2c6b79c93b192170631bfed8f95d199a6235c1019830dc6c721a9a44b3484639220a9698543c81a8f2387b55efacb5056b4b2e03d5e0c38d4eb2a61c5f3f6f0d22f9fba69eb172a708e019123830c58bc6c89da9450f378a2c24f948ce72f3d2".to_string(), + vk_ic0: "241b91622b884684e441fa52f179f6ac34650e30acd61b740c5732bfdc3230f62511fce9430abe4dd5bc6a552d97da9b877db17cd71f29b12c7cb522203fb4eb".to_string(), + vk_ic1: "0632e625fefc7172e8aec1070c4d32b90b6c482f6f3806773a4c55a03877c2d716cfd935eb3e3883f580c93f56adbf3a253ce3c208c52fb784f9d8fec139c617".to_string(), + }; + + let groth16_process_vkeys = format_vkey(&groth16_process_vkey)?; + + let groth16_tally_vkey = Groth16VKeyType { + vk_alpha1: "2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926".to_string(), + vk_beta_2: "0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8".to_string(), + vk_gamma_2: "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa".to_string(), + vk_delta_2: "15ebf2838ce21cd730c82617b5acfcee3f89c3969f4b571152d00b1965c4851c065d38111e1ecb2fe718a11acd74ccc136c01c2c3f20c9b34d358a5d4f188b7b01d51b95a5f25a3a2b36c7a83ea5564b3dc08346e340009c5d93e466a3c2df161599f4d52080d3ed1bf224427f70e9debbd07afcd187acab5b5ff48fed2b6951".to_string(), + vk_ic0: "22e859fa9fb9b9915cb6e3b3baff96d04539d15ac32e3bd9ec90f03d0c1d2bdf21af4ecab109caba16c55a0318dace310c53b2dc5a31496b6dad603137ae7ccb".to_string(), + vk_ic1: "05b8b475f2bfedba4fa04ab1972006da9764c2c3e6fb65d6dd0aac938fd298112a560e13770b06a3f709a49fddf016331ea205fa125026993f6666eff69f4def".to_string(), + }; + let groth16_tally_vkeys = format_vkey(&groth16_tally_vkey)?; + + let vkeys = OracleVkeyParams { + process_vkey: groth16_process_vkeys, + tally_vkey: groth16_tally_vkeys, + }; + return Ok(vkeys); + } else if parameters.state_tree_depth == Uint256::from_u128(4) + && parameters.int_state_tree_depth == Uint256::from_u128(2) + && parameters.vote_option_tree_depth == Uint256::from_u128(2) + && parameters.message_batch_size == Uint256::from_u128(25) + { + // vkey for 4-2-2-25 scale + let groth16_process_vkey = Groth16VKeyType { + vk_alpha1: "2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926".to_string(), + vk_beta_2: "0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8".to_string(), + vk_gamma_2: "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa".to_string(), + vk_delta_2: "19eef0d34e27608d067ece7c262a9b74965d2d3eb0c4649db49caddb7f9ec0a92e4d78f5b667da44eb4b13ff21b79aa3584059b5b8345ae083fd0b0b42b13a400220e2cfc81f8c4278b15e078146ef804d4515b451c11d17e969ae45e72b288822d9554762428a8e6fd36e9fc4529492250e4d3fe4aa8d7ac0f0fa597a5661b9".to_string(), + vk_ic0: "1164e91a7bf8dc2f52f0794fdb7fd97bba7ee48a211891e3c3aa0f4703eec1e40d2817d1eb66769bd3227f997480c3de433e273eeb0871fd804c913d97338cb0".to_string(), + vk_ic1: "0a47be101a59d20641e1369c0b2b9fb839cd35ecbfbeac3866df43723b70c78d17e96303c417743d93b7726805b736f364d305036b50e4ad1b885fc41284daf5".to_string(), + }; + + let groth16_process_vkeys = format_vkey(&groth16_process_vkey)?; + + let groth16_tally_vkey = Groth16VKeyType { + vk_alpha1: "2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926".to_string(), + vk_beta_2: "0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8".to_string(), + vk_gamma_2: "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa".to_string(), + vk_delta_2: "130e59dc53aba257e0928830f57eda415e2c5d3cc19da28684952fd1420e8f6028f9232da04383ca9a5fc38e231bd081759e8024a466752755d4d486857027c22d7c0ccceb8a58b3af83e4ac7f60d9ff0d037c9eb5554a063c7380ffbf224de3134d54ca7253c210451614e03618e76f8cf15d6679ffb74a0c9edc4fb774c2c2".to_string(), + vk_ic0: "1c0a95b9325165ba2d3fa5dadaceb268a0ff1e5d0049ea7db4612b443bb054c90a5060397eae86ab969ca3e1cc36ff1cddc03a672906326973d3f30d0ea8e203".to_string(), + vk_ic1: "299cfb28054cde0470bd7ff280349089350226d1ca154dcf6544b2680bf3bea925026e6644668273d6066ef6766c2f561c3607c523fbbd1379c5002376ef69c3".to_string(), + }; + let groth16_tally_vkeys = format_vkey(&groth16_tally_vkey)?; + + let vkeys = OracleVkeyParams { + process_vkey: groth16_process_vkeys, + tally_vkey: groth16_tally_vkeys, + }; + return Ok(vkeys); + } else if parameters.state_tree_depth == Uint256::from_u128(6) + && parameters.int_state_tree_depth == Uint256::from_u128(3) + && parameters.vote_option_tree_depth == Uint256::from_u128(3) + && parameters.message_batch_size == Uint256::from_u128(125) + { + // vkey for 6-3-3-125 scale + let groth16_process_vkey = Groth16VKeyType { + vk_alpha1: "2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926".to_string(), + vk_beta_2: "0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8".to_string(), + vk_gamma_2: "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa".to_string(), + vk_delta_2: "057f25675851ef5a79a6d8706a43a6cd8e494cfb12c241ede46991d9174cf30605b081ff44f3ede774dab68ea9324c12308c13cb09cbb129adf94401b9134f5b16137d952fd32ab2d4243ebff4cb15d17206948ef17909ea8606886a8109bdad082f7d27e1cbf98925f055b39d1c89f9bcc4f6d92fdb920934ff5e37ba4d9b49".to_string(), + vk_ic0: "27c937c032a18a320566e934448a0ffceea7050492a509c45a3bcb7e8ff8905d20789ada31729a833a4f595ff9f49f88adb66f2ab987de15a15deccb0e785bf4".to_string(), + vk_ic1: "0ed2cefc103a2234dbc6bbd8634812d65332218b7589f4079b2c08eb5a4f5f63113a7f3cb53797a7f5819d7de7e3f0b2197d1c34790685a4a59af4314810420b".to_string(), + }; + + let groth16_process_vkeys = format_vkey(&groth16_process_vkey)?; + + let groth16_tally_vkey = Groth16VKeyType { + vk_alpha1: "2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926".to_string(), + vk_beta_2: "0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8".to_string(), + vk_gamma_2: "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa".to_string(), + vk_delta_2: "2065e91c00fcc5cbc3d974cf52e24de972bdb1b4d8ded629dec20b5c904c3fa327ffe02402094795ff4d02588c8268fcad738f69eb4c732a0c98b485035e1f4913ede11b074ff143a929673e581a547717c58ce01af87d9d8b28f65f506093a61013e367b93e6782129362065840a0af9b77d7d9659a84577176e64a918d8d4c".to_string(), + vk_ic0: "11db4a022aab89a265f06ff62aa18c74b21e913a8b23e7fce9cb46f76d1c4d9f2a7475b1eeb7be0a0dc457e6d52536ba351b621b63a7d77da75d4e773048537e".to_string(), + vk_ic1: "0f298d235d0822ad281386abdf511853529af4c864b0cd54140facebfc1356a3059cd6d0d4b27b39e5683548fe12025e2a6b2e2724c2ca87d2008ef932ed3801".to_string(), + }; + let groth16_tally_vkeys = format_vkey(&groth16_tally_vkey)?; + + let vkeys = OracleVkeyParams { + process_vkey: groth16_process_vkeys, + tally_vkey: groth16_tally_vkeys, + }; + return Ok(vkeys); + } else { + return Err(ContractError::NotMatchCircuitSize {}); + } +} diff --git a/contracts/api-maci/src/contract.rs b/contracts/api-maci/src/contract.rs new file mode 100644 index 0000000..0557353 --- /dev/null +++ b/contracts/api-maci/src/contract.rs @@ -0,0 +1,1705 @@ +use crate::circuit_params::{calculate_circuit_params, match_oracle_vkeys}; +use crate::error::ContractError; +use crate::groth16_parser::{parse_groth16_proof, parse_groth16_vkey}; +use crate::msg::{ + ExecuteMsg, Groth16ProofType, InstantiateMsg, InstantiationData, PlonkProofType, QueryMsg, +}; +use crate::plonk_parser::{parse_plonk_proof, parse_plonk_vkey}; +use crate::state::{ + Admin, Groth16ProofStr, MessageData, OracleWhitelistConfig, Period, PeriodStatus, + PlonkProofStr, PubKey, QuinaryTreeRoot, RoundInfo, StateLeaf, VotingPowerConfig, + VotingPowerMode, VotingTime, WhitelistConfig, ADMIN, CERTSYSTEM, CIRCUITTYPE, COORDINATORHASH, + CURRENT_STATE_COMMITMENT, CURRENT_TALLY_COMMITMENT, FEEGRANTS, GROTH16_PROCESS_VKEYS, + GROTH16_TALLY_VKEYS, LEAF_IDX_0, MACIPARAMETERS, MAX_LEAVES_COUNT, MAX_VOTE_OPTIONS, + MAX_WHITELIST_NUM, MSG_CHAIN_LENGTH, MSG_HASHES, NODES, NUMSIGNUPS, ORACLE_WHITELIST_CONFIG, + PERIOD, PLONK_PROCESS_VKEYS, PLONK_TALLY_VKEYS, PROCESSED_MSG_COUNT, PROCESSED_USER_COUNT, + QTR_LIB, RESULT, ROUNDINFO, STATEIDXINC, TOTAL_RESULT, USED_ENC_PUB_KEYS, VOICECREDITBALANCE, + VOTEOPTIONMAP, VOTINGTIME, WHITELIST, ZEROS, +}; +use sha2::{Digest as ShaDigest, Sha256}; + +use pairing_ce::bn256::Bn256; +use pairing_ce::bn256::Bn256 as MBn256; + +use bellman_ce::plonk::better_cs::cs::PlonkCsWidth4WithNextStepParams; + +#[cfg(not(feature = "library"))] +use cosmwasm_std::entry_point; + +use cosmwasm_std::{ + attr, coins, to_json_binary, Addr, BankMsg, Binary, Deps, DepsMut, Env, MessageInfo, Reply, + Response, StdResult, Uint128, Uint256, +}; + +use crate::utils::{hash2, hash5, hash_256_uint256_list, uint256_from_hex_string}; + +use bellman_ce::plonk::better_cs::verifier::verify as plonk_verify; +use bellman_ce::plonk::commitments::transcript::keccak_transcript::RollingKeccakTranscript; +use bellman_ce_verifier::{prepare_verifying_key, verify_proof as groth16_verify}; + +use ff_ce::PrimeField as Fr; + +use hex; + +use serde_json; + +// Pre-computed constants to avoid repeated calculations +const SNARK_SCALAR_FIELD_HEX: &str = + "30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001"; + +// Pre-computed maximum values corresponding to circuit scales, avoiding repeated exponentiation +const CIRCUIT_2_1_1_5_MAX_VOTERS: u128 = 25; // 5^2 +const CIRCUIT_4_2_2_25_MAX_VOTERS: u128 = 625; // 5^4 +const CIRCUIT_6_3_3_125_MAX_VOTERS: u128 = 15625; // 5^6 + +const CIRCUIT_2_1_1_5_MAX_OPTIONS: u128 = 5; // 5^1 +const CIRCUIT_4_2_2_25_MAX_OPTIONS: u128 = 25; // 5^2 +const CIRCUIT_6_3_3_125_MAX_OPTIONS: u128 = 125; // 5^3 + +// Fast function to calculate circuit maximum values, avoiding string conversions and exponentiation +fn get_circuit_max_voters(state_tree_depth: &Uint256) -> u128 { + if *state_tree_depth == Uint256::from_u128(2) { + CIRCUIT_2_1_1_5_MAX_VOTERS + } else if *state_tree_depth == Uint256::from_u128(4) { + CIRCUIT_4_2_2_25_MAX_VOTERS + } else if *state_tree_depth == Uint256::from_u128(6) { + CIRCUIT_6_3_3_125_MAX_VOTERS + } else { + 0 // Unsupported scale + } +} + +/// Convert a contract address to Uint256 format +/// This function takes the address bytes and converts them to a Uint256 +fn address_to_uint256(address: &Addr) -> Uint256 { + let address_bytes = address.as_bytes(); + + // Use SHA256 hash to convert the address to a fixed-length 32-byte format + let mut hasher = Sha256::new(); + hasher.update(address_bytes); + let hash_result = hasher.finalize(); + + // Convert the hash bytes to Uint256 + let mut bytes = [0u8; 32]; + bytes.copy_from_slice(&hash_result[..]); + + // Convert bytes to Uint256 (big-endian) + let mut uint256_bytes = [0u8; 32]; + for (i, &byte) in bytes.iter().enumerate() { + uint256_bytes[31 - i] = byte; // Reverse for little-endian to big-endian conversion + } + + Uint256::from_be_bytes(uint256_bytes) +} + +fn get_circuit_max_vote_options(vote_option_tree_depth: &Uint256) -> u128 { + if *vote_option_tree_depth == Uint256::from_u128(1) { + CIRCUIT_2_1_1_5_MAX_OPTIONS + } else if *vote_option_tree_depth == Uint256::from_u128(2) { + CIRCUIT_4_2_2_25_MAX_OPTIONS + } else if *vote_option_tree_depth == Uint256::from_u128(3) { + CIRCUIT_6_3_3_125_MAX_OPTIONS + } else { + 0 // Unsupported scale + } +} + +// Cache snark_scalar_field to avoid repeated calculations +fn get_snark_scalar_field() -> Uint256 { + uint256_from_hex_string(SNARK_SCALAR_FIELD_HEX) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn instantiate( + deps: DepsMut, + _env: Env, + info: MessageInfo, + msg: InstantiateMsg, +) -> Result { + // Clone necessary data for InstantiationData at the beginning + let caller = info.sender.clone(); + let coordinator = msg.coordinator.clone(); + let max_voters = msg.max_voters; + let vote_option_map = msg.vote_option_map.clone(); + let round_info = msg.round_info.clone(); + let voting_time = msg.voting_time.clone(); + let circuit_type = msg.circuit_type; + let certification_system = msg.certification_system; + let whitelist_backend_pubkey = msg.whitelist_backend_pubkey.clone(); + let whitelist_voting_power_args = msg.whitelist_voting_power_args.clone(); + + // Calculate fee_grant_amount from the sent funds + let fee_grant_amount = info + .funds + .iter() + .find(|coin| coin.denom == "peaka") // Or use appropriate token name + .map(|coin| coin.amount) + .unwrap_or_else(|| Uint128::zero()); + + // Create an admin with the sender address + let admin = Admin { + admin: info.sender.clone(), + }; + ADMIN.save(deps.storage, &admin)?; + + // Calculate appropriate circuit parameters based on max_voters and max_vote_options + let max_vote_options = msg.vote_option_map.len() as u128; + let parameters = calculate_circuit_params(msg.max_voters, max_vote_options)?; + // Save the MACI parameters to storage + MACIPARAMETERS.save(deps.storage, ¶meters)?; + + // Save the qtr_lib value to storage + let qtr_lab = QuinaryTreeRoot { + zeros: [ + Uint256::from_u128(0u128), + uint256_from_hex_string( + "2066be41bebe6caf7e079360abe14fbf9118c62eabc42e2fe75e342b160a95bc", + ), + uint256_from_hex_string( + "2a956d37d8e73692877b104630a08cc6840036f235f2134b0606769a369d85c1", + ), + uint256_from_hex_string( + "2f9791ba036a4148ff026c074e713a4824415530dec0f0b16c5115aa00e4b825", + ), + uint256_from_hex_string( + "2c41a7294c7ef5c9c5950dc627c55a00adb6712548bcbd6cd8569b1f2e5acc2a", + ), + uint256_from_hex_string( + "2594ba68eb0f314eabbeea1d847374cc2be7965944dec513746606a1f2fadf2e", + ), + uint256_from_hex_string( + "5c697158c9032bfd7041223a7dba696396388129118ae8f867266eb64fe7636", + ), + uint256_from_hex_string( + "272b3425fcc3b2c45015559b9941fde27527aab5226045bf9b0a6c1fe902d601", + ), + uint256_from_hex_string( + "268d82cc07023a1d5e7c987cbd0328b34762c9ea21369bea418f08b71b16846a", + ), + ], + }; + // Save the qtr_lib value to storage + QTR_LIB.save(deps.storage, &qtr_lab)?; + + const CIRCUIT_TYPE_1P1V: u128 = 0; // one person one vote + const CIRCUIT_TYPE_QV: u128 = 1; // quadratic voting + + if msg.circuit_type == Uint256::from_u128(CIRCUIT_TYPE_1P1V) + || msg.circuit_type == Uint256::from_u128(CIRCUIT_TYPE_QV) + { + CIRCUITTYPE.save(deps.storage, &msg.circuit_type)?; + } else { + return Err(ContractError::UnsupportedCircuitType {}); + } + + // Oracle MACI only supports groth16 + if msg.certification_system == Uint256::from_u128(0u128) { + // groth16 - match the corresponding vkey based on calculated parameters + let vkey = match_oracle_vkeys(¶meters)?; + GROTH16_PROCESS_VKEYS.save(deps.storage, &vkey.process_vkey)?; + GROTH16_TALLY_VKEYS.save(deps.storage, &vkey.tally_vkey)?; + } else { + return Err(ContractError::UnsupportedCertificationSystem {}); + }; + + CERTSYSTEM.save(deps.storage, &msg.certification_system)?; + + // Compute the coordinator hash from the coordinator values in the message + let coordinator_hash = hash2([msg.coordinator.x, msg.coordinator.y]); + COORDINATORHASH.save(deps.storage, &coordinator_hash)?; + + // Compute the maximum number of leaves based on the state tree depth (optimization: use pre-computed values directly) + let max_leaves_count = Uint256::from_u128(get_circuit_max_voters(¶meters.state_tree_depth)); + MAX_LEAVES_COUNT.save(deps.storage, &max_leaves_count)?; + + // Calculate the index of the first leaf in the tree + let leaf_idx0 = (max_leaves_count - Uint256::from_u128(1u128)) / Uint256::from_u128(4u128); + LEAF_IDX_0.save(deps.storage, &leaf_idx0)?; + + NODES.save( + deps.storage, + Uint256::from_u128(0u128).to_be_bytes().to_vec(), + &Uint256::from_u128(0u128), + )?; + + // Define an array of zero values + let zeros: [Uint256; 10] = [ + uint256_from_hex_string("2066be41bebe6caf7e079360abe14fbf9118c62eabc42e2fe75e342b160a95bc"), + // "14655542659562014735865511769057053982292279840403315552050801315682099828156", + uint256_from_hex_string("2a956d37d8e73692877b104630a08cc6840036f235f2134b0606769a369d85c1"), + // "19261153649140605024552417994922546473530072875902678653210025980873274131905", + uint256_from_hex_string("2f9791ba036a4148ff026c074e713a4824415530dec0f0b16c5115aa00e4b825"), + // "21526503558325068664033192388586640128492121680588893182274749683522508994597", + uint256_from_hex_string("2c41a7294c7ef5c9c5950dc627c55a00adb6712548bcbd6cd8569b1f2e5acc2a"), + // "20017764101928005973906869479218555869286328459998999367935018992260318153770", + uint256_from_hex_string("2594ba68eb0f314eabbeea1d847374cc2be7965944dec513746606a1f2fadf2e"), + // "16998355316577652097112514691750893516081130026395813155204269482715045879598", + uint256_from_hex_string("5c697158c9032bfd7041223a7dba696396388129118ae8f867266eb64fe7636"), + // "2612442706402737973181840577010736087708621987282725873936541279764292204086", + uint256_from_hex_string("272b3425fcc3b2c45015559b9941fde27527aab5226045bf9b0a6c1fe902d601"), + // "17716535433480122581515618850811568065658392066947958324371350481921422579201", + uint256_from_hex_string("268d82cc07023a1d5e7c987cbd0328b34762c9ea21369bea418f08b71b16846a"), + // "17437916409890180001398333108882255895598851862997171508841759030332444017770", + uint256_from_hex_string("2e002d67c30ee0a2bd5fdecc4fb81646ecd6eb0746f5ff2d9b1d1b522a4a3f68"), + // "20806704410832383274034364623685369279680495689837539882650535326035351322472" + uint256_from_hex_string("f14c3fb900b66f523694106f7fc3cbec1f5eee571f047a9eb05bef717d3e064"), + // "6821382292698461711184253213986441870942786410912797736722948342942530789476" + ]; + ZEROS.save(deps.storage, &zeros)?; + + // Save initial values for message hash, message chain length, processed message count, current tally commitment, + // processed user count, and number of signups to storage + MSG_HASHES.save( + deps.storage, + Uint256::from_u128(0u128).to_be_bytes().to_vec(), + &Uint256::from_u128(0u128), + )?; + MSG_CHAIN_LENGTH.save(deps.storage, &Uint256::from_u128(0u128))?; + PROCESSED_MSG_COUNT.save(deps.storage, &Uint256::from_u128(0u128))?; + CURRENT_TALLY_COMMITMENT.save(deps.storage, &Uint256::from_u128(0u128))?; + PROCESSED_USER_COUNT.save(deps.storage, &Uint256::from_u128(0u128))?; + NUMSIGNUPS.save(deps.storage, &Uint256::from_u128(0u128))?; + // MAX_VOTE_OPTIONS.save(deps.storage, &msg.max_vote_options)?; + + // let mut vote_option_map: Vec = Vec::new(); + // for _ in 0..msg.max_vote_options.to_string().parse().unwrap() { + // vote_option_map.push(String::new()); + // } + // Calculate maximum vote options based on circuit parameters (optimization: use pre-computed values) + let circuit_max_vote_options = get_circuit_max_vote_options(¶meters.vote_option_tree_depth); + if max_vote_options > circuit_max_vote_options { + return Err(ContractError::VoteOptionsExceedLimit { + max_options: circuit_max_vote_options as u8, + }); + } + VOTEOPTIONMAP.save(deps.storage, &msg.vote_option_map)?; + // Save the maximum vote options + MAX_VOTE_OPTIONS.save(deps.storage, &Uint256::from_u128(max_vote_options))?; + // let res = Response::new() + // .add_attribute("action", "set_vote_option") + // .add_attribute("vote_option_map", format!("{:?}", vote_option_map)) + // .add_attribute("max_vote_options", max_vote_options.to_string()); + + // VOTEOPTIONMAP.save(deps.storage, &vote_option_map)?; + ROUNDINFO.save(deps.storage, &msg.round_info)?; + MAX_WHITELIST_NUM.save(deps.storage, &0u128)?; + + FEEGRANTS.save(deps.storage, &fee_grant_amount)?; + + // Validate voting time + if msg.voting_time.start_time >= msg.voting_time.end_time { + return Err(ContractError::WrongTimeSet {}); + } + + VOTINGTIME.save(deps.storage, &msg.voting_time)?; + let whitelist_backend_pubkey_binary = Binary::from_base64(&msg.whitelist_backend_pubkey) + .map_err(|_| ContractError::InvalidBase64 {})?; + + let oracle_whitelist_config = OracleWhitelistConfig { + backend_pubkey: whitelist_backend_pubkey_binary, + voting_power_mode: msg.whitelist_voting_power_args.mode.clone(), + slope: msg.whitelist_voting_power_args.slope, + threshold: msg.whitelist_voting_power_args.threshold, + }; + ORACLE_WHITELIST_CONFIG.save(deps.storage, &oracle_whitelist_config)?; + + // Create a period struct with the initial status set to Voting + let period = Period { + status: PeriodStatus::Pending, + }; + + // Save the initial period to storage + PERIOD.save(deps.storage, &period)?; + + // Create InstantiationData for SaaS contract to use in reply + let instantiation_data = InstantiationData { + caller, + parameters: parameters.clone(), + coordinator, + max_voters, + vote_option_map, + round_info, + voting_time, + circuit_type: if circuit_type == Uint256::from_u128(0u128) { + "0".to_string() // 1p1v + } else { + "1".to_string() // qv + }, + certification_system: if certification_system == Uint256::from_u128(0u128) { + "groth16".to_string() + } else { + "plonk".to_string() + }, + whitelist_backend_pubkey, + whitelist_voting_power_args, + }; + + Ok(Response::default() + .add_attribute("action", "instantiate") + .add_attribute("state_tree_depth", parameters.state_tree_depth.to_string()) + .add_attribute( + "int_state_tree_depth", + parameters.int_state_tree_depth.to_string(), + ) + .add_attribute( + "vote_option_tree_depth", + parameters.vote_option_tree_depth.to_string(), + ) + .add_attribute( + "message_batch_size", + parameters.message_batch_size.to_string(), + ) + .set_data(to_json_binary(&instantiation_data)?)) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn execute( + deps: DepsMut, + env: Env, + info: MessageInfo, + msg: ExecuteMsg, +) -> Result { + match msg { + ExecuteMsg::SetRoundInfo { round_info } => { + execute_set_round_info(deps, env, info, round_info) + } + ExecuteMsg::SetVoteOptionsMap { vote_option_map } => { + execute_set_vote_options_map(deps, env, info, vote_option_map) + } + ExecuteMsg::SignUp { + pubkey, + amount, + certificate, + } => execute_sign_up(deps, env, info, pubkey, amount, certificate), + ExecuteMsg::PublishMessage { + message, + enc_pub_key, + } => execute_publish_message(deps, env, info, message, enc_pub_key), + ExecuteMsg::StartProcessPeriod {} => execute_start_process_period(deps, env, info), + ExecuteMsg::ProcessMessage { + new_state_commitment, + groth16_proof, + plonk_proof, + } => execute_process_message( + deps, + env, + info, + new_state_commitment, + groth16_proof, + plonk_proof, + ), + ExecuteMsg::StopProcessingPeriod {} => execute_stop_processing_period(deps, env, info), + ExecuteMsg::ProcessTally { + new_tally_commitment, + groth16_proof, + plonk_proof, + } => execute_process_tally( + deps, + env, + info, + new_tally_commitment, + groth16_proof, + plonk_proof, + ), + ExecuteMsg::StopTallyingPeriod { results, salt } => { + execute_stop_tallying_period(deps, env, info, results, salt) + } + ExecuteMsg::Bond {} => execute_bond(deps, env, info), + ExecuteMsg::Withdraw { amount } => execute_withdraw(deps, env, info, amount), + } +} + +pub fn execute_set_round_info( + deps: DepsMut, + _env: Env, + info: MessageInfo, + round_info: RoundInfo, +) -> Result { + if !can_execute(deps.as_ref(), info.sender.as_ref())? { + Err(ContractError::Unauthorized {}) + } else { + if round_info.title == "" { + return Err(ContractError::TitleIsEmpty {}); + } + + ROUNDINFO.save(deps.storage, &round_info)?; + + let mut attributes = vec![attr("action", "set_round_info")]; + attributes.push(attr("title", round_info.title)); + + if round_info.description != "" { + attributes.push(attr("description", round_info.description)) + } + + if round_info.link != "" { + attributes.push(attr("link", round_info.link)) + } + + Ok(Response::new().add_attributes(attributes)) + } +} + +// in pending +pub fn execute_set_vote_options_map( + deps: DepsMut, + env: Env, + info: MessageInfo, + vote_option_map: Vec, +) -> Result { + let period = PERIOD.load(deps.storage)?; + + if period.status != PeriodStatus::Pending { + return Err(ContractError::PeriodError {}); + } + + let voting_time: VotingTime = VOTINGTIME.load(deps.storage)?; + + if env.block.time >= voting_time.start_time { + return Err(ContractError::PeriodError {}); + } + // } else { + // // Check if the period status is Pending + // if period.status != PeriodStatus::Pending { + // return Err(ContractError::PeriodError {}); + // } + // } + + if !can_execute(deps.as_ref(), info.sender.as_ref())? { + Err(ContractError::Unauthorized {}) + } else { + let max_vote_options = vote_option_map.len() as u128; + // Calculate maximum vote options based on current circuit parameters (optimization: use pre-computed values) + let parameters = MACIPARAMETERS.load(deps.storage)?; + let circuit_max_vote_options = + get_circuit_max_vote_options(¶meters.vote_option_tree_depth); + if max_vote_options > circuit_max_vote_options { + return Err(ContractError::VoteOptionsExceedLimit { + max_options: circuit_max_vote_options as u8, + }); + } + VOTEOPTIONMAP.save(deps.storage, &vote_option_map)?; + // Save the maximum vote options + MAX_VOTE_OPTIONS.save(deps.storage, &Uint256::from_u128(max_vote_options))?; + let res = Response::new() + .add_attribute("action", "set_vote_option") + .add_attribute("vote_option_map", format!("{:?}", vote_option_map)) + .add_attribute("max_vote_options", max_vote_options.to_string()); + Ok(res) + } +} + +// in voting +pub fn execute_sign_up( + mut deps: DepsMut, + env: Env, + info: MessageInfo, + pubkey: PubKey, + amount: Uint256, + certificate: String, +) -> Result { + let voting_time = VOTINGTIME.load(deps.storage)?; + check_voting_time(env.clone(), voting_time)?; + + if amount == Uint256::from_u128(0u128) { + return Err(ContractError::AmountIsZero {}); + } + + // Convert contract address to uint256 format + let contract_address_uint256 = address_to_uint256(&env.contract.address); + + let oracle_whitelist_config = ORACLE_WHITELIST_CONFIG.load(deps.storage)?; + let whitelist_backend_pubkey = oracle_whitelist_config.backend_pubkey; + + let payload = serde_json::json!({ + "amount": amount.to_string(), + "contract_address": contract_address_uint256.to_string(), + "pubkey_x": pubkey.x.to_string(), + "pubkey_y": pubkey.y.to_string(), + }); + + let msg = payload.to_string().into_bytes(); + + let hash = Sha256::digest(&msg); + + let certificate_binary = + Binary::from_base64(&certificate).map_err(|_| ContractError::InvalidBase64 {})?; + let verify_result = deps + .api + .secp256k1_verify( + hash.as_ref(), + certificate_binary.as_slice(), + whitelist_backend_pubkey.as_slice(), + ) + .map_err(|_| ContractError::VerificationFailed {})?; + if !verify_result { + return Err(ContractError::InvalidSignature {}); + } + + if WHITELIST.has( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + ) { + return Err(ContractError::AlreadySignedUp {}); + } + + let voting_power = calculate_voting_power( + amount, + &VotingPowerConfig { + mode: oracle_whitelist_config.voting_power_mode, + slope: oracle_whitelist_config.slope, + threshold: oracle_whitelist_config.threshold, + }, + ); + + if voting_power == Uint256::from_u128(0u128) { + return Err(ContractError::VotingPowerIsZero {}); + } + + let mut num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + // Calculate maximum voters based on circuit parameters (optimization: use pre-computed values and reduce storage reads) + let parameters = MACIPARAMETERS.load(deps.storage)?; + let circuit_max_voters = get_circuit_max_voters(¶meters.state_tree_depth); + if num_sign_ups + Uint256::from_u128(1) > Uint256::from_u128(circuit_max_voters) { + return Err(ContractError::MaxVotersReached { + max_voters: circuit_max_voters, + }); + } + + let max_leaves_count = MAX_LEAVES_COUNT.load(deps.storage)?; + + // Load the scalar field value (optimization: use cached values) + let snark_scalar_field = get_snark_scalar_field(); + + // Check if the number of sign-ups is less than the maximum number of leaves + assert!(num_sign_ups < max_leaves_count, "full"); + // Check if the pubkey values are within the allowed range + assert!( + pubkey.x < snark_scalar_field && pubkey.y < snark_scalar_field, + "MACI: pubkey values should be less than the snark scalar field" + ); + + // Create a state leaf with the provided pubkey and amount (optimization: avoid unnecessary cloning) + let state_leaf = StateLeaf { + pub_key: pubkey.clone(), + voice_credit_balance: voting_power, + vote_option_tree_root: Uint256::from_u128(0), + nonce: Uint256::from_u128(0), + } + .hash_state_leaf(); + + let state_index = num_sign_ups; + state_enqueue(&mut deps, state_leaf)?; + num_sign_ups += Uint256::from_u128(1u128); + + STATEIDXINC.save(deps.storage, &info.sender, &num_sign_ups)?; + VOICECREDITBALANCE.save( + deps.storage, + state_index.to_be_bytes().to_vec(), + &voting_power, + )?; + NUMSIGNUPS.save(deps.storage, &num_sign_ups)?; + + let white_curr = WhitelistConfig { + balance: voting_power, + is_register: true, + }; + WHITELIST.save( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + &white_curr, + )?; + + Ok(Response::new() + .add_attribute("action", "sign_up") + .add_attribute("state_idx", state_index.to_string()) + .add_attribute( + "pubkey", + format!("{:?},{:?}", pubkey.x.to_string(), pubkey.y.to_string()), + ) + .add_attribute("balance", voting_power.to_string())) +} + +// in voting +pub fn execute_publish_message( + deps: DepsMut, + env: Env, + _info: MessageInfo, + message: MessageData, + enc_pub_key: PubKey, +) -> Result { + let voting_time = VOTINGTIME.load(deps.storage)?; + check_voting_time(env, voting_time)?; + + // Load the scalar field value (optimization: use cached values) + let snark_scalar_field = get_snark_scalar_field(); + + // Check if the encrypted public key is valid + if enc_pub_key.x != Uint256::from_u128(0u128) + && enc_pub_key.y != Uint256::from_u128(1u128) + && enc_pub_key.x < snark_scalar_field + && enc_pub_key.y < snark_scalar_field + { + // Check if enc_pub_key has already been used + let pubkey_storage_key = generate_pubkey_storage_key(&enc_pub_key); + if USED_ENC_PUB_KEYS.has(deps.storage, pubkey_storage_key.clone()) { + return Err(ContractError::EncPubKeyAlreadyUsed {}); + } + + // Mark this enc_pub_key as used + USED_ENC_PUB_KEYS.save(deps.storage, pubkey_storage_key, &true)?; + let mut msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; + let old_msg_hashes = + MSG_HASHES.load(deps.storage, msg_chain_length.to_be_bytes().to_vec())?; + + // Compute the new message hash using the provided message, encrypted public key, and previous hash + let new_hash = + hash_message_and_enc_pub_key(message.clone(), enc_pub_key.clone(), old_msg_hashes); + MSG_HASHES.save( + deps.storage, + (msg_chain_length + Uint256::from_u128(1u128)) + .to_be_bytes() + .to_vec(), + &new_hash, + )?; + + let old_chain_length = msg_chain_length; + // Update the message chain length + msg_chain_length += Uint256::from_u128(1u128); + MSG_CHAIN_LENGTH.save(deps.storage, &msg_chain_length)?; + // Return a success response + Ok(Response::new() + .add_attribute("action", "publish_message") + .add_attribute("msg_chain_length", old_chain_length.to_string()) + .add_attribute("message", format!("{:?}", message.data)) + .add_attribute( + "enc_pub_key", + format!( + "{:?},{:?}", + enc_pub_key.x.to_string(), + enc_pub_key.y.to_string() + ), + )) + } else { + // Return an error response for invalid user or encrypted public key + Ok(Response::new() + .add_attribute("action", "publish_message") + .add_attribute("event", "error user.")) + } +} + +pub fn execute_start_process_period( + mut deps: DepsMut, + env: Env, + _info: MessageInfo, +) -> Result { + let period = PERIOD.load(deps.storage)?; + + if period.status == PeriodStatus::Ended + || period.status == PeriodStatus::Processing + || period.status == PeriodStatus::Tallying + { + return Err(ContractError::PeriodError {}); + } + + let voting_time: VotingTime = VOTINGTIME.load(deps.storage)?; + + // if let Some(voting_time) = voting_time { + if env.block.time <= voting_time.end_time { + return Err(ContractError::PeriodError {}); + } + // } else { + // return Err(ContractError::PeriodError {}); + // } + + let leaf_idx_0 = LEAF_IDX_0.load(deps.storage)?; + let num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + let _ = state_update_at( + &mut deps, + leaf_idx_0 + num_sign_ups - Uint256::from_u128(1u128), + true, + ); + + // Update the period status to Processing + let period = Period { + status: PeriodStatus::Processing, + }; + PERIOD.save(deps.storage, &period)?; + // Compute the state root + let state_root = state_root(deps.as_ref()); + + // Compute the current state commitment as the hash of the state root and 0 + CURRENT_STATE_COMMITMENT.save( + deps.storage, + &hash2([state_root, Uint256::from_u128(0u128)]), + )?; + + // Return a success response + Ok(Response::new().add_attribute("action", "start_process_period")) +} + +pub fn execute_process_message( + deps: DepsMut, + _env: Env, + _info: MessageInfo, + new_state_commitment: Uint256, + groth16_proof: Option, + plonk_proof: Option, +) -> Result { + let period = PERIOD.load(deps.storage)?; + // Check if the period status is Processing + if period.status != PeriodStatus::Processing { + return Err(ContractError::PeriodError {}); + } + let mut processed_msg_count = PROCESSED_MSG_COUNT.load(deps.storage)?; + let msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; + + // Check that all messages have not been processed yet + assert!( + processed_msg_count < msg_chain_length, + "all messages have been processed" + ); + + // Create an array to store the input values for the SNARK proof + let mut input: [Uint256; 6] = [Uint256::zero(); 6]; + + let num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + let max_vote_options = MAX_VOTE_OPTIONS.load(deps.storage)?; + let circuit_type = CIRCUITTYPE.load(deps.storage)?; + if circuit_type == Uint256::from_u128(0u128) { + // 1p1v + input[0] = (num_sign_ups << 32) + max_vote_options; // packedVals + } else if circuit_type == Uint256::from_u128(1u128) { + // qv + input[0] = (num_sign_ups << 32) + (circuit_type << 64) + max_vote_options; + // packedVals + } + // Load the coordinator's public key hash + let coordinator_hash = COORDINATORHASH.load(deps.storage)?; + input[1] = coordinator_hash; // coordPubKeyHash + + // Load the MACI parameters + let parameters = MACIPARAMETERS.load(deps.storage)?; + let batch_size = parameters.message_batch_size; + + // Compute the start and end indices of the current batch + let batch_start_index = (msg_chain_length - processed_msg_count - Uint256::from_u128(1u128)) + / batch_size + * batch_size; + let mut batch_end_index = batch_start_index + batch_size; + if batch_end_index > msg_chain_length { + batch_end_index = msg_chain_length; + } + + // Load the hash of the message at the batch start index + input[2] = MSG_HASHES.load(deps.storage, batch_start_index.to_be_bytes().to_vec())?; // batchStartHash + + // Load the hash of the message at the batch end index + input[3] = MSG_HASHES.load(deps.storage, batch_end_index.to_be_bytes().to_vec())?; // batchEndHash + + // Load the current state commitment + let current_state_commitment = CURRENT_STATE_COMMITMENT.load(deps.storage)?; + input[4] = current_state_commitment; + + // Set the new state commitment + input[5] = new_state_commitment; + + // Load the scalar field value (optimization: use cached values) + let snark_scalar_field = get_snark_scalar_field(); + + // Compute the hash of the input values + let input_hash = uint256_from_hex_string(&hash_256_uint256_list(&input)) % snark_scalar_field; // input hash + + let mut attributes = vec![]; + + if let Some(groth16_proof_data) = groth16_proof { + // Load the process verification keys + let process_vkeys_str = GROTH16_PROCESS_VKEYS.load(deps.storage)?; + + // Parse the SNARK proof (optimization: avoid unnecessary cloning) + let proof_str = Groth16ProofStr { + pi_a: hex::decode(&groth16_proof_data.a) + .map_err(|_| ContractError::HexDecodingError {})?, + pi_b: hex::decode(&groth16_proof_data.b) + .map_err(|_| ContractError::HexDecodingError {})?, + pi_c: hex::decode(&groth16_proof_data.c) + .map_err(|_| ContractError::HexDecodingError {})?, + }; + + // Parse the verification key and prepare for verification + let vkey = parse_groth16_vkey::(process_vkeys_str)?; + let pvk = prepare_verifying_key(&vkey); + + // Parse the proof and prepare for verification + let pof = parse_groth16_proof::(proof_str.clone())?; + + // Verify the SNARK proof using the input hash + let is_passed = groth16_verify( + &pvk, + &pof, + &[Fr::from_str(&input_hash.to_string()).unwrap()], + ) + .unwrap(); + + // If the proof verification fails, return an error + if !is_passed { + return Err(ContractError::InvalidProof { + step: String::from("Process"), + }); + } + + attributes = vec![ + attr("zk_verify", is_passed.to_string()), + attr("commitment", new_state_commitment.to_string()), + attr("proof", format!("{:?}", groth16_proof_data)), + attr("certification_system", "groth16"), + ]; + } + + if let Some(plonk_proof_data) = plonk_proof { + // Load the process verification keys + let process_vkeys_str = PLONK_PROCESS_VKEYS.load(deps.storage)?; + + // Parse the SNARK proof + let proof_str = PlonkProofStr { + num_inputs: plonk_proof_data.num_inputs.clone(), + n: plonk_proof_data.n.clone(), + input_values: plonk_proof_data.input_values.clone(), + wire_commitments: plonk_proof_data + .wire_commitments + .clone() + .into_iter() + .map(|x| hex::decode(x).unwrap()) + .collect(), + grand_product_commitment: hex::decode( + plonk_proof_data.grand_product_commitment.clone(), + ) + .map_err(|_| ContractError::HexDecodingError {})?, + quotient_poly_commitments: plonk_proof_data + .quotient_poly_commitments + .clone() + .into_iter() + .map(|x| hex::decode(x).unwrap()) + .collect(), + wire_values_at_z: plonk_proof_data.wire_values_at_z.clone(), + wire_values_at_z_omega: plonk_proof_data.wire_values_at_z_omega.clone(), + grand_product_at_z_omega: plonk_proof_data.grand_product_at_z_omega.clone(), + quotient_polynomial_at_z: plonk_proof_data.quotient_polynomial_at_z.clone(), + linearization_polynomial_at_z: plonk_proof_data.linearization_polynomial_at_z.clone(), + permutation_polynomials_at_z: plonk_proof_data.permutation_polynomials_at_z.clone(), + opening_at_z_proof: hex::decode(&plonk_proof_data.opening_at_z_proof) + .map_err(|_| ContractError::HexDecodingError {})?, + opening_at_z_omega_proof: hex::decode(&plonk_proof_data.opening_at_z_omega_proof) + .map_err(|_| ContractError::HexDecodingError {})?, + }; + + // Parse the verification key and prepare for verification + let vkey = parse_plonk_vkey::(process_vkeys_str)?; + + let pof = parse_plonk_proof::(proof_str.clone())?; + + // Verify the SNARK proof using the input hash + let is_passed = + plonk_verify::<_, _, RollingKeccakTranscript>(&pof, &vkey, None) + .map_err(|_| ContractError::SynthesisError {})?; + + // If the proof verification fails, return an error + if !is_passed { + return Err(ContractError::InvalidProof { + step: String::from("Process"), + }); + } + + attributes = vec![ + attr("zk_verify", is_passed.to_string()), + attr("commitment", new_state_commitment.to_string()), + attr("proof", format!("{:?}", plonk_proof_data)), + attr("certification_system", "plonk"), + ]; + } + + // Proof verify success + // Update the current state commitment + CURRENT_STATE_COMMITMENT.save(deps.storage, &new_state_commitment)?; + + // Update the count of processed messages + processed_msg_count += batch_end_index - batch_start_index; + PROCESSED_MSG_COUNT.save(deps.storage, &processed_msg_count)?; + Ok(Response::new() + .add_attribute("action", "process_message") + .add_attributes(attributes)) +} + +pub fn execute_stop_processing_period( + deps: DepsMut, + _env: Env, + _info: MessageInfo, +) -> Result { + let period = PERIOD.load(deps.storage)?; + // Check if the period status is Processing + if period.status != PeriodStatus::Processing { + return Err(ContractError::PeriodError {}); + } + + let num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + + // If there are registered users, check if all messages have been processed + // If num_sign_ups is 0, skip the message processing check as all votes are invalid + if num_sign_ups != Uint256::zero() { + let processed_msg_count = PROCESSED_MSG_COUNT.load(deps.storage)?; + let msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; + + if processed_msg_count != msg_chain_length { + return Err(ContractError::MsgLeftProcess {}); + } + } + + // Update the period status to Tallying + let period = Period { + status: PeriodStatus::Tallying, + }; + PERIOD.save(deps.storage, &period)?; + + Ok(Response::new() + .add_attribute("action", "stop_processing_period") + .add_attribute("period", "Tallying")) +} + +pub fn execute_process_tally( + deps: DepsMut, + _env: Env, + _info: MessageInfo, + new_tally_commitment: Uint256, + groth16_proof: Option, + plonk_proof: Option, +) -> Result { + let period = PERIOD.load(deps.storage)?; + // Check if the period status is Tallying + if period.status != PeriodStatus::Tallying { + return Err(ContractError::PeriodError {}); + } + + let mut processed_user_count = PROCESSED_USER_COUNT.load(deps.storage)?; + let num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + // Check that all users have not been processed yet + assert!( + processed_user_count.clone() < num_sign_ups.clone(), + "all users have been processed" + ); + + let parameters = MACIPARAMETERS.load(deps.storage)?; + // Calculate the batch size (optimization: avoid string conversions and exponentiation) + let batch_size = if parameters.int_state_tree_depth == Uint256::from_u128(1) { + Uint256::from_u128(5u128) // 5^1 + } else if parameters.int_state_tree_depth == Uint256::from_u128(2) { + Uint256::from_u128(25u128) // 5^2 + } else if parameters.int_state_tree_depth == Uint256::from_u128(3) { + Uint256::from_u128(125u128) // 5^3 + } else { + Uint256::from_u128(1u128) // Default value + }; + // Calculate the batch number + let batch_num = processed_user_count / batch_size; + + // Create an array to store the input values for the SNARK proof + let mut input: [Uint256; 4] = [Uint256::zero(); 4]; + + input[0] = (num_sign_ups << 32) + batch_num; // packedVals + + // Load the current state commitment and current tally commitment + let current_state_commitment = CURRENT_STATE_COMMITMENT.load(deps.storage)?; + let current_tally_commitment = CURRENT_TALLY_COMMITMENT.load(deps.storage)?; + + input[1] = current_state_commitment; // stateCommitment + input[2] = current_tally_commitment; // tallyCommitment + input[3] = new_tally_commitment; // newTallyCommitment + + // Load the scalar field value (optimization: use cached values) + let snark_scalar_field = get_snark_scalar_field(); + + // Compute the hash of the input values + let input_hash = uint256_from_hex_string(&hash_256_uint256_list(&input)) % snark_scalar_field; + + let mut attributes = vec![]; + let is_passed; + if let Some(groth16_proof_data) = groth16_proof { + // Load the tally verification keys + let tally_vkeys_str = GROTH16_TALLY_VKEYS.load(deps.storage)?; + + // Parse the SNARK proof (optimization: avoid unnecessary cloning) + let proof_str = Groth16ProofStr { + pi_a: hex::decode(&groth16_proof_data.a) + .map_err(|_| ContractError::HexDecodingError {})?, + pi_b: hex::decode(&groth16_proof_data.b) + .map_err(|_| ContractError::HexDecodingError {})?, + pi_c: hex::decode(&groth16_proof_data.c) + .map_err(|_| ContractError::HexDecodingError {})?, + }; + + // Parse the verification key and prepare for verification + let vkey = parse_groth16_vkey::(tally_vkeys_str)?; + let pvk = prepare_verifying_key(&vkey); + + // Parse the proof and prepare for verification + let pof = parse_groth16_proof::(proof_str.clone())?; + + // Verify the SNARK proof using the input hash + let is_passed = groth16_verify( + &pvk, + &pof, + &[Fr::from_str(&input_hash.to_string()).unwrap()], + ) + .unwrap(); + + // If the proof verification fails, return an error + if !is_passed { + return Err(ContractError::InvalidProof { + step: String::from("Tally"), + }); + } + + attributes = vec![ + attr("zk_verify", is_passed.to_string()), + attr("commitment", new_tally_commitment.to_string()), + attr("proof", format!("{:?}", groth16_proof_data)), + attr("certification_system", "groth16"), + ]; + } + + if let Some(plonk_proof_data) = plonk_proof { + // Load the tally verification keys + let tally_vkeys_str = PLONK_TALLY_VKEYS.load(deps.storage)?; + + // Parse the SNARK proof + let proof_str = PlonkProofStr { + num_inputs: plonk_proof_data.num_inputs.clone(), + n: plonk_proof_data.n.clone(), + input_values: plonk_proof_data.input_values.clone(), + wire_commitments: plonk_proof_data + .wire_commitments + .clone() + .into_iter() + .map(|x| hex::decode(x).unwrap()) + .collect(), + grand_product_commitment: hex::decode( + plonk_proof_data.grand_product_commitment.clone(), + ) + .map_err(|_| ContractError::HexDecodingError {})?, + quotient_poly_commitments: plonk_proof_data + .quotient_poly_commitments + .clone() + .into_iter() + .map(|x| hex::decode(x).unwrap()) + .collect(), + wire_values_at_z: plonk_proof_data.wire_values_at_z.clone(), + wire_values_at_z_omega: plonk_proof_data.wire_values_at_z_omega.clone(), + grand_product_at_z_omega: plonk_proof_data.grand_product_at_z_omega.clone(), + quotient_polynomial_at_z: plonk_proof_data.quotient_polynomial_at_z.clone(), + linearization_polynomial_at_z: plonk_proof_data.linearization_polynomial_at_z.clone(), + permutation_polynomials_at_z: plonk_proof_data.permutation_polynomials_at_z.clone(), + opening_at_z_proof: hex::decode(&plonk_proof_data.opening_at_z_proof) + .map_err(|_| ContractError::HexDecodingError {})?, + opening_at_z_omega_proof: hex::decode(&plonk_proof_data.opening_at_z_omega_proof) + .map_err(|_| ContractError::HexDecodingError {})?, + }; + + // Parse the verification key and prepare for verification + let vkey = parse_plonk_vkey::(tally_vkeys_str)?; + + let pof = parse_plonk_proof::(proof_str.clone())?; + + // Verify the SNARK proof using the input hash + is_passed = + plonk_verify::<_, _, RollingKeccakTranscript>(&pof, &vkey, None) + .map_err(|_| ContractError::SynthesisError {})?; + + // If the proof verification fails, return an error + if !is_passed { + return Err(ContractError::InvalidProof { + step: String::from("Process"), + }); + } + + attributes = vec![ + attr("zk_verify", is_passed.to_string()), + attr("commitment", new_tally_commitment.to_string()), + attr("proof", format!("{:?}", plonk_proof_data)), + attr("certification_system", "plonk"), + ]; + } + + // Proof verify success + // Update the current tally commitment + CURRENT_TALLY_COMMITMENT + .save(deps.storage, &new_tally_commitment) + .unwrap(); + + // Update the count of processed users + processed_user_count += batch_size; + + PROCESSED_USER_COUNT + .save(deps.storage, &processed_user_count) + .unwrap(); + + Ok(Response::new() + .add_attribute("action", "process_tally") + .add_attributes(attributes)) +} + +fn execute_stop_tallying_period( + deps: DepsMut, + _env: Env, + _info: MessageInfo, + results: Vec, + salt: Uint256, +) -> Result { + let period = PERIOD.load(deps.storage)?; + // Check if the period status is Tallying + if period.status != PeriodStatus::Tallying { + return Err(ContractError::PeriodError {}); + } + + let processed_user_count = PROCESSED_USER_COUNT.load(deps.storage)?; + let num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + let max_vote_options = MAX_VOTE_OPTIONS.load(deps.storage)?; + + // Check that all users have been processed + assert!(processed_user_count >= num_sign_ups); + + // Check that the number of results is not greater than the maximum vote options + assert!(Uint256::from_u128(results.len() as u128) <= max_vote_options); + + // Load the QTR library and MACI parameters + let qtr_lib = QTR_LIB.load(deps.storage)?; + let parameters = MACIPARAMETERS.load(deps.storage)?; + + // Calculate the results root + let results_root = qtr_lib.root_of(parameters.vote_option_tree_depth, results.clone()); + + // Calculate the tally commitment + let tally_commitment = hash2([results_root, salt]); + + // Load the current tally commitment + let current_tally_commitment = CURRENT_TALLY_COMMITMENT.load(deps.storage)?; + if current_tally_commitment == Uint256::from_u128(0u128) { + let mut sum = Uint256::zero(); + + // Save the results and calculate the sum + for i in 0..results.len() { + RESULT.save( + deps.storage, + Uint256::from_u128(i as u128).to_be_bytes().to_vec(), + &results[i], + )?; + sum += results[i]; + } + + // Save the total result + TOTAL_RESULT.save(deps.storage, &sum)?; + + // Update the period status to Ended + let period = Period { + status: PeriodStatus::Ended, + }; + PERIOD.save(deps.storage, &period)?; + + return Ok(Response::new() + .add_attribute("action", "stop_tallying_period") + .add_attribute( + "results", + format!( + "{:?}", + results + .iter() + .map(|x| x.to_string()) + .collect::>() + ), + ) + .add_attribute("all_result", sum.to_string())); + } + // Check that the tally commitment matches the current tally commitment + assert_eq!(tally_commitment, current_tally_commitment); + + let mut sum = Uint256::zero(); + + // Save the results and calculate the sum + for i in 0..results.len() { + RESULT.save( + deps.storage, + Uint256::from_u128(i as u128).to_be_bytes().to_vec(), + &results[i], + )?; + sum += results[i]; + } + + // Save the total result + TOTAL_RESULT.save(deps.storage, &sum)?; + + // Update the period status to Ended + let period = Period { + status: PeriodStatus::Ended, + }; + PERIOD.save(deps.storage, &period)?; + + Ok(Response::new() + .add_attribute("action", "stop_tallying_period") + .add_attribute( + "results", + format!( + "{:?}", + results + .iter() + .map(|x| x.to_string()) + .collect::>() + ), + ) + .add_attribute("all_result", sum.to_string())) +} + +fn execute_bond(_deps: DepsMut, _env: Env, info: MessageInfo) -> Result { + // if !can_execute(deps.as_ref(), info.sender.as_ref())? { + // return Err(ContractError::Unauthorized {}); + // } + + let denom = "peaka".to_string(); + let mut amount: Uint128 = Uint128::new(0); + // Iterate through the funds and find the amount with the MACI denomination + info.funds.iter().for_each(|fund| { + if fund.denom == denom { + amount = fund.amount; + } + }); + + Ok(Response::new() + .add_attribute("action", "bond") + .add_attribute("amount", amount.to_string())) +} + +fn execute_withdraw( + deps: DepsMut, + env: Env, + _info: MessageInfo, + amount: Option, +) -> Result { + // Check if the round has ended - anyone can call withdraw but only when round is ended + let period = PERIOD.load(deps.storage)?; + if period.status != PeriodStatus::Ended { + return Err(ContractError::PeriodError {}); + } + + // Use DORA as the denomination (changed from "peaka") + let denom = "peaka".to_string(); // Note: This should match the denom used in SaaS contract + let contract_balance = deps.querier.query_balance(env.contract.address, &denom)?; + let mut withdraw_amount = amount.map_or_else(|| contract_balance.amount.u128(), |am| am.u128()); + + if withdraw_amount > contract_balance.amount.u128() { + withdraw_amount = contract_balance.amount.u128(); + } + + // Get admin address (SaaS contract address) to send funds back + let admin_info = ADMIN.load(deps.storage)?; + let admin_address = admin_info.admin; + + let amount_res = coins(withdraw_amount, denom); + let message = BankMsg::Send { + to_address: admin_address.to_string(), // Send to admin (SaaS contract) instead of caller + amount: amount_res, + }; + + Ok(Response::new() + .add_message(message) + .add_attribute("action", "withdraw") + .add_attribute("amount", withdraw_amount.to_string())) +} + +fn can_sign_up( + deps: Deps, + env: Env, + pubkey: PubKey, + amount: Uint256, + certificate: String, +) -> StdResult { + let oracle_whitelist_config = ORACLE_WHITELIST_CONFIG.load(deps.storage)?; + let whitelist_backend_pubkey = oracle_whitelist_config.backend_pubkey; + // let payload = serde_json::json!({ + // "address": sender.to_string(), + // "amount": amount.to_string(), + // // "height": whitelist_snapshot_height.to_string(), + // "contract_address": env.contract.address.to_string(), + // "ecosystem": whitelist_ecosystem.to_string(), + // }); + let contract_address_uint256 = address_to_uint256(&env.contract.address); + + let payload = serde_json::json!({ + "amount": amount.to_string(), + "contract_address": contract_address_uint256.to_string(), + "pubkey_x": pubkey.x.to_string(), + "pubkey_y": pubkey.y.to_string(), + }); + + let msg = payload.to_string().into_bytes(); + + let hash = Sha256::digest(&msg); + + let certificate_binary = Binary::from_base64(&certificate)?; + let verify_result = deps.api.secp256k1_verify( + hash.as_ref(), + certificate_binary.as_slice(), // Use decoded binary data + whitelist_backend_pubkey.as_slice(), + )?; + + Ok(verify_result) +} + +fn user_balance_of( + deps: Deps, + env: Env, + // sender: &str, + pubkey: PubKey, + amount: Uint256, + certificate: String, +) -> StdResult { + if WHITELIST.has( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + ) { + let cfg = WHITELIST.load( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + )?; + return Ok(cfg.balance_of()); + } + + let oracle_whitelist_config = ORACLE_WHITELIST_CONFIG.load(deps.storage)?; + let whitelist_backend_pubkey = oracle_whitelist_config.backend_pubkey; + // let payload = serde_json::json!({ + // "address": sender.to_string(), + // "amount": amount.to_string(), + // "contract_address": env.contract.address.to_string(), + // "ecosystem": whitelist_ecosystem.to_string(), + // }); + + let contract_address_uint256 = address_to_uint256(&env.contract.address); + let payload = serde_json::json!({ + "amount": amount.to_string(), + "contract_address": contract_address_uint256.to_string(), + "pubkey_x": pubkey.x.to_string(), + "pubkey_y": pubkey.y.to_string(), + }); + + let msg = payload.to_string().into_bytes(); + + let hash = Sha256::digest(&msg); + + let certificate_binary = Binary::from_base64(&certificate)?; + let verify_result = deps.api.secp256k1_verify( + hash.as_ref(), + certificate_binary.as_slice(), + whitelist_backend_pubkey.as_slice(), + )?; + if verify_result { + let voting_power = calculate_voting_power( + amount, + &VotingPowerConfig { + mode: oracle_whitelist_config.voting_power_mode, + slope: oracle_whitelist_config.slope, + threshold: oracle_whitelist_config.threshold, + }, + ); + return Ok(voting_power); + } + Ok(Uint256::zero()) +} + +// Load the root node of the state tree +fn state_root(deps: Deps) -> Uint256 { + let root = NODES + .load( + deps.storage, + Uint256::from_u128(0u128).to_be_bytes().to_vec(), + ) + .unwrap(); + root +} + +// Enqueues the state leaf into the tree +fn state_enqueue(deps: &mut DepsMut, leaf: Uint256) -> Result { + let leaf_idx0 = LEAF_IDX_0.load(deps.storage).unwrap(); + let num_sign_ups = NUMSIGNUPS.load(deps.storage).unwrap(); + + let leaf_idx = leaf_idx0 + num_sign_ups; + NODES.save(deps.storage, leaf_idx.to_be_bytes().to_vec(), &leaf)?; + state_update_at(deps, leaf_idx, false) +} + +// Updates the state at the given index in the tree +fn state_update_at(deps: &mut DepsMut, index: Uint256, full: bool) -> Result { + let leaf_idx0 = LEAF_IDX_0.load(deps.storage).unwrap(); + if index < leaf_idx0 { + return Err(ContractError::MustUpdate {}); + } + + let mut idx = index.clone(); + + let mut height = 0; + + let zeros = ZEROS.load(deps.storage).unwrap(); + + while idx > Uint256::from_u128(0u128) + && (full || idx % Uint256::from_u128(5u128) == Uint256::from_u128(0u128)) + { + let parent_idx = (idx - Uint256::one()) / Uint256::from(5u8); + let children_idx0 = parent_idx * Uint256::from(5u8) + Uint256::one(); + + let zero = zeros[height]; + + let mut inputs: [Uint256; 5] = [Uint256::zero(); 5]; + + for i in 0..5 { + let node_value = NODES + .may_load( + deps.storage, + (children_idx0 + Uint256::from_u128(i as u128)) + .to_be_bytes() + .to_vec(), + ) + .unwrap(); + + let child = match node_value { + Some(value) => value, + None => zero, + }; + + inputs[i] = child; + } + + if NODES.has(deps.storage, parent_idx.to_be_bytes().to_vec()) { + NODES + .update( + deps.storage, + parent_idx.to_be_bytes().to_vec(), + |_c: Option| -> StdResult<_> { Ok(hash5(inputs)) }, + ) + .unwrap(); + } else { + NODES + .save( + deps.storage, + parent_idx.to_be_bytes().to_vec(), + &hash5(inputs), + ) + .unwrap(); + } + + height += 1; + idx = parent_idx; + } + + Ok(true) +} + +fn calculate_voting_power(amount: Uint256, config: &VotingPowerConfig) -> Uint256 { + match config.mode { + VotingPowerMode::Slope => amount / config.slope, + VotingPowerMode::Threshold => { + if amount >= config.threshold { + Uint256::from(1u128) + } else { + Uint256::zero() + } + } + } +} + +fn check_voting_time(env: Env, voting_time: VotingTime) -> Result<(), ContractError> { + if env.block.time < voting_time.start_time { + return Err(ContractError::PeriodError {}); + } + if env.block.time >= voting_time.end_time { + return Err(ContractError::PeriodError {}); + } + + Ok(()) +} + +pub fn hash_message_and_enc_pub_key( + message: MessageData, + enc_pub_key: PubKey, + prev_hash: Uint256, +) -> Uint256 { + let mut m: [Uint256; 5] = [Uint256::zero(); 5]; + m[0] = message.data[0]; + m[1] = message.data[1]; + m[2] = message.data[2]; + m[3] = message.data[3]; + m[4] = message.data[4]; + + let mut n: [Uint256; 5] = [Uint256::zero(); 5]; + n[0] = message.data[5]; + n[1] = message.data[6]; + n[2] = enc_pub_key.x; + n[3] = enc_pub_key.y; + n[4] = prev_hash; + + let m_hash = hash5(m); + + let n_hash = hash5(n); + let m_n_hash = hash2([m_hash, n_hash]); + return m_n_hash; +} + +// Generate storage key for PubKey +fn generate_pubkey_storage_key(pubkey: &PubKey) -> Vec { + let mut key = Vec::new(); + key.extend_from_slice(&pubkey.x.to_be_bytes()); + key.extend_from_slice(&pubkey.y.to_be_bytes()); + key +} + +// Only admin can execute +fn can_execute(deps: Deps, sender: &str) -> StdResult { + let cfg = ADMIN.load(deps.storage)?; + let can = cfg.is_admin(&sender); + Ok(can) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { + match msg { + QueryMsg::GetRoundInfo {} => { + to_json_binary::(&ROUNDINFO.load(deps.storage).unwrap()) + } + QueryMsg::GetVotingTime {} => { + to_json_binary::(&VOTINGTIME.load(deps.storage).unwrap()) + } + QueryMsg::GetPeriod {} => to_json_binary::(&PERIOD.load(deps.storage).unwrap()), + QueryMsg::GetNumSignUp {} => { + to_json_binary::(&NUMSIGNUPS.may_load(deps.storage)?.unwrap_or_default()) + } + QueryMsg::GetMsgChainLength {} => { + to_json_binary::(&MSG_CHAIN_LENGTH.may_load(deps.storage)?.unwrap_or_default()) + } + QueryMsg::GetProcessedMsgCount {} => to_json_binary::( + &PROCESSED_MSG_COUNT + .may_load(deps.storage)? + .unwrap_or_default(), + ), + QueryMsg::GetProcessedUserCount {} => to_json_binary::( + &PROCESSED_USER_COUNT + .may_load(deps.storage)? + .unwrap_or_default(), + ), + QueryMsg::GetResult { index } => to_json_binary::( + &RESULT + .may_load(deps.storage, index.to_be_bytes().to_vec())? + .unwrap_or_default(), + ), + QueryMsg::GetAllResult {} => { + to_json_binary::(&TOTAL_RESULT.may_load(deps.storage)?.unwrap_or_default()) + } + QueryMsg::GetStateIdxInc { address } => to_json_binary::( + &STATEIDXINC + .may_load(deps.storage, &address)? + .unwrap_or_default(), + ), + QueryMsg::GetVoiceCreditBalance { index } => to_json_binary::( + &VOICECREDITBALANCE + .load(deps.storage, index.to_be_bytes().to_vec()) + .unwrap(), + ), + QueryMsg::IsWhiteList { + pubkey, + amount, + certificate, + } => to_json_binary::(&query_can_sign_up(deps, env, pubkey, amount, certificate)?), + QueryMsg::WhiteBalanceOf { + pubkey, + amount, + certificate, + } => to_json_binary::(&query_user_balance_of( + deps, + env, + pubkey, + amount, + certificate, + )?), + QueryMsg::WhiteInfo { pubkey } => to_json_binary::( + &WHITELIST + .load( + deps.storage, + &( + pubkey.x.to_be_bytes().to_vec(), + pubkey.y.to_be_bytes().to_vec(), + ), + ) + .unwrap(), + ), + QueryMsg::MaxWhitelistNum {} => to_json_binary::( + &MAX_WHITELIST_NUM + .may_load(deps.storage)? + .unwrap_or_default(), + ), + QueryMsg::VoteOptionMap {} => { + to_json_binary::>(&VOTEOPTIONMAP.load(deps.storage).unwrap()) + } + QueryMsg::MaxVoteOptions {} => { + to_json_binary::(&MAX_VOTE_OPTIONS.may_load(deps.storage)?.unwrap_or_default()) + } + QueryMsg::QueryTotalFeeGrant {} => { + to_json_binary::(&FEEGRANTS.may_load(deps.storage)?.unwrap_or_default()) + } + QueryMsg::QueryCircuitType {} => { + to_json_binary::(&CIRCUITTYPE.may_load(deps.storage)?.unwrap_or_default()) + } + QueryMsg::QueryCertSystem {} => { + to_json_binary::(&CERTSYSTEM.may_load(deps.storage)?.unwrap_or_default()) + } + QueryMsg::QueryOracleWhitelistConfig {} => { + to_json_binary::(&ORACLE_WHITELIST_CONFIG.load(deps.storage)?) + } + QueryMsg::QueryCurrentStateCommitment {} => { + let current_state_commitment = CURRENT_STATE_COMMITMENT.may_load(deps.storage)?; + to_json_binary(¤t_state_commitment) + } + } +} + +pub fn query_can_sign_up( + deps: Deps, + env: Env, + pubkey: PubKey, + amount: Uint256, + certificate: String, +) -> StdResult { + Ok(can_sign_up(deps, env, pubkey, amount, certificate)?) +} + +pub fn query_user_balance_of( + deps: Deps, + env: Env, + pubkey: PubKey, + amount: Uint256, + certificate: String, +) -> StdResult { + Ok(user_balance_of(deps, env, pubkey, amount, certificate)?) +} + +#[cfg(test)] +mod tests {} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn reply(_deps: DepsMut, _env: Env, _msg: Reply) -> Result { + // Oracle MACI contract itself does not need to handle any reply, but needs this function to support multitest + Ok(Response::default()) +} diff --git a/contracts/api-maci/src/error.rs b/contracts/api-maci/src/error.rs new file mode 100644 index 0000000..dc2b73d --- /dev/null +++ b/contracts/api-maci/src/error.rs @@ -0,0 +1,125 @@ +use cosmwasm_std::StdError; +use thiserror::Error; + +#[derive(Error, Debug, PartialEq)] +pub enum ContractError { + #[error("{0}")] + Std(#[from] StdError), + + #[error("Unauthorized")] + Unauthorized {}, + + #[error("Insufficient funds sent")] + InsufficientFundsSend {}, + + #[error("PeriodError")] + PeriodError {}, + + #[error("still have messages left to process.")] + MsgLeftProcess {}, + + #[error("Must update from height 0")] + MustUpdate {}, + + #[error("Data error")] + DataError {}, + + #[error("Error verification")] + ErrorVerificationKey {}, + + #[error("Error proof")] + ErrorProof {}, + + #[error("Error public signal")] + ErrorPublicSignal {}, + + #[error("No verification key")] + NoVerificationKey {}, + + #[error("No public signal")] + NoPublicSignal {}, + + #[error("Parse public signal error")] + ParsePulbicSignalError {}, + + #[error("invalid hex format")] + HexDecodingError {}, + + #[error("Invalid proof, step {step} verify failed")] + InvalidProof { step: String }, + + #[error("whitelist already exist")] + AlreadySetWhitelist {}, + + #[error("already set {time_name} time")] + AlreadySetVotingTime { time_name: String }, + + #[error("end_time must big than start_time")] + WrongTimeSet {}, + + #[error("round title can not be empty")] + TitleIsEmpty, + + #[error("Fee Grant already exists")] + FeeGrantAlreadyExists, + + #[error("Fee Grant is not exists")] + FeeGrantIsNotExists, + + #[error("this account({difficuty_issuer}) didn't issue difficulty problem")] + NonPublishDifficulty { difficuty_issuer: String }, + + #[error("could not convert into prime field")] + InvalidPrimeField {}, + + #[error("SynthesisError of zk verify")] + SynthesisError {}, + + #[error("Wrong whitelist mode")] + WrongWhitelistMode {}, + + #[error("Invalid signature")] + InvalidSignature {}, + + #[error("Verification failed")] + VerificationFailed {}, + + #[error("Invalid base64 string")] + InvalidBase64 {}, + + #[error("Already signed up")] + AlreadySignedUp {}, + + #[error("This account({grantee}) already set fee grant")] + AlreadySetFeeGrant { grantee: String }, + + #[error("Amount is zero")] + AmountIsZero {}, + + #[error("Voting power is zero")] + VotingPowerIsZero {}, + + #[error("Unsupported circuit type")] + UnsupportedCircuitType {}, + + #[error("Unsupported certification system.")] + UnsupportedCertificationSystem {}, + + #[error("Invalid vkey")] + InvalidVKeyError {}, + + #[error("Vote options cannot exceed {max_options}")] + VoteOptionsExceedLimit { max_options: u8 }, + + #[error("Maximum number of voters ({max_voters}) has been reached")] + MaxVotersReached { max_voters: u128 }, + + #[error("Unsupported circuit size for the given parameters")] + UnsupportedCircuitSize {}, + + #[error("Circuit parameters do not match any supported configuration")] + NotMatchCircuitSize {}, + + #[error("Encrypted public key already used")] + EncPubKeyAlreadyUsed {}, +} diff --git a/contracts/api-maci/src/groth16_parser.rs b/contracts/api-maci/src/groth16_parser.rs new file mode 100644 index 0000000..9268a9d --- /dev/null +++ b/contracts/api-maci/src/groth16_parser.rs @@ -0,0 +1,131 @@ +use super::error::ContractError; +use crate::state::{Groth16ProofStr, Groth16VkeyStr}; +use bellman_ce_verifier::{Proof, VerifyingKey}; +use cosmwasm_std::ensure; +use pairing_ce::bn256::{G1Affine, G1Uncompressed, G2Affine, G2Uncompressed}; +use pairing_ce::{CurveAffine, EncodedPoint, Engine}; + +/// convert the proof into the affine type, which will be used to verify +pub fn parse_groth16_proof(pof: Groth16ProofStr) -> Result, ContractError> +where + E: Engine, +{ + let pi_a = pof.pi_a; + let pi_b = pof.pi_b; + let pi_c = pof.pi_c; + + ensure!(pi_a.len() == 64, ContractError::ErrorProof {}); + ensure!(pi_b.len() == 128, ContractError::ErrorProof {}); + ensure!(pi_c.len() == 64, ContractError::ErrorProof {}); + + let mut a_arr: [u8; 64] = [0; 64]; + let mut b_arr: [u8; 128] = [0; 128]; + let mut c_arr: [u8; 64] = [0; 64]; + + a_arr[..pi_a.len()].copy_from_slice(&pi_a[..]); + + b_arr[..pi_b.len()].copy_from_slice(&pi_b[..]); + + c_arr[..pi_c.len()].copy_from_slice(&pi_c[..]); + + let pia_affine: G1Affine = G1Uncompressed::from_fixed_bytes(a_arr) + .into_affine() + .map_err(|_| ContractError::ErrorProof {})?; + let pib_affine: G2Affine = G2Uncompressed::from_fixed_bytes(b_arr) + .into_affine() + .map_err(|_| ContractError::ErrorProof {})?; + let pic_affine: G1Affine = G1Uncompressed::from_fixed_bytes(c_arr) + .into_affine() + .map_err(|_| ContractError::ErrorProof {})?; + + Ok(Proof { + a: pia_affine, + b: pib_affine, + c: pic_affine, + }) +} + +/// convert the verification key into the affine type, which will be used in verification +pub fn parse_groth16_vkey(vk: Groth16VkeyStr) -> Result, ContractError> +where + E: Engine, +{ + let vk_alpha_1 = vk.alpha_1; + let vk_beta_2 = vk.beta_2; + let vk_gamma_2 = vk.gamma_2; + let vk_delta_2 = vk.delta_2; + let vk_ic0 = vk.ic0; + let vk_ic1 = vk.ic1; + + ensure!( + vk_alpha_1.len() == 64, + ContractError::ErrorVerificationKey {} + ); + ensure!( + vk_beta_2.len() == 128, + ContractError::ErrorVerificationKey {} + ); + ensure!( + vk_gamma_2.len() == 128, + ContractError::ErrorVerificationKey {} + ); + ensure!( + vk_delta_2.len() == 128, + ContractError::ErrorVerificationKey {} + ); + ensure!(vk_ic0.len() == 64, ContractError::ErrorVerificationKey {}); + ensure!(vk_ic1.len() == 64, ContractError::ErrorVerificationKey {}); + + let mut alpha1: [u8; 64] = [0; 64]; + let mut beta2: [u8; 128] = [0; 128]; + let mut gamma2: [u8; 128] = [0; 128]; + let mut delta2: [u8; 128] = [0; 128]; + let mut ic_0: [u8; 64] = [0; 64]; + let mut ic_1: [u8; 64] = [0; 64]; + let mut ic = Vec::new(); + + alpha1[..vk_alpha_1.len()].copy_from_slice(&vk_alpha_1[..]); + + beta2[..vk_beta_2.len()].copy_from_slice(&vk_beta_2[..]); + + gamma2[..vk_gamma_2.len()].copy_from_slice(&vk_gamma_2[..]); + + delta2[..vk_delta_2.len()].copy_from_slice(&vk_delta_2[..]); + + ic_0[..vk_ic0.len()].copy_from_slice(&vk_ic0[..]); + + ic_1[..vk_ic1.len()].copy_from_slice(&vk_ic1[..]); + + let alpha1_affine = G1Uncompressed::from_fixed_bytes(alpha1) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {})?; + let beta2_affine = G2Uncompressed::from_fixed_bytes(beta2) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {})?; + let gamma2_affine = G2Uncompressed::from_fixed_bytes(gamma2) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {})?; + let delta2_affine = G2Uncompressed::from_fixed_bytes(delta2) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {})?; + let ic0_affine = G1Uncompressed::from_fixed_bytes(ic_0) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {})?; + let ic1_affine = G1Uncompressed::from_fixed_bytes(ic_1) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {})?; + + ic.push(ic0_affine); + ic.push(ic1_affine); + + // return verification key + Ok(VerifyingKey { + alpha_g1: alpha1_affine, + beta_g1: G1Affine::zero(), + beta_g2: beta2_affine, + gamma_g2: gamma2_affine, + delta_g1: G1Affine::zero(), + delta_g2: delta2_affine, + ic, + }) +} diff --git a/contracts/api-maci/src/lib.rs b/contracts/api-maci/src/lib.rs new file mode 100644 index 0000000..99a6e32 --- /dev/null +++ b/contracts/api-maci/src/lib.rs @@ -0,0 +1,13 @@ +pub mod circuit_params; +pub mod contract; +mod error; +pub mod groth16_parser; +pub mod msg; +pub mod plonk_parser; +pub mod state; +pub mod utils; + +#[cfg(test)] +pub mod multitest; + +pub use crate::error::ContractError; diff --git a/contracts/api-maci/src/msg.rs b/contracts/api-maci/src/msg.rs new file mode 100644 index 0000000..77371b9 --- /dev/null +++ b/contracts/api-maci/src/msg.rs @@ -0,0 +1,230 @@ +use crate::state::{ + MaciParameters, MessageData, OracleWhitelistConfig, PeriodStatus, PubKey, RoundInfo, + VotingPowerMode, VotingTime, WhitelistConfig, +}; +use cosmwasm_schema::{cw_serde, QueryResponses}; +use cosmwasm_std::{Addr, Uint128, Uint256}; + +#[cw_serde] +pub struct WhitelistBase { + pub addr: String, + pub balance: Uint256, +} + +#[cw_serde] +pub struct Whitelist { + pub users: Vec, +} + +#[cw_serde] +pub struct VotingPowerArgs { + pub mode: VotingPowerMode, + pub slope: Uint256, + pub threshold: Uint256, +} + +#[cw_serde] +pub struct InstantiateMsg { + pub coordinator: PubKey, + // pub qtr_lib: QuinaryTreeRoot, + pub max_voters: u128, // Maximum number of voters, used for calculating circuit scale + // pub max_vote_options: u128, // Maximum number of vote options, used for calculating circuit scale + pub vote_option_map: Vec, + + pub round_info: RoundInfo, + pub voting_time: VotingTime, + pub circuit_type: Uint256, // <0: 1p1v | 1: pv> + pub certification_system: Uint256, // <0: groth16 | 1: plonk> + + pub whitelist_backend_pubkey: String, + pub whitelist_voting_power_args: VotingPowerArgs, +} + +#[cw_serde] +pub struct Groth16VKeyType { + pub vk_alpha1: String, + pub vk_beta_2: String, + pub vk_gamma_2: String, + pub vk_delta_2: String, + pub vk_ic0: String, + pub vk_ic1: String, +} + +#[cw_serde] +pub struct Groth16ProofType { + pub a: String, + pub b: String, + pub c: String, +} + +#[cw_serde] +pub struct PlonkVKeyType { + pub n: usize, + pub num_inputs: usize, + pub selector_commitments: Vec, + pub next_step_selector_commitments: Vec, + pub permutation_commitments: Vec, + pub non_residues: Vec, + pub g2_elements: Vec, +} + +#[cw_serde] +pub struct PlonkProofType { + pub num_inputs: usize, + pub n: usize, + pub input_values: Vec, + pub wire_commitments: Vec, + pub grand_product_commitment: String, + pub quotient_poly_commitments: Vec, + pub wire_values_at_z: Vec, + pub wire_values_at_z_omega: Vec, + pub grand_product_at_z_omega: String, + pub quotient_polynomial_at_z: String, + pub linearization_polynomial_at_z: String, + pub permutation_polynomials_at_z: Vec, + pub opening_at_z_proof: String, + pub opening_at_z_omega_proof: String, +} + +#[cw_serde] +pub enum ExecuteMsg { + SetRoundInfo { + round_info: RoundInfo, + }, + // SetWhitelists { + // whitelists: Whitelist, + // }, + SetVoteOptionsMap { + vote_option_map: Vec, + }, + SignUp { + pubkey: PubKey, // user's pubkey + amount: Uint256, + certificate: String, + }, + StartProcessPeriod {}, + PublishMessage { + message: MessageData, + enc_pub_key: PubKey, + }, + ProcessMessage { + new_state_commitment: Uint256, + groth16_proof: Option, + plonk_proof: Option, + }, + StopProcessingPeriod {}, + ProcessTally { + new_tally_commitment: Uint256, + groth16_proof: Option, + plonk_proof: Option, + }, + StopTallyingPeriod { + results: Vec, + salt: Uint256, + }, + Bond {}, + Withdraw { + amount: Option, + }, +} + +#[cw_serde] +pub struct Period { + pub status: PeriodStatus, +} + +#[cw_serde] +#[derive(QueryResponses)] +pub enum QueryMsg { + #[returns(RoundInfo)] + GetRoundInfo {}, + + #[returns(VotingTime)] + GetVotingTime {}, + + #[returns(Period)] + GetPeriod {}, + + #[returns(Uint256)] + GetNumSignUp {}, + + #[returns(Uint256)] + GetMsgChainLength {}, + + #[returns(Uint256)] + GetProcessedMsgCount {}, + + #[returns(Uint256)] + GetProcessedUserCount {}, + + #[returns(Uint256)] + GetResult { index: Uint256 }, + + #[returns(Uint256)] + GetAllResult {}, + + #[returns(Uint256)] + GetStateIdxInc { address: Addr }, + + #[returns(Uint256)] + GetVoiceCreditBalance { index: Uint256 }, + + /// Checks permissions of the caller on this proxy. + /// If CanExecute returns true then a call to `Execute` with the same message, + /// before any further state changes, should also succeed. + #[returns(bool)] + IsWhiteList { + pubkey: PubKey, + amount: Uint256, + certificate: String, + }, + + #[returns(Uint256)] + WhiteBalanceOf { + pubkey: PubKey, + amount: Uint256, + certificate: String, + }, + + #[returns(WhitelistConfig)] + WhiteInfo { pubkey: PubKey }, + + #[returns(u128)] + MaxWhitelistNum {}, + + #[returns(Vec)] + VoteOptionMap {}, + + #[returns(Uint256)] + MaxVoteOptions {}, + + #[returns(Uint128)] + QueryTotalFeeGrant {}, + + #[returns(Uint256)] + QueryCircuitType {}, + + #[returns(Uint256)] + QueryCertSystem {}, + + #[returns(OracleWhitelistConfig)] + QueryOracleWhitelistConfig {}, + + #[returns(Uint256)] + QueryCurrentStateCommitment {}, +} + +#[cw_serde] +pub struct InstantiationData { + pub caller: Addr, + pub parameters: MaciParameters, + pub coordinator: PubKey, + pub max_voters: u128, + pub vote_option_map: Vec, + pub round_info: RoundInfo, + pub voting_time: VotingTime, + pub circuit_type: String, + pub certification_system: String, + pub whitelist_backend_pubkey: String, + pub whitelist_voting_power_args: VotingPowerArgs, +} diff --git a/contracts/api-maci/src/multitest/certificate_generator.rs b/contracts/api-maci/src/multitest/certificate_generator.rs new file mode 100644 index 0000000..82fd455 --- /dev/null +++ b/contracts/api-maci/src/multitest/certificate_generator.rs @@ -0,0 +1,165 @@ +use base64; +use secp256k1::{Message, PublicKey, Secp256k1, SecretKey}; +use serde_json; +use sha2::{Digest, Sha256}; + +// Private key (hex format) +const PRIVATE_KEY_HEX: &str = "84d85037a14db4a7a1424084cca70211685ad65f7325c4d26aca93edfb2995df"; + +// Pubkey (base64) +const PUBKEY_B64: &str = "A9ekxvWjYNpnHTasS008PG+EuF2ssIkUPaDdnn8ZdzTb"; + +/// Generate certificate for given user pubkey and amount +pub fn generate_certificate_for_pubkey( + contract_address: &str, + pubkey_x: &str, + pubkey_y: &str, + amount: u128, +) -> String { + // Create payload matching the new format used in contract + let payload = serde_json::json!({ + "amount": amount.to_string(), + "contract_address": contract_address, + "pubkey_x": pubkey_x, + "pubkey_y": pubkey_y, + }); + + let msg = payload.to_string().into_bytes(); + let hash = Sha256::digest(&msg); + + // Parse private key + let private_key_bytes = hex::decode(PRIVATE_KEY_HEX).expect("Invalid private key hex"); + let secret_key = SecretKey::from_slice(&private_key_bytes).expect("Invalid private key"); + + // Create secp256k1 context + let secp = Secp256k1::new(); + + // Create message object + let message = Message::from_slice(&hash).expect("32 bytes"); + + // Sign + let signature = secp.sign_ecdsa(&message, &secret_key); + + // Serialize signature and convert to base64 + let signature_bytes = signature.serialize_compact(); + base64::encode(&signature_bytes) +} + +/// Legacy function: Generate certificate for given user address and amount +pub fn generate_certificate( + contract_address: &str, + user_address: &str, + amount: u128, + ecosystem: &str, +) -> String { + // Create payload + let payload = serde_json::json!({ + "contract_address": contract_address, + "address": user_address, + "amount": amount.to_string(), + "ecosystem": ecosystem, + }); + + let msg = payload.to_string().into_bytes(); + let hash = Sha256::digest(&msg); + + // Parse private key + let private_key_bytes = hex::decode(PRIVATE_KEY_HEX).expect("Invalid private key hex"); + let secret_key = SecretKey::from_slice(&private_key_bytes).expect("Invalid private key"); + + // Create secp256k1 context + let secp = Secp256k1::new(); + + // Create message object + let message = Message::from_slice(&hash).expect("32 bytes"); + + // Sign + let signature = secp.sign_ecdsa(&message, &secret_key); + + // Serialize signature and convert to base64 + let signature_bytes = signature.serialize_compact(); + base64::encode(&signature_bytes) +} + +/// Verify if public key matches private key +pub fn verify_keypair() -> bool { + let private_key_bytes = hex::decode(PRIVATE_KEY_HEX).expect("Invalid private key hex"); + let secret_key = SecretKey::from_slice(&private_key_bytes).expect("Invalid private key"); + + let secp = Secp256k1::new(); + let public_key = PublicKey::from_secret_key(&secp, &secret_key); + + // Expected public key (base64) - The public key of the certificate account provided + let expected_pubkey_b64 = PUBKEY_B64; + let expected_pubkey_bytes = base64::decode(expected_pubkey_b64).expect("Invalid base64"); + + // Compare public keys + public_key.serialize().to_vec() == expected_pubkey_bytes +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_keypair_match() { + assert!(verify_keypair(), "Public key and private key do not match"); + } + + #[test] + fn test_certificate_generation() { + let certificate = generate_certificate("contract0", "0", 100000000u128, "cosmoshub"); + + // Ensure certificate is not empty + assert!(!certificate.is_empty()); + + // Ensure certificate is valid base64 + assert!(base64::decode(&certificate).is_ok()); + + println!("Generated certificate for user 0: {}", certificate); + } + + #[test] + fn test_different_users() { + let cert0 = generate_certificate("contract0", "0", 100000000u128, "cosmoshub"); + let cert1 = generate_certificate("contract0", "1", 80000000u128, "cosmoshub"); + + // Different users should have different certificates + assert_ne!(cert0, cert1); + + println!("User 0 certificate: {}", cert0); + println!("User 1 certificate: {}", cert1); + } + + #[test] + fn test_certificate_generation_for_pubkey() { + let pubkey_x = "3557592161792765812904087712812111121909518311142005886657252371904276697771"; + let pubkey_y = "4363822302427519764561660537570341277214758164895027920046745209970137856681"; + let certificate = generate_certificate_for_pubkey("contract0", pubkey_x, pubkey_y, 100000000u128); + + // Ensure certificate is not empty + assert!(!certificate.is_empty()); + + // Ensure certificate is valid base64 + assert!(base64::decode(&certificate).is_ok()); + + println!("Generated certificate for pubkey: {}", certificate); + } + + #[test] + fn test_different_pubkeys() { + let pubkey0_x = "3557592161792765812904087712812111121909518311142005886657252371904276697771"; + let pubkey0_y = "4363822302427519764561660537570341277214758164895027920046745209970137856681"; + let pubkey1_x = "1234567890123456789012345678901234567890123456789012345678901234567890123456"; + let pubkey1_y = "9876543210987654321098765432109876543210987654321098765432109876543210987654"; + + let cert0 = generate_certificate_for_pubkey("contract0", pubkey0_x, pubkey0_y, 100000000u128); + let cert1 = generate_certificate_for_pubkey("contract0", pubkey1_x, pubkey1_y, 80000000u128); + + // Different pubkeys should have different certificates + assert_ne!(cert0, cert1); + + println!("Pubkey 0 certificate: {}", cert0); + println!("Pubkey 1 certificate: {}", cert1); + } +} diff --git a/contracts/api-maci/src/multitest/mod.rs b/contracts/api-maci/src/multitest/mod.rs new file mode 100644 index 0000000..2697db5 --- /dev/null +++ b/contracts/api-maci/src/multitest/mod.rs @@ -0,0 +1,960 @@ +#[cfg(test)] +mod tests; + +// #[cfg(test)] +// mod certificate_generator; + +use anyhow::Result as AnyResult; + +use crate::state::{ + MessageData, OracleWhitelistConfig, Period, PubKey, RoundInfo, VotingPowerMode, VotingTime, + WhitelistConfig, +}; +use crate::utils::uint256_from_hex_string; +use crate::{ + contract::{execute, instantiate, query, reply}, + msg::*, +}; +use base64::prelude::*; +use cosmwasm_std::testing::{MockApi, MockStorage}; +use cosmwasm_std::{Addr, Coin, Empty, StdResult, Timestamp, Uint128, Uint256}; +use serde::{Deserialize, Serialize}; +// use cosmwasm_std::{Addr, Coin, StdResult, Timestamp, Uint128, Uint256}; +use cw_multi_test::{ + no_init, AppBuilder, AppResponse, BankKeeper, ContractWrapper, DistributionKeeper, Executor, + FailingModule, GovFailingModule, IbcFailingModule, StakeKeeper, StargateAccepting, WasmKeeper, +}; +// use cw_multi_test::{App, AppResponse, ContractWrapper, Executor}; +use num_bigint::BigUint; + +pub fn uint256_from_decimal_string(decimal_string: &str) -> Uint256 { + assert!( + decimal_string.len() <= 77, + "the decimal length can't abrove 77" + ); + + let decimal_number = BigUint::parse_bytes(decimal_string.as_bytes(), 10) + .expect("Failed to parse decimal string"); + + let byte_array = decimal_number.to_bytes_be(); + + let hex_string = hex::encode(byte_array); + uint256_from_hex_string(&hex_string) +} +pub const MOCK_CONTRACT_ADDR: &str = "cosmos2contract"; +// pub const ARCH_DEMON: &str = "aconst"; +// pub const ARCH_DECIMALS: u8 = 18; + +pub type App = cw_multi_test::App< + BankKeeper, + MockApi, + MockStorage, + FailingModule, + WasmKeeper, + StakeKeeper, + DistributionKeeper, + IbcFailingModule, + GovFailingModule, + StargateAccepting, +>; + +pub fn create_app() -> App { + let mut app = AppBuilder::new() + .with_stargate(StargateAccepting) + .build(no_init); + + // Initialize account balances for testing + let initial_balance = vec![cosmwasm_std::coin(10_000_000u128, "peaka")]; + app.init_modules(|router, _, storage| { + router + .bank + .init_balance(storage, &owner(), initial_balance.clone()) + .unwrap(); + router + .bank + .init_balance(storage, &user2(), initial_balance.clone()) + .unwrap(); + }); + + app +} + +#[derive(Clone, Debug, Copy)] +pub struct MaciCodeId(u64); + +impl MaciCodeId { + pub fn store_code(app: &mut App) -> Self { + let contract = ContractWrapper::new(execute, instantiate, query).with_reply(reply); + let code_id = app.store_code(Box::new(contract)); + Self(code_id) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_no_voting_time( + self, + app: &mut App, + sender: Addr, + // round_info: Option, + // whitelist: Option, + // voting_time: Option, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("test_round"), + description: "".to_string(), + link: "".to_string(), + }; + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797424879000000), + end_time: Timestamp::from_nanos(1571797429879300000), + }; + let circuit_type = Uint256::from_u128(0u128); + MaciContract::instantiate( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_voting_time( + self, + app: &mut App, + sender: Addr, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("HackWasm Berlin"), + description: String::from("Hack In Brelin"), + link: String::from("https://baidu.com"), + }; + + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797424879000000), + end_time: Timestamp::from_nanos(1571797429879300000), + }; + let circuit_type = Uint256::from_u128(0u128); + MaciContract::instantiate( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_voting_time_plonk( + self, + app: &mut App, + sender: Addr, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("HackWasm Berlin"), + description: String::from("Hack In Brelin"), + link: String::from("https://baidu.com"), + }; + + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797424879000000), + end_time: Timestamp::from_nanos(1571797429879300000), + }; + let circuit_type = Uint256::from_u128(0u128); + MaciContract::instantiate_plonk( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_wrong_voting_time( + self, + app: &mut App, + sender: Addr, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("HackWasm Berlin"), + description: String::from("Hack In Brelin"), + link: String::from("https://baidu.com"), + }; + + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797429879300000), + end_time: Timestamp::from_nanos(1571797424879000000), + }; + let circuit_type = Uint256::from_u128(0u128); + MaciContract::instantiate( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_start_time( + self, + app: &mut App, + sender: Addr, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("HackWasm Berlin"), + description: String::from("Hack In Brelin"), + link: String::from("https://baidu.com"), + }; + + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797424879000000), + end_time: Timestamp::from_nanos(1571797429879300000), + }; + + let circuit_type = Uint256::from_u128(0u128); + MaciContract::instantiate( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_end_time( + self, + app: &mut App, + sender: Addr, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("HackWasm Berlin"), + description: String::from("Hack In Brelin"), + link: String::from("https://baidu.com"), + }; + + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797424879000000), + end_time: Timestamp::from_nanos(1571797429879300000), + }; + + let circuit_type = Uint256::from_u128(0u128); + MaciContract::instantiate( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_voting_time_and_no_whitelist( + self, + app: &mut App, + sender: Addr, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("HackWasm Berlin"), + description: String::from("Hack In Brelin"), + link: String::from("https://baidu.com"), + }; + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797424879000000), + end_time: Timestamp::from_nanos(1571797429879300000), + }; + + let circuit_type = Uint256::from_u128(0u128); + MaciContract::instantiate( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_voting_time_isqv( + self, + app: &mut App, + sender: Addr, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("HackWasm Berlin"), + description: String::from("Hack In Brelin"), + link: String::from("https://baidu.com"), + }; + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797424879000000), + end_time: Timestamp::from_nanos(1571797429879300000), + }; + let circuit_type = Uint256::from_u128(1u128); + MaciContract::instantiate( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn instantiate_with_wrong_circuit_type( + self, + app: &mut App, + sender: Addr, + label: &str, + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("HackWasm Berlin"), + description: String::from("Hack In Brelin"), + link: String::from("https://baidu.com"), + }; + let voting_time = VotingTime { + start_time: Timestamp::from_nanos(1571797424879000000), + end_time: Timestamp::from_nanos(1571797429879300000), + }; + let circuit_type = Uint256::from_u128(2u128); + MaciContract::instantiate( + app, + self, + sender, + round_info, + voting_time, + circuit_type, + label, + ) + } +} + +impl From for u64 { + fn from(code_id: MaciCodeId) -> Self { + code_id.0 + } +} + +#[derive(Debug, Clone)] +pub struct MaciContract(Addr); + +// implement the contract real function, e.g. instantiate, functions in exec, query modules +impl MaciContract { + pub fn addr(&self) -> Addr { + self.0.clone() + } + + #[allow(clippy::too_many_arguments)] + #[track_caller] + pub fn instantiate( + app: &mut App, + code_id: MaciCodeId, + sender: Addr, + round_info: RoundInfo, + voting_time: VotingTime, + circuit_type: Uint256, + label: &str, + ) -> AnyResult { + let init_msg = InstantiateMsg { + coordinator: PubKey { + x: uint256_from_decimal_string( + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + ), + y: uint256_from_decimal_string( + "4363822302427519764561660537570341277214758164895027920046745209970137856681", + ), + }, + max_voters: 25, // Use 2-1-1-5 scale, supports up to 25 voters + vote_option_map: vec![ + "1".to_string(), + "2".to_string(), + "3".to_string(), + "4".to_string(), + "5".to_string(), + ], + round_info, + voting_time, + circuit_type, + certification_system: Uint256::from_u128(0u128), + whitelist_backend_pubkey: whitelist_pubkey(), + whitelist_voting_power_args: VotingPowerArgs { + mode: whitelist_voting_power_mode(), + slope: whitelist_slope(), + threshold: whitelist_threshold(), + }, + }; + + app.instantiate_contract( + code_id.0, + Addr::unchecked(sender), + &init_msg, + &[cosmwasm_std::coin(1000000u128, "peaka")], // Add funds as fee_grant_amount + label, + None, + ) + .map(Self::from) + } + + #[allow(clippy::too_many_arguments)] + #[track_caller] + pub fn instantiate_plonk( + app: &mut App, + code_id: MaciCodeId, + sender: Addr, + round_info: RoundInfo, + voting_time: VotingTime, + circuit_type: Uint256, + label: &str, + ) -> AnyResult { + let init_msg = InstantiateMsg { + coordinator: PubKey { + x: uint256_from_decimal_string( + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + ), + y: uint256_from_decimal_string( + "4363822302427519764561660537570341277214758164895027920046745209970137856681", + ), + }, + max_voters: 25, // Use 2-1-1-5 scale, supports up to 25 voters + vote_option_map: vec![ + "1".to_string(), + "2".to_string(), + "3".to_string(), + "4".to_string(), + "5".to_string(), + ], + round_info, + voting_time, + circuit_type, + certification_system: Uint256::from_u128(1u128), // plonk system + whitelist_backend_pubkey: whitelist_pubkey(), + whitelist_voting_power_args: VotingPowerArgs { + mode: whitelist_voting_power_mode(), + slope: whitelist_slope(), + threshold: whitelist_threshold(), + }, + }; + + app.instantiate_contract( + code_id.0, + Addr::unchecked(sender), + &init_msg, + &[cosmwasm_std::coin(1000000u128, "peaka")], // Add funds as fee_grant_amount + label, + None, + ) + .map(Self::from) + } + + #[track_caller] + pub fn sign_up( + &self, + app: &mut App, + sender: Addr, + pubkey: PubKey, + amount: Uint256, + certificate: String, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SignUp { + pubkey, + amount, + certificate, + }, + &[], + ) + } + + #[track_caller] + pub fn publish_message( + &self, + app: &mut App, + sender: Addr, + message: MessageData, + enc_pub_key: PubKey, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::PublishMessage { + message, + enc_pub_key, + }, + &[], + ) + } + + #[track_caller] + pub fn set_round_info(&self, app: &mut App, sender: Addr) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SetRoundInfo { + round_info: RoundInfo { + title: String::from("TestRound2"), + description: String::from(""), + link: String::from("https://github.com"), + }, + }, + &[], + ) + } + + #[track_caller] + pub fn set_empty_round_info(&self, app: &mut App, sender: Addr) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SetRoundInfo { + round_info: RoundInfo { + title: String::from(""), + description: String::from("Hello"), + link: String::from("https://github.com"), + }, + }, + &[], + ) + } + + // #[track_caller] + // pub fn set_whitelist(&self, app: &mut App, sender: Addr) -> AnyResult { + // app.execute_contract( + // sender, + // self.addr(), + // &ExecuteMsg::SetWhitelists { + // whitelists: Whitelist { + // users: vec![ + // WhitelistBase { + // addr: user1().to_string(), + // balance: Uint256::from_u128(100u128), + // }, + // WhitelistBase { + // addr: user2().to_string(), + // balance: Uint256::from_u128(80u128), + // }, + // ], + // }, + // }, + // &[], + // ) + // } + + #[track_caller] + pub fn set_vote_option_map(&self, app: &mut App, sender: Addr) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SetVoteOptionsMap { + vote_option_map: vec![ + String::from("did_not_vote"), + String::from("yes"), + String::from("no"), + String::from("no_with_veto"), + String::from("abstain"), + ], + }, + &[], + ) + } + + #[track_caller] + pub fn set_vote_option_map_with_list( + &self, + app: &mut App, + sender: Addr, + vote_option_map: Vec, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::SetVoteOptionsMap { vote_option_map }, + &[], + ) + } + + #[track_caller] + pub fn start_process(&self, app: &mut App, sender: Addr) -> AnyResult { + app.execute_contract(sender, self.addr(), &ExecuteMsg::StartProcessPeriod {}, &[]) + } + + #[track_caller] + pub fn process_message( + &self, + app: &mut App, + sender: Addr, + new_state_commitment: Uint256, + proof: Groth16ProofType, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::ProcessMessage { + new_state_commitment, + groth16_proof: Some(proof), + plonk_proof: None, + }, + &[], + ) + } + + #[track_caller] + pub fn process_message_plonk( + &self, + app: &mut App, + sender: Addr, + new_state_commitment: Uint256, + proof: PlonkProofType, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::ProcessMessage { + new_state_commitment, + groth16_proof: None, + plonk_proof: Some(proof), + }, + &[], + ) + } + + #[track_caller] + pub fn stop_processing(&self, app: &mut App, sender: Addr) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::StopProcessingPeriod {}, + &[], + ) + } + + #[track_caller] + pub fn process_tally( + &self, + app: &mut App, + sender: Addr, + new_tally_commitment: Uint256, + proof: Groth16ProofType, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::ProcessTally { + new_tally_commitment, + groth16_proof: Some(proof), + plonk_proof: None, + }, + &[], + ) + } + + #[track_caller] + pub fn process_tally_plonk( + &self, + app: &mut App, + sender: Addr, + new_tally_commitment: Uint256, + proof: PlonkProofType, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::ProcessTally { + new_tally_commitment, + groth16_proof: None, + plonk_proof: Some(proof), + }, + &[], + ) + } + + #[track_caller] + pub fn stop_tallying( + &self, + app: &mut App, + sender: Addr, + results: Vec, + salt: Uint256, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::StopTallyingPeriod { results, salt }, + &[], + ) + } + + // #[track_caller] + // pub fn grant(&self, app: &mut App, sender: Addr, sent: &[Coin]) -> AnyResult { + // app.execute_contract( + // sender, + // self.addr(), + // &ExecuteMsg::Grant { + // max_amount: Uint128::from(10000000000000u128), + // }, + // sent, + // ) + // } + + // #[track_caller] + // pub fn revoke(&self, app: &mut App, sender: Addr) -> AnyResult { + // app.execute_contract(sender, self.addr(), &ExecuteMsg::Revoke {}, &[]) + // } + + #[track_caller] + pub fn bond(&self, app: &mut App, sender: Addr, sent: &[Coin]) -> AnyResult { + app.execute_contract(sender, self.addr(), &ExecuteMsg::Bond {}, sent) + } + + #[track_caller] + pub fn withdraw(&self, app: &mut App, sender: Addr) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::Withdraw { amount: None }, + &[], + ) + } + + pub fn msg_length(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::GetMsgChainLength {}) + } + pub fn num_sign_up(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::GetNumSignUp {}) + } + + pub fn vote_option_map(&self, app: &App) -> StdResult> { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::VoteOptionMap {}) + } + + pub fn max_vote_options(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::MaxVoteOptions {}) + } + + pub fn get_all_result(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::GetAllResult {}) + } + + pub fn get_voting_time(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::GetVotingTime {}) + } + + pub fn get_period(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::GetPeriod {}) + } + + pub fn get_round_info(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::GetRoundInfo {}) + } + + pub fn query_total_feegrant(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::QueryTotalFeeGrant {}) + } + + pub fn query_is_whitelist( + &self, + app: &App, + pubkey: PubKey, + amount: Uint256, + certificate: String, + ) -> StdResult { + app.wrap().query_wasm_smart( + self.addr(), + &QueryMsg::IsWhiteList { + pubkey, + amount, + certificate, + }, + ) + } + + pub fn query_white_balance_of( + &self, + app: &App, + pubkey: PubKey, + amount: Uint256, + certificate: String, + ) -> StdResult { + app.wrap().query_wasm_smart( + self.addr(), + &QueryMsg::WhiteBalanceOf { + pubkey, + amount, + certificate, + }, + ) + } + + pub fn query_white_info(&self, app: &App, pubkey: PubKey) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::WhiteInfo { pubkey }) + } + + pub fn query_oracle_whitelist_config(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::QueryOracleWhitelistConfig {}) + } + + pub fn query_circuit_type(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::QueryCircuitType {}) + } + + pub fn query_cert_system(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::QueryCertSystem {}) + } +} + +impl From for MaciContract { + fn from(value: Addr) -> Self { + Self(value) + } +} + +pub fn user1() -> Addr { + Addr::unchecked("0") +} + +pub fn user2() -> Addr { + Addr::unchecked("1") +} + +pub fn user3() -> Addr { + Addr::unchecked("2") +} + +pub fn owner() -> Addr { + Addr::unchecked("dora1qdagdkg9me4253h9qyvx83sd4gpta6rzh2fa0j") +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct Certificate { + pub certificate: String, + pub amount: Uint256, +} + +pub fn match_user_certificate(index: usize) -> Certificate { + match index { + 0 => user1_certificate(), + 1 => user2_certificate(), + _ => panic!("Invalid index"), + } +} + +// Generate test certificate for a specific pubkey and amount +pub fn generate_test_certificate_for_pubkey(pubkey: &PubKey, amount: Uint256) -> String { + // For testing purposes, we generate a deterministic certificate based on pubkey + // In real implementation, this would be signed by the oracle backend + use sha2::{Digest, Sha256}; + + let payload = format!("test_cert_{}_{}", pubkey.x, pubkey.y); + let hash = Sha256::digest(payload.as_bytes()); + BASE64_STANDARD.encode(&hash[0..32]) // Use first 32 bytes as mock certificate +} + +// Updated certificates for pubkey-based authentication using test data +pub fn user1_certificate() -> Certificate { + // Using pubkey from logs.json[0], updated balance for sufficient voting power + let pubkey_x = "8446677751716569713622015905729882243875224951572887602730835165068040887285"; + let pubkey_y = "12484654491029393893324568717198080229359788322121893494118068510674758553628"; + let amount = Uint256::from_u128(100000000u128); // 100M to ensure voting power > 0 + + // let certificate = certificate_generator::generate_certificate_for_pubkey( + // "51788793381365401356776017899576520467898468617578197738183646369208722835043", // SHA256 hash of "contract0" + // pubkey_x, + // pubkey_y, + // 100000000u128 + // ); + + Certificate { + certificate: "PPZsBAo+wqBcArjPfmHGc1DF2smwW0l+NWe6/4HiUE1AUxm+gMBTP401Gw/uuTVnOpW02g3hvSIkaL47YNdbLQ==".to_string(), + amount, + } +} + +pub fn user2_certificate() -> Certificate { + // Using pubkey from logs.json[1], updated balance for sufficient voting power + let pubkey_x = "4934845797881523927654842245387640257368309434525961062601274110069416343731"; + let pubkey_y = "7218132018004361008636029786293016526331813670637191622129869640055131468762"; + let amount = Uint256::from_u128(80000000u128); // 80M to ensure voting power > 0 + + // let certificate = certificate_generator::generate_certificate_for_pubkey( + // "51788793381365401356776017899576520467898468617578197738183646369208722835043", // SHA256 hash of "contract0" + // pubkey_x, + // pubkey_y, + // 80000000u128 + // ); + + Certificate { + certificate: "k10chMVB/95/5s23vaZdrI+JBXiJ9pm06DvUwVVdpV86Xp7v3C/I9ZSUY+O9v5vv2EZNODsAwgS2TAKpqigG6A==".to_string(), + amount, + } +} + +pub fn user2_certificate_before() -> Certificate { + Certificate { + certificate: "9N+0uBmu7b2Sr2ibC0ViOQ00z7LZwrTJDZmoGit8TScDDzbjXUmOkB4hLKSnLEORX7ITYbeG9409VL3OLCZdag==".to_string(), + amount: Uint256::from_u128(100000000u128), + } +} + +pub fn user3_certificate_before() -> Certificate { + Certificate { + certificate: "9N+0uBmu7b2Sr2ibC0ViOQ00z7LZwrTJDZmoGit8TScDDzbjXUmOkB4hLKSnLEORX7ITYbeG9409VL3OLCZdag==".to_string(), + amount: Uint256::from_u128(0u128), + } +} + +pub fn whitelist_pubkey() -> String { + // Updated to use the pubkey corresponding to our test private key + // "AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ".to_string() + // "AurWMPImmkDdmse2sMILI9g0fJlOfcnxjJ1QWyFRBdXr".to_string() + "A9ekxvWjYNpnHTasS008PG+EuF2ssIkUPaDdnn8ZdzTb".to_string() +} + +pub fn whitelist_slope() -> Uint256 { + Uint256::from_u128(1000000u128) +} + +pub fn whitelist_threshold() -> Uint256 { + Uint256::from_u128(1000000u128) +} + +pub fn whitelist_voting_power_mode() -> VotingPowerMode { + VotingPowerMode::Slope +} diff --git a/contracts/api-maci/src/multitest/tests.rs b/contracts/api-maci/src/multitest/tests.rs new file mode 100644 index 0000000..920b370 --- /dev/null +++ b/contracts/api-maci/src/multitest/tests.rs @@ -0,0 +1,654 @@ +#[cfg(test)] +mod test { + use crate::error::ContractError; + use crate::msg::Groth16ProofType; + use crate::multitest::{ + create_app, match_user_certificate, owner, uint256_from_decimal_string, user2, + whitelist_slope, MaciCodeId, + }; + use crate::state::{MessageData, Period, PeriodStatus, PubKey}; + use cosmwasm_std::{Addr, Uint256}; + use cw_multi_test::next_block; + use serde::{Deserialize, Serialize}; + use serde_json; + use std::fs; + use std::io::Read; + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct MsgData { + input_hash: String, + packed_vals: String, + batch_start_hash: String, + batch_end_hash: String, + msgs: Vec>, + coord_priv_key: String, + coord_pub_key: Vec, + enc_pub_keys: Vec>, + current_state_root: String, + current_state_leaves: Vec>, + current_state_leaves_path_elements: Vec>>, + current_state_commitment: String, + current_state_salt: String, + new_state_commitment: String, + new_state_salt: String, + current_vote_weights: Vec, + current_vote_weights_path_elements: Vec>>, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct TallyData { + state_root: String, + state_salt: String, + packed_vals: String, + state_commitment: String, + current_tally_commitment: String, + new_tally_commitment: String, + input_hash: String, + state_leaf: Vec>, + state_path_elements: Vec>, + votes: Vec>, + current_results: Vec, + current_results_root_salt: String, + new_results_root_salt: String, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct ResultData { + results: Vec, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct UserPubkeyData { + pubkeys: Vec>, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct OracleMaciLogEntry { + #[serde(rename = "type")] + log_type: String, + data: serde_json::Value, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct SetStateLeafData { + leaf_idx: String, + pub_key: Vec, + balance: String, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct PublishMessageData { + message: Vec, + enc_pub_key: Vec, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct ProcessMessageData { + proof: Groth16Proof, + new_state_commitment: String, + inputs: Option>, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct ProcessTallyData { + proof: Groth16Proof, + new_tally_commitment: String, + inputs: Option>, + } + + #[derive(Debug, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] + struct StopTallyingPeriodData { + results: Vec, + salt: String, + } + + #[derive(Debug, Serialize, Deserialize)] + struct Groth16Proof { + pi_a: String, + pi_b: String, + pi_c: String, + } + + fn deserialize_data(data: &serde_json::Value) -> T { + serde_json::from_value(data.clone()).expect("Unable to deserialize data") + } + + #[test] + fn instantiate_with_voting_time_isqv_should_works() { + // Load logs from oracle-maci test data + let logs_file_path = "./src/test/maci_test/logs.json"; + let mut logs_file = fs::File::open(logs_file_path).expect("Failed to open logs file"); + let mut logs_content = String::new(); + logs_file + .read_to_string(&mut logs_content) + .expect("Failed to read logs file"); + + let logs_data: Vec = + serde_json::from_str(&logs_content).expect("Failed to parse logs JSON"); + + let pubkey_file_path = "./src/test/user_pubkey.json"; + + let mut pubkey_file = fs::File::open(pubkey_file_path).expect("Failed to open file"); + let mut pubkey_content = String::new(); + + pubkey_file + .read_to_string(&mut pubkey_content) + .expect("Failed to read file"); + let pubkey_data: UserPubkeyData = + serde_json::from_str(&pubkey_content).expect("Failed to parse JSON"); + + let mut app = create_app(); + let code_id = MaciCodeId::store_code(&mut app); + let label = "Group"; + let contract = code_id + .instantiate_with_voting_time_isqv(&mut app, owner(), label) + .unwrap(); + + let num_sign_up = contract.num_sign_up(&app).unwrap(); + assert_eq!(num_sign_up, Uint256::from_u128(0u128)); + + let vote_option_map = contract.vote_option_map(&app).unwrap(); + let max_vote_options = contract.max_vote_options(&app).unwrap(); + assert_eq!(vote_option_map, vec!["1", "2", "3", "4", "5"]); + assert_eq!(max_vote_options, Uint256::from_u128(5u128)); + + _ = contract.set_vote_option_map(&mut app, owner()); + let new_vote_option_map = contract.vote_option_map(&app).unwrap(); + assert_eq!( + new_vote_option_map, + vec![ + String::from("did_not_vote"), + String::from("yes"), + String::from("no"), + String::from("no_with_veto"), + String::from("abstain"), + ] + ); + + // Test signup before voting phase + let first_state_leaf_entry = logs_data + .iter() + .find(|entry| entry.log_type == "setStateLeaf") + .unwrap(); + let first_state_leaf_data: SetStateLeafData = + deserialize_data(&first_state_leaf_entry.data); + let test_pubkey = PubKey { + x: uint256_from_decimal_string(&first_state_leaf_data.pub_key[0]), + y: uint256_from_decimal_string(&first_state_leaf_data.pub_key[1]), + }; + + let sign_up_error = contract + .sign_up( + &mut app, + Addr::unchecked(0.to_string()), + test_pubkey.clone(), + match_user_certificate(0).amount, + match_user_certificate(0).certificate, + ) + .unwrap_err(); + assert_eq!( + ContractError::PeriodError {}, + sign_up_error.downcast().unwrap() + ); // Cannot signup before voting phase + + _ = contract.set_vote_option_map(&mut app, owner()); + + app.update_block(next_block); // Start Voting + + let set_vote_option_map_error = + contract.set_vote_option_map(&mut app, owner()).unwrap_err(); + assert_eq!( + ContractError::PeriodError {}, + set_vote_option_map_error.downcast().unwrap() + ); + + let error_start_process_in_voting = contract.start_process(&mut app, owner()).unwrap_err(); + assert_eq!( + ContractError::PeriodError {}, + error_start_process_in_voting.downcast().unwrap() + ); + assert_eq!( + Period { + status: PeriodStatus::Pending + }, + contract.get_period(&app).unwrap() + ); + + let pubkey0 = PubKey { + x: uint256_from_decimal_string(&pubkey_data.pubkeys[0][0]), + y: uint256_from_decimal_string(&pubkey_data.pubkeys[0][1]), + }; + + let pubkey1 = PubKey { + x: uint256_from_decimal_string(&pubkey_data.pubkeys[1][0]), + y: uint256_from_decimal_string(&pubkey_data.pubkeys[1][1]), + }; + + let _ = contract.sign_up( + &mut app, + Addr::unchecked("0"), + pubkey0.clone(), + match_user_certificate(0).amount, + match_user_certificate(0).certificate, + ); + + let _ = contract.sign_up( + &mut app, + Addr::unchecked("1"), + pubkey1.clone(), + match_user_certificate(1).amount, + match_user_certificate(1).certificate, + ); + + assert_eq!( + contract.num_sign_up(&app).unwrap(), + Uint256::from_u128(2u128) + ); + + // assert_eq!( + // contract.signuped(&app, pubkey0.x).unwrap(), + // Uint256::from_u128(1u128) + // ); + // assert_eq!( + // contract.signuped(&app, pubkey1.x).unwrap(), + // Uint256::from_u128(2u128) + // ); + + // Process logs data + for entry in &logs_data { + match entry.log_type.as_str() { + // "setStateLeaf" => { + // let data: SetStateLeafData = deserialize_data(&entry.data); + + // let pubkey = PubKey { + // x: uint256_from_decimal_string(&data.pub_key[0]), + // y: uint256_from_decimal_string(&data.pub_key[1]), + // }; + + // println!("pubkey: {:?}", pubkey); + + // let leaf_idx: usize = data.leaf_idx.parse().unwrap(); + + // // Sign up user + // let is_whitelist = contract + // .query_is_whitelist( + // &app, + // leaf_idx.to_string(), + // match_user_certificate(leaf_idx).amount, + // match_user_certificate(leaf_idx).certificate, + // ) + // .unwrap(); + // println!("---------- is_whitelist: {:?}", is_whitelist); + // assert_eq!(true, is_whitelist); + + // println!("---------- signup for user {} ----------", leaf_idx); + // let _ = contract.sign_up( + // &mut app, + // Addr::unchecked(leaf_idx.to_string()), + // pubkey, + // match_user_certificate(leaf_idx).amount, + // match_user_certificate(leaf_idx).certificate, + // ); + // } + "publishMessage" => { + let data: PublishMessageData = deserialize_data(&entry.data); + + let message = MessageData { + data: [ + uint256_from_decimal_string(&data.message[0]), + uint256_from_decimal_string(&data.message[1]), + uint256_from_decimal_string(&data.message[2]), + uint256_from_decimal_string(&data.message[3]), + uint256_from_decimal_string(&data.message[4]), + uint256_from_decimal_string(&data.message[5]), + uint256_from_decimal_string(&data.message[6]), + ], + }; + + let enc_pub = PubKey { + x: uint256_from_decimal_string(&data.enc_pub_key[0]), + y: uint256_from_decimal_string(&data.enc_pub_key[1]), + }; + + println!("------- publishMessage ------"); + _ = contract.publish_message(&mut app, user2(), message, enc_pub); + } + "processMessage" => { + let data: ProcessMessageData = deserialize_data(&entry.data); + + // Move to processing phase + app.update_block(next_block); // Stop Voting + + let sign_up_after_voting_end_error = contract + .sign_up( + &mut app, + Addr::unchecked(3.to_string()), + test_pubkey.clone(), + match_user_certificate(0).amount, + match_user_certificate(0).certificate, + ) + .unwrap_err(); + assert_eq!( + // Cannot signup after voting phase ends + ContractError::PeriodError {}, + sign_up_after_voting_end_error.downcast().unwrap() + ); + + app.update_block(next_block); + + _ = contract.start_process(&mut app, owner()); + assert_eq!( + Period { + status: PeriodStatus::Processing + }, + contract.get_period(&app).unwrap() + ); + + println!( + "after start process: {:?}", + contract.get_period(&app).unwrap() + ); + + let new_state_commitment = + uint256_from_decimal_string(&data.new_state_commitment); + let proof = Groth16ProofType { + a: data.proof.pi_a.clone(), + b: data.proof.pi_b.clone(), + c: data.proof.pi_c.clone(), + }; + println!("process_message proof {:?}", proof); + println!( + "process_message new state commitment {:?}", + new_state_commitment + ); + println!("------ processMessage ------"); + _ = contract + .process_message(&mut app, owner(), new_state_commitment, proof) + .unwrap(); + } + "processTally" => { + let data: ProcessTallyData = deserialize_data(&entry.data); + + _ = contract.stop_processing(&mut app, owner()); + println!( + "after stop process: {:?}", + contract.get_period(&app).unwrap() + ); + + let error_start_process_in_talling = + contract.start_process(&mut app, owner()).unwrap_err(); + assert_eq!( + ContractError::PeriodError {}, + error_start_process_in_talling.downcast().unwrap() + ); + assert_eq!( + Period { + status: PeriodStatus::Tallying + }, + contract.get_period(&app).unwrap() + ); + + let new_tally_commitment = + uint256_from_decimal_string(&data.new_tally_commitment); + + let tally_proof = Groth16ProofType { + a: data.proof.pi_a.clone(), + b: data.proof.pi_b.clone(), + c: data.proof.pi_c.clone(), + }; + + _ = contract + .process_tally(&mut app, owner(), new_tally_commitment, tally_proof) + .unwrap(); + } + "stopTallyingPeriod" => { + let data: StopTallyingPeriodData = deserialize_data(&entry.data); + + let results: Vec = data + .results + .iter() + .map(|input| uint256_from_decimal_string(input)) + .collect(); + + let salt = uint256_from_decimal_string(&data.salt); + _ = contract.stop_tallying(&mut app, owner(), results, salt); + + let all_result = contract.get_all_result(&app); + println!("all_result: {:?}", all_result); + let error_start_process = + contract.start_process(&mut app, owner()).unwrap_err(); + assert_eq!( + ContractError::PeriodError {}, + error_start_process.downcast().unwrap() + ); + + assert_eq!( + Period { + status: PeriodStatus::Ended + }, + contract.get_period(&app).unwrap() + ); + } + _ => println!("Unknown log type: {}", entry.log_type), + } + } + + // Verify final state + assert_eq!( + contract.num_sign_up(&app).unwrap(), + Uint256::from_u128(2u128) + ); + + assert_eq!( + contract.msg_length(&app).unwrap(), + Uint256::from_u128(2u128) + ); + } + + // #[test] + fn test_voting_power_calculation() { + let slope = whitelist_slope(); + + assert_eq!(slope, Uint256::from_u128(1000000u128)); + // 1 ATOM = 1 VC + assert_eq!( + Uint256::from_u128(1000000u128) / slope, + Uint256::from_u128(1u128) + ); + // 1.2 ATOM = 1 VC + assert_eq!( + Uint256::from_u128(1200000u128) / slope, + Uint256::from_u128(1u128) + ); + // 3 ATOM = 3 VC + assert_eq!( + Uint256::from_u128(3000000u128) / slope, + Uint256::from_u128(3u128) + ); + // 0.3 ATOM = 0 VC + assert_eq!( + Uint256::from_u128(300000u128) / slope, + Uint256::from_u128(0u128) + ); + // 0.9 ATOM = 0 VC + assert_eq!( + Uint256::from_u128(900000u128) / slope, + Uint256::from_u128(0u128) + ); + // 1.9 ATOM = 1 VC + assert_eq!( + Uint256::from_u128(1900000u128) / slope, + Uint256::from_u128(1u128) + ); + // 19000000000000000.099000 ATOM = 19000000000000000 VC + assert_eq!( + Uint256::from_u128(19000000000000000099000u128) / slope, + Uint256::from_u128(19000000000000000u128) + ); + assert_eq!(Uint256::from_u128(0u128) / slope, Uint256::from_u128(0u128)); + } + + #[test] + fn instantiate_with_voting_time_isqv_with_no_signup_vote_should_works() { + let msg_file_path = "./src/test/qv_test/msg.json"; + + let mut msg_file = fs::File::open(msg_file_path).expect("Failed to open file"); + let mut msg_content = String::new(); + + msg_file + .read_to_string(&mut msg_content) + .expect("Failed to read file"); + + let data: MsgData = serde_json::from_str(&msg_content).expect("Failed to parse JSON"); + + let result_file_path = "./src/test/qv_test/result.json"; + let mut result_file = fs::File::open(result_file_path).expect("Failed to open file"); + let mut result_content = String::new(); + result_file + .read_to_string(&mut result_content) + .expect("Failed to read file"); + + let tally_path = "./src/test/qv_test/tally.json"; + let mut tally_file = fs::File::open(tally_path).expect("Failed to open file"); + let mut tally_content = String::new(); + tally_file + .read_to_string(&mut tally_content) + .expect("Failed to read file"); + + let tally_data: TallyData = + serde_json::from_str(&tally_content).expect("Failed to parse JSON"); + + let pubkey_file_path = "./src/test/user_pubkey.json"; + + let mut pubkey_file = fs::File::open(pubkey_file_path).expect("Failed to open file"); + let mut pubkey_content = String::new(); + + pubkey_file + .read_to_string(&mut pubkey_content) + .expect("Failed to read file"); + + let mut app = create_app(); + let code_id = MaciCodeId::store_code(&mut app); + let label = "Group"; + + let create_contract_with_wrong_circuit_type = code_id + .instantiate_with_wrong_circuit_type(&mut app, owner(), label) + .unwrap_err(); + assert_eq!( + ContractError::UnsupportedCircuitType {}, + create_contract_with_wrong_circuit_type.downcast().unwrap() + ); + + let contract = code_id + .instantiate_with_voting_time_isqv(&mut app, owner(), label) + .unwrap(); + + // assert_eq!( + // ContractError::AlreadySetVotingTime { + // time_name: String::from("start_time") + // }, + // start_voting_error.downcast().unwrap() + // ); + + let num_sign_up = contract.num_sign_up(&app).unwrap(); + assert_eq!(num_sign_up, Uint256::from_u128(0u128)); + + let vote_option_map = contract.vote_option_map(&app).unwrap(); + let max_vote_options = contract.max_vote_options(&app).unwrap(); + assert_eq!(vote_option_map, vec!["1", "2", "3", "4", "5"]); + assert_eq!(max_vote_options, Uint256::from_u128(5u128)); + _ = contract.set_vote_option_map(&mut app, owner()); + let new_vote_option_map = contract.vote_option_map(&app).unwrap(); + assert_eq!( + new_vote_option_map, + vec![ + String::from("did_not_vote"), + String::from("yes"), + String::from("no"), + String::from("no_with_veto"), + String::from("abstain"), + ] + ); + // assert_eq!(num_sign_up, Uint256::from_u128(0u128)); + + let test_pubkey = PubKey { + x: uint256_from_decimal_string(&data.current_state_leaves[0][0]), + y: uint256_from_decimal_string(&data.current_state_leaves[0][1]), + }; + let sign_up_error = contract + .sign_up( + &mut app, + Addr::unchecked(0.to_string()), + test_pubkey.clone(), + match_user_certificate(0).amount, + match_user_certificate(0).certificate, + ) + .unwrap_err(); + assert_eq!( + ContractError::PeriodError {}, + sign_up_error.downcast().unwrap() + ); // Cannot signup before voting phase + + _ = contract.set_vote_option_map(&mut app, owner()); + + app.update_block(next_block); // Start Voting + let set_vote_option_map_error = + contract.set_vote_option_map(&mut app, owner()).unwrap_err(); + assert_eq!( + ContractError::PeriodError {}, + set_vote_option_map_error.downcast().unwrap() + ); + + let error_start_process_in_voting = contract.start_process(&mut app, owner()).unwrap_err(); + assert_eq!( + ContractError::PeriodError {}, + error_start_process_in_voting.downcast().unwrap() + ); + assert_eq!( + Period { + status: PeriodStatus::Pending + }, + contract.get_period(&app).unwrap() + ); + + // Stop Voting Period + app.update_block(next_block); + let results = vec![ + Uint256::from_u128(0u128), + Uint256::from_u128(0u128), + Uint256::from_u128(0u128), + Uint256::from_u128(0u128), + Uint256::from_u128(0u128), + ]; + let salt = uint256_from_decimal_string(&tally_data.new_results_root_salt); + _ = contract.start_process(&mut app, owner()); + _ = contract.stop_processing(&mut app, owner()); + _ = contract.stop_tallying(&mut app, owner(), results, salt); + let all_result = contract.get_all_result(&app); + println!("all_result: {:?}", all_result); + let end_period = contract.get_period(&app).unwrap(); + println!("end_period: {:?}", end_period); + // let error_start_process = contract.start_process(&mut app, owner()).unwrap_err(); + // assert_eq!( + // ContractError::PeriodError {}, + // error_start_process.downcast().unwrap() + // ); + + assert_eq!( + Period { + status: PeriodStatus::Ended + }, + contract.get_period(&app).unwrap() + ); + } +} diff --git a/contracts/api-maci/src/plonk_parser.rs b/contracts/api-maci/src/plonk_parser.rs new file mode 100644 index 0000000..36a5921 --- /dev/null +++ b/contracts/api-maci/src/plonk_parser.rs @@ -0,0 +1,269 @@ +use super::error::ContractError; +use crate::state::{PlonkProofStr, PlonkVkeyStr}; +use bellman_ce::plonk::better_cs::cs::PlonkConstraintSystemParams; +use bellman_ce::plonk::better_cs::keys::{Proof, VerificationKey}; +use cosmwasm_std::ensure; +use ff_ce::from_hex; +use pairing_ce::bn256::{G1Affine, G1Uncompressed, G2Affine, G2Uncompressed}; +use pairing_ce::{CurveAffine, EncodedPoint, Engine}; + +/// convert the proof into the Affine/Fr type, which will be used to verify +pub fn parse_plonk_proof(pof: PlonkProofStr) -> Result, ContractError> +where + E: Engine, + P: PlonkConstraintSystemParams, +{ + let num_inputs = pof.num_inputs; + let n = pof.n; + // String -> Fr + let input_values = pof.input_values; + // Vec -> Uncompressed -> G1Affine + let wire_commitments = pof.wire_commitments; + // Vec -> Uncompressed -> G1Affine + let grand_product_commitment = pof.grand_product_commitment; + // Vec -> Uncompressed -> G1Affine + let quotient_poly_commitments = pof.quotient_poly_commitments; + + // String -> Fr + let wire_values_at_z = pof.wire_values_at_z; + // String -> Fr + let wire_values_at_z_omega = pof.wire_values_at_z_omega; + // String -> Fr + let grand_product_at_z_omega = pof.grand_product_at_z_omega; + // String -> Fr + let quotient_polynomial_at_z = pof.quotient_polynomial_at_z; + // String -> Fr + let linearization_polynomial_at_z = pof.linearization_polynomial_at_z; + // String -> Fr + let permutation_polynomials_at_z = pof.permutation_polynomials_at_z; + // Vec -> Uncompressed -> G1Affine + let opening_at_z_proof = pof.opening_at_z_proof; + // Vec -> Uncompressed -> G1Affine + let opening_at_z_omega_proof = pof.opening_at_z_omega_proof; + + // ensure the format of proof is correct! + ensure!( + wire_commitments + .iter() + .all(|inner_vec| inner_vec.len() == 64), + ContractError::ErrorProof {} + ); + ensure!( + grand_product_commitment.len() == 64, + ContractError::ErrorProof {} + ); + ensure!( + quotient_poly_commitments + .iter() + .all(|inner_vec| inner_vec.len() == 64), + ContractError::ErrorProof {} + ); + ensure!(opening_at_z_proof.len() == 64, ContractError::ErrorProof {}); + ensure!( + opening_at_z_omega_proof.len() == 64, + ContractError::ErrorProof {} + ); + + // start transform the Affine type + // let mut wire_commitments_affine: Vec = Vec::new(); + let mut grand_product_commitment_arr: [u8; 64] = [0; 64]; + // let mut quotient_poly_commitments_affine: Vec = Vec::new(); + let mut opening_at_z_proof_arr: [u8; 64] = [0; 64]; + let mut opening_at_z_omega_proof_arr: [u8; 64] = [0; 64]; + + let wire_commitments_affine_res: Result, ContractError> = wire_commitments + .into_iter() + .map(|inner_vec| { + let mut array = [0; 64]; + array[..inner_vec.len()].copy_from_slice(&inner_vec[..]); + G1Uncompressed::from_fixed_bytes(array) + .into_affine() + .map_err(|_| ContractError::ErrorProof {}) + }) + .collect(); + let wire_commitments_affine = wire_commitments_affine_res?; + + grand_product_commitment_arr[..grand_product_commitment.len()] + .copy_from_slice(&grand_product_commitment[..]); + + let quotient_poly_commitments_res: Result, ContractError> = + quotient_poly_commitments + .into_iter() + .map(|inner_vec| { + let mut array = [0; 64]; + array[..inner_vec.len()].copy_from_slice(&inner_vec[..]); + G1Uncompressed::from_fixed_bytes(array) + .into_affine() + .map_err(|_| ContractError::ErrorProof {}) + }) + .collect(); + let quotient_poly_commitments_affine = quotient_poly_commitments_res?; + + opening_at_z_proof_arr[..opening_at_z_proof.len()].copy_from_slice(&opening_at_z_proof[..]); + opening_at_z_omega_proof_arr[..opening_at_z_omega_proof.len()] + .copy_from_slice(&opening_at_z_omega_proof[..]); + + let grand_product_commitment_affine = + G1Uncompressed::from_fixed_bytes(grand_product_commitment_arr) + .into_affine() + .map_err(|_| ContractError::ErrorProof {})?; + + let opening_at_z_proof_affine = G1Uncompressed::from_fixed_bytes(opening_at_z_proof_arr) + .into_affine() + .map_err(|_| ContractError::ErrorProof {})?; + + let opening_at_z_omega_proof_affine = + G1Uncompressed::from_fixed_bytes(opening_at_z_omega_proof_arr) + .into_affine() + .map_err(|_| ContractError::ErrorProof {})?; + + // start transform the Prime Field type + let wire_values_at_z_res: Result, ContractError> = wire_values_at_z + .into_iter() + .map(|x| from_hex(&x).map_err(|_| ContractError::InvalidPrimeField {})) + .collect(); + + // transform end + + // return the proof + let mut final_proof = Proof::empty(); + final_proof.num_inputs = num_inputs; + final_proof.n = n; + final_proof.input_values = input_values + .into_iter() + .map(|x| from_hex(&x).unwrap()) + .collect(); + final_proof.wire_commitments = wire_commitments_affine; + final_proof.grand_product_commitment = grand_product_commitment_affine; + final_proof.quotient_poly_commitments = quotient_poly_commitments_affine; + + final_proof.wire_values_at_z = wire_values_at_z_res?; + final_proof.wire_values_at_z_omega = wire_values_at_z_omega + .into_iter() + .map(|x| from_hex(&x).unwrap()) + .collect(); + final_proof.grand_product_at_z_omega = from_hex(&grand_product_at_z_omega).unwrap(); + final_proof.quotient_polynomial_at_z = from_hex("ient_polynomial_at_z).unwrap(); + final_proof.linearization_polynomial_at_z = from_hex(&linearization_polynomial_at_z).unwrap(); + final_proof.permutation_polynomials_at_z = permutation_polynomials_at_z + .into_iter() + .map(|x| from_hex(&x).unwrap()) + .collect(); + + final_proof.opening_at_z_proof = opening_at_z_proof_affine; + final_proof.opening_at_z_omega_proof = opening_at_z_omega_proof_affine; + + Ok(final_proof) +} + +/// convert the verification key into the affine type, which will be used in verification +pub fn parse_plonk_vkey(vk: PlonkVkeyStr) -> Result, ContractError> +where + E: Engine, + P: PlonkConstraintSystemParams, +{ + let n = vk.n; + let num_inputs = vk.num_inputs; + let selector_commitments = vk.selector_commitments; + let next_step_selector_commitments = vk.next_step_selector_commitments; + let permutation_commitments = vk.permutation_commitments; + + let non_residues = vk.non_residues; + let g2_elements = vk.g2_elements; + + ensure!( + selector_commitments + .iter() + .all(|inner_vec| inner_vec.len() == 64), + ContractError::ErrorVerificationKey {} + ); + ensure!( + next_step_selector_commitments + .iter() + .all(|inner_vec| inner_vec.len() == 64), + ContractError::ErrorVerificationKey {} + ); + ensure!( + permutation_commitments + .iter() + .all(|inner_vec| inner_vec.len() == 64), + ContractError::ErrorVerificationKey {} + ); + ensure!( + g2_elements.iter().all(|inner_vec| inner_vec.len() == 128), + ContractError::ErrorVerificationKey {} + ); + + // let mut selector_commitments_affine: Vec = Vec::new(); + // let mut next_step_selector_commitments_affine: Vec = Vec::new(); + // let mut permutation_commitments_affine: Vec = Vec::new(); + // let mut g2_elements_affine: Vec = Vec::new(); + + let selector_commitments_res: Result, ContractError> = selector_commitments + .into_iter() + .map(|inner_vec| { + let mut array = [0; 64]; + array[..inner_vec.len()].copy_from_slice(&inner_vec[..]); + G1Uncompressed::from_fixed_bytes(array) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {}) + }) + .collect(); + let selector_commitments_affine = selector_commitments_res?; + + let next_step_selector_commitments_res: Result, ContractError> = + next_step_selector_commitments + .into_iter() + .map(|inner_vec| { + let mut array = [0; 64]; + array[..inner_vec.len()].copy_from_slice(&inner_vec[..]); + G1Uncompressed::from_fixed_bytes(array) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {}) + }) + .collect(); + let next_step_selector_commitments_affine = next_step_selector_commitments_res?; + + let permutation_commitments_res: Result, ContractError> = + permutation_commitments + .into_iter() + .map(|inner_vec| { + let mut array = [0; 64]; + array[..inner_vec.len()].copy_from_slice(&inner_vec[..]); + G1Uncompressed::from_fixed_bytes(array) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {}) + }) + .collect(); + let permutation_commitments_affine = permutation_commitments_res?; + + let g2_elements_res: Result, ContractError> = g2_elements + .into_iter() + .map(|inner_vec| { + let mut array = [0; 128]; + array[..inner_vec.len()].copy_from_slice(&inner_vec[..]); + G2Uncompressed::from_fixed_bytes(array) + .into_affine() + .map_err(|_| ContractError::ErrorVerificationKey {}) + }) + .collect(); + let g2_elements_affine = g2_elements_res?; + + let mut g2_elements_affine_arr: [E::G2Affine; 2] = [E::G2Affine::zero(); 2]; + g2_elements_affine_arr[..g2_elements_affine.len()].copy_from_slice(&g2_elements_affine[..]); + + // return verification key + Ok(VerificationKey { + n, + num_inputs, + selector_commitments: selector_commitments_affine, + next_step_selector_commitments: next_step_selector_commitments_affine, + permutation_commitments: permutation_commitments_affine, + non_residues: non_residues + .into_iter() + .map(|x| from_hex(&x).unwrap()) + .collect(), + g2_elements: g2_elements_affine_arr, + _marker: std::marker::PhantomData, + }) +} diff --git a/contracts/api-maci/src/state.rs b/contracts/api-maci/src/state.rs new file mode 100644 index 0000000..2452c57 --- /dev/null +++ b/contracts/api-maci/src/state.rs @@ -0,0 +1,318 @@ +use crate::utils::hash5; +use cosmwasm_schema::cw_serde; +use cosmwasm_std::{Addr, Binary, Timestamp, Uint128, Uint256}; +use cw_storage_plus::{Item, Map}; + +#[cw_serde] +pub struct RoundInfo { + pub title: String, + pub description: String, + pub link: String, +} + +pub const ROUNDINFO: Item = Item::new("round_info"); + +#[cw_serde] +pub struct VotingTime { + pub start_time: Timestamp, + pub end_time: Timestamp, +} + +pub const VOTINGTIME: Item = Item::new("voting_time"); + +pub const VOTEOPTIONMAP: Item> = Item::new("vote_option_map"); + +#[cw_serde] +pub struct Admin { + pub admin: Addr, +} + +impl Admin { + pub fn is_admin(&self, addr: impl AsRef) -> bool { + let addr = addr.as_ref(); + self.admin.as_ref() == addr + } +} + +#[cw_serde] +pub enum PeriodStatus { + Pending, + Voting, + Processing, + Tallying, + Ended, +} + +#[cw_serde] +pub struct Period { + pub status: PeriodStatus, +} + +#[cw_serde] +pub struct MaciParameters { + pub state_tree_depth: Uint256, + pub int_state_tree_depth: Uint256, + pub message_batch_size: Uint256, + pub vote_option_tree_depth: Uint256, +} + +pub const STATEIDXINC: Map<&Addr, Uint256> = Map::new("state_idx_inc"); + +pub const ADMIN: Item = Item::new("admin"); +pub const PERIOD: Item = Item::new("period"); +pub const MACIPARAMETERS: Item = Item::new("maci_param"); + +pub const MACI_OPERATOR: Item = Item::new("maci_operator"); + +// the num of signup, the state_key is signupnums. +pub const NUMSIGNUPS: Item = Item::new("num_sign_ups"); + +// key is state_key, value is sender balance +pub const VOICECREDITBALANCE: Map, Uint256> = Map::new("voice_credit_balance"); + +pub const NODES: Map, Uint256> = Map::new("nodes"); + +pub const MAX_VOTE_OPTIONS: Item = Item::new("max_vote_options"); +pub const CURRENT_STATE_COMMITMENT: Item = Item::new("current_state_commitment"); +pub const CURRENT_TALLY_COMMITMENT: Item = Item::new("current_tally_commitment"); + +pub const RESULT: Map, Uint256> = Map::new("voice_credit_balance"); +pub const TOTAL_RESULT: Item = Item::new("total_result"); + +#[cw_serde] +pub struct PubKey { + pub x: Uint256, + pub y: Uint256, +} + +#[cw_serde] +pub struct StateLeaf { + pub pub_key: PubKey, + pub voice_credit_balance: Uint256, + pub vote_option_tree_root: Uint256, + pub nonce: Uint256, +} + +impl StateLeaf { + pub fn hash_state_leaf(&self) -> Uint256 { + let mut plaintext: [Uint256; 5] = [Uint256::from_u128(0); 5]; + + plaintext[0] = self.pub_key.x; + plaintext[1] = self.pub_key.y; + plaintext[2] = self.voice_credit_balance; + plaintext[3] = self.vote_option_tree_root; + plaintext[4] = self.nonce; + return hash5(plaintext); + } +} + +// Init Data +pub const MAX_LEAVES_COUNT: Item = Item::new("max_leaves_count"); +pub const LEAF_IDX_0: Item = Item::new("leaf_idx_0"); +pub const COORDINATORHASH: Item = Item::new("coordinator_hash"); +pub const ZEROS: Item<[Uint256; 10]> = Item::new("zeros"); + +#[cw_serde] +pub struct MessageData { + pub data: [Uint256; 7], +} + +pub const MSG_HASHES: Map, Uint256> = Map::new("msg_hashes"); +// pub const MSG_HASHES: Item> = Item::new("msg_hashes"); +pub const MSG_CHAIN_LENGTH: Item = Item::new("msg_chain_length"); +pub const PROCESSED_MSG_COUNT: Item = Item::new("processed_msg_count"); +pub const PROCESSED_USER_COUNT: Item = Item::new("processed_user_count"); + +// Storage for tracking used enc_pub_keys to ensure uniqueness +pub const USED_ENC_PUB_KEYS: Map, bool> = Map::new("used_enc_pub_keys"); + +#[cw_serde] +pub struct Groth16ProofStr { + pub pi_a: Vec, + pub pi_b: Vec, + pub pi_c: Vec, +} + +#[cw_serde] +pub struct QuinaryTreeRoot { + pub zeros: [Uint256; 9], +} + +impl QuinaryTreeRoot { + const DEGREE: u32 = 5; + + pub fn root_of(&self, depth: Uint256, nodes: Vec) -> Uint256 { + let _depth = depth.to_string().parse().unwrap(); + let capacity = Self::DEGREE.pow(_depth); + let length = nodes.len() as u32; + + assert!(capacity >= length, "overflow"); + + let mut c = capacity / Self::DEGREE; + let mut pl = (length - 1) / Self::DEGREE + 1; + let mut _nodes = nodes; + + for i in 0.._depth { + let zero = self.get_zero(i); + // number of non-zero parent nodes + for j in 0..c { + if j >= length { + continue; + } + let mut h = Uint256::zero(); + if j < pl { + let mut inputs = [Uint256::zero(); 5]; + let mut s = Uint256::zero(); + for k in 0..5 { + let node = if j * 5 + k < length { + _nodes[(j * 5 + k) as usize] + } else { + Uint256::zero() + }; + s += node; + let mut input = node; + if node == Uint256::zero() { + input = zero; + } + inputs[k as usize] = input; + } + if s > Uint256::zero() { + h = hash5(inputs); + } + } + _nodes[j as usize] = h; + } + + pl = (pl - 1) / Self::DEGREE + 1; + c = c / Self::DEGREE; + } + + let mut result = _nodes[0]; + if result == Uint256::zero() { + result = self.get_zero(_depth); + } + result + } + + fn get_zero(&self, height: u32) -> Uint256 { + self.zeros[height as usize] + } +} + +pub const QTR_LIB: Item = Item::new("qtr_lib"); + +#[cw_serde] +pub struct WhitelistConfig { + pub balance: Uint256, + pub is_register: bool, +} + +impl WhitelistConfig { + pub fn register(&mut self) { + self.is_register = true; + self.balance = Uint256::from_u128(0u128); + } + + pub fn balance_of(&self) -> Uint256 { + return self.balance; + } +} + +// (x, y) - whitelist_config +pub const WHITELIST: Map<&(Vec, Vec), WhitelistConfig> = Map::new("whitelist"); + +pub const MAX_WHITELIST_NUM: Item = Item::new("max_whitelist_num"); + +pub const FEEGRANTS: Item = Item::new("fee_grants"); + +pub const CIRCUITTYPE: Item = Item::new("circuit_type"); // <0: 1p1v | 1: pv> + +pub const CERTSYSTEM: Item = Item::new("certification_system"); // <0: groth16 | 1: plonk> + +#[cw_serde] +pub struct PlonkProofStr { + pub num_inputs: usize, + pub n: usize, + pub input_values: Vec, + pub wire_commitments: Vec>, + pub grand_product_commitment: Vec, + pub quotient_poly_commitments: Vec>, + pub wire_values_at_z: Vec, + pub wire_values_at_z_omega: Vec, + pub grand_product_at_z_omega: String, + pub quotient_polynomial_at_z: String, + pub linearization_polynomial_at_z: String, + pub permutation_polynomials_at_z: Vec, + pub opening_at_z_proof: Vec, + pub opening_at_z_omega_proof: Vec, +} + +#[cw_serde] +pub struct Groth16VkeyStr { + pub alpha_1: Vec, + pub beta_2: Vec, + pub gamma_2: Vec, + pub delta_2: Vec, + pub ic0: Vec, + pub ic1: Vec, +} + +pub const GROTH16_PROCESS_VKEYS: Item = Item::new("groth16_process_vkeys"); +pub const GROTH16_TALLY_VKEYS: Item = Item::new("groth16_tally_vkeys"); + +#[cw_serde] +pub struct PlonkVkeyStr { + pub n: usize, + pub num_inputs: usize, + pub selector_commitments: Vec>, + pub next_step_selector_commitments: Vec>, + pub permutation_commitments: Vec>, + pub non_residues: Vec, + pub g2_elements: Vec>, +} + +pub const PLONK_PROCESS_VKEYS: Item = Item::new("plonk_process_vkeys"); +pub const PLONK_TALLY_VKEYS: Item = Item::new("plonk_tally_vkeys"); + +// pub const WHITELIST_BACKEND_PUBKEY: Item = Item::new("whitelist_backend_pubkey"); + +#[cw_serde] +pub enum VotingPowerMode { + Slope, // amount/slope + Threshold, +} + +#[cw_serde] +pub struct VotingPowerConfig { + pub mode: VotingPowerMode, + pub slope: Uint256, + pub threshold: Uint256, +} + +#[cw_serde] +pub struct OracleWhitelistConfig { + pub backend_pubkey: Binary, + pub slope: Uint256, + pub voting_power_mode: VotingPowerMode, + pub threshold: Uint256, +} + +pub const ORACLE_WHITELIST_CONFIG: Item = + Item::new("oracle_whitelist_config"); + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn is_admin() { + let alice: Addr = Addr::unchecked("alice"); + + let config: Admin = Admin { + admin: alice.clone(), + }; + + assert!(config.is_admin(alice.as_ref())); + assert!(!config.is_admin("other")); + } +} diff --git a/contracts/api-maci/src/test/maci_test/logs.json b/contracts/api-maci/src/test/maci_test/logs.json new file mode 100644 index 0000000..ca2ba9f --- /dev/null +++ b/contracts/api-maci/src/test/maci_test/logs.json @@ -0,0 +1,109 @@ +[ + { + "type": "setStateLeaf", + "data": { + "leafIdx": "0", + "pubKey": [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628" + ], + "balance": "100" + } + }, + { + "type": "setStateLeaf", + "data": { + "leafIdx": "1", + "pubKey": [ + "4934845797881523927654842245387640257368309434525961062601274110069416343731", + "7218132018004361008636029786293016526331813670637191622129869640055131468762" + ], + "balance": "80" + } + }, + { + "type": "publishMessage", + "data": { + "message": [ + "12464466727380559741327029120716347565653310313122317593953831970533744605627", + "21756441382307499802075883466410791472157330940626781651729753858169806666424", + "16969575794768092744384541035544740469107350730057435369856614212872736197087", + "16038971449898954635942488911301105372692708397340114918494689090174793408952", + "3207363966359550576701204915463960571774523853770414374676547561347569820359", + "1760426918687507306042914654935040621385847786827552551536666902326549151695", + "1074306672181252112954654618691687253344960864381862543331745597392985918319" + ], + "encPubKey": [ + "7169482574855732726427143738152492655331222726959638442902625038852449210076", + "18313605050567479150590532619972444964205796585191616809522388018889233970802" + ] + } + }, + { + "type": "publishMessage", + "data": { + "message": [ + "7747057591006694283771094080223466992944268528068312216861441927928950648951", + "1374870552621103553735333821623525526523844623867282182940216246442447370050", + "631914068110666879653725520519863712456103275852095285385086540399526890721", + "2469357429252276020803375158952912526236347359578227619572471852110424295985", + "18839624644094223213980462164845451892198817142066205663800590623373378290652", + "10768636618586653342601457174060277012793524266335058842751242893306575613488", + "8190502902621556400741519971821232898709603303589756914026105482912877222610" + ], + "encPubKey": [ + "13895891042223842984354082723295984532606901725635480661500868013041641776581", + "2455124196163095292891166406953801607702028315118548277145952282806422267751" + ] + } + }, + { + "type": "processMessage", + "data": { + "proof": { + "pi_a": "19e884d8bd9ab7b19a2c1d663f34ccfa5a98f59659de76338beeff0393c32b142659723e1e2661bccfb72abb67d454142549b556d4db8c4c66415c9f03eb70aa", + "pi_b": "06111b895d60cf8f049cf280527be4a57847933c63e062ab90ab225dd6dfef1a2e564481b39d59c9cc5aae80499a2a267b04fe29a9a2ff5d9dfbf4f29e91bfda303e60c7a46e20c8ec0362f66b1bde6b9931c57d0dd6ba520a148a0e03836a12122861e5dce44b00009c0d2774d4e1eb6f136792907489c09531414bb22f2bad", + "pi_c": "12886aa8f14143168b5a4c69c0dcca5782d1f57e86a75534a42f5607f7013bc104cd5ad8291a6e1c39f3ac7d2a593a468d5727bdde2558cb7ddb540c75174d8c" + }, + "newStateCommitment": "7225056170599617553330908015819942927714044038954730568251878127179569735626" + }, + "inputs": [ + "18446744082299486213", + "15122908335192368732236570545687839208553490155232399121857519560609180777637", + "0", + "15061700491085686259787417249842834146889421002637323483928258139938722574405", + "21652674250848744330319584314183410486313485141843731604892491492196983334654", + "7225056170599617553330908015819942927714044038954730568251878127179569735626" + ] + }, + { + "type": "processTally", + "data": { + "proof": { + "pi_a": "142285956e591c47199fae0fa241a01697027b45b5cb84174b5e9312e126dffd01821beb016e7814e22c5db7b3fe8ac7dde03b5561bac031864254f3d0ccdc8a", + "pi_b": "009c3c292aa17440c5a1f1c4d32c2cd82cef5334e93b838ee64fc917e4118f38169ffc756715b242bd1fad597223075c6b06ac89ec3a4d9432a0a99fb9fea23f2844df35d6c0e36e4ea0e587516f183b8b6d75510fa62ae4eb029ff60b39ea401b7746c8e53cc15d6e75806fd28ebd64fa517995dadecbee2090fadb59c94b5e", + "pi_c": "18c951b8563cc4371eb60bddce8ff67d921af5f6599139c04bd27a2b7977ab5d17182a48892984c8aa1528b1acb9413d5d06f47edb3f03537e5f77fdc2dbd476" + }, + "newTallyCommitment": "19802076887605027034527456036250028832040875021449102309012199492936519436540" + }, + "inputs": [ + "8589934592", + "7225056170599617553330908015819942927714044038954730568251878127179569735626", + "0", + "19802076887605027034527456036250028832040875021449102309012199492936519436540" + ] + }, + { + "type": "stopTallyingPeriod", + "data": { + "results": [ + "0", + "8000000000000000000000064", + "6000000000000000000000036", + "0", + "0" + ], + "salt": "2961250743393476131623529099202558292323387115319942857997324320358601709618" + } + } +] diff --git a/contracts/api-maci/src/test/msg_test.json b/contracts/api-maci/src/test/msg_test.json new file mode 100644 index 0000000..049ddac --- /dev/null +++ b/contracts/api-maci/src/test/msg_test.json @@ -0,0 +1,243 @@ +{ + "inputHash": "14651436519002305691774557930777860511784778269129905811137167505766285495771", + "packedVals": "8589934597", + "batchStartHash": "0", + "batchEndHash": "2806393043795941555460875661453750929773752821171436852821298017638863319962", + "msgs": [ + [ + "12464466727380559741327029120716347565653310312805404943915221364233278355900", + "21756441382307499802075883466410791472157330940626781651729753858169806666424", + "16969575794768092744384541035544740469107350730057435369856614212872736197087", + "21106921111328932602220561288958073500538147520872081228867170491702777820919", + "14247661340753952303912914431542420007228355835757020038580415480350873616819", + "1913470981312317779087601088668868709201150623028133851357692554008495433683", + "5278987120186068145861189009145856833865800618239583715075012754431163754428" + ], + [ + "11595320132863457586416679934298203690085656835845107075309505316952855316091", + "13361013576988023762737230888849686331292693448179482733681417441488583791458", + "19334231874417936920373206667743968732111079944305074391336368778070483916700", + "13066997071728447881198118575843939658697378417140786780555780293235058313809", + "21748243383585930121267829337068672152331355859557319216005146741088078177776", + "4729857991097679142531555530778775359869066124489215723560961928063868892509", + "10577601991872490569510439890156265728720234335184061751849281340511337992941" + ], + [ + "7747057591006694283771094080223466992944268528068312216842995183850946130039", + "4886702506456149339702507481965767513030760140914208723069777301441071913604", + "5898436541135699764342264451424927415484077927336797157373285411019153975587", + "16839385201759245723654222260362256486118232187059679573616214581881705575844", + "6305158418300175869186849543393007704046294930541539672291219984407035712351", + "3675391087989231470068462116066166900798151940813975689767133444816956154867", + "19995633826572539362478368778049668087181497436133879932396932065650004213216" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ] + ], + "coordPrivKey": "6310661511279165105169780416448368158568408309735512101164896326904417294766", + "coordPubKey": [ + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + "4363822302427519764561660537570341277214758164895027920046745209970137856681" + ], + "encPubKeys": [ + [ + "7169482574855732726427143738152492655331222726959638442902625038852449210076", + "18313605050567479150590532619972444964205796585191616809522388018889233970802" + ], + [ + "5256799541456598402918482992442121299298063071517271647164800069329014249835", + "11186376155642197318025761393908801092451283308218533272869916765747906183435" + ], + [ + "13895891042223842984354082723295984532606901725635480661500868013041641776581", + "2455124196163095292891166406953801607702028315118548277145952282806422267751" + ], + [ + "0", + "0" + ], + [ + "0", + "0" + ] + ], + "currentStateRoot": "23497257039248226627100051681980129488805559380200297564116493861623124041", + "currentStateLeaves": [ + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "94", + "1112907789366310788273677943438906826288638856578263778624705486384839564986", + "1" + ], + [ + "4934845797881523927654842245387640257368309434525961062601274110069416343731", + "7218132018004361008636029786293016526331813670637191622129869640055131468762", + "80", + "0", + "0" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ] + ], + "currentStateLeavesPathElements": [ + [ + [ + "18580219913978378659515413019638819787107247455473307233464668909013811520153", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "20656366419936271335085265592254274896226005128010665303302123173161901839249", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ] + ], + "currentStateCommitment": "21652674250848744330319584314183410486313485141843731604892491492196983334654", + "currentStateSalt": "0", + "newStateCommitment": "1754580529630222025942951861769060631888758322071773541679673721401306995000", + "newStateSalt": "1234567890", + "currentVoteWeights": [ + "0", + "0", + "0", + "0", + "0" + ], + "currentVoteWeightsPathElements": [ + [ + [ + "0", + "6", + "0", + "0" + ] + ], + [ + [ + "0", + "0", + "0", + "0" + ] + ], + [ + [ + "0", + "0", + "0", + "0" + ] + ], + [ + [ + "0", + "0", + "0", + "0" + ] + ], + [ + [ + "0", + "0", + "0", + "0" + ] + ] + ] +} diff --git a/contracts/api-maci/src/test/plonk_test/msg.json b/contracts/api-maci/src/test/plonk_test/msg.json new file mode 100644 index 0000000..029b37c --- /dev/null +++ b/contracts/api-maci/src/test/plonk_test/msg.json @@ -0,0 +1,180 @@ +{ + "inputHash": "14651436519002305691774557930777860511784778269129905811137167505766285495771", + "packedVals": "8589934597", + "batchStartHash": "0", + "batchEndHash": "2806393043795941555460875661453750929773752821171436852821298017638863319962", + "msgs": [ + [ + "12464466727380559741327029120716347565653310312805404943915221364233278355900", + "21756441382307499802075883466410791472157330940626781651729753858169806666424", + "16969575794768092744384541035544740469107350730057435369856614212872736197087", + "21106921111328932602220561288958073500538147520872081228867170491702777820919", + "14247661340753952303912914431542420007228355835757020038580415480350873616819", + "1913470981312317779087601088668868709201150623028133851357692554008495433683", + "5278987120186068145861189009145856833865800618239583715075012754431163754428" + ], + [ + "11595320132863457586416679934298203690085656835845107075309505316952855316091", + "13361013576988023762737230888849686331292693448179482733681417441488583791458", + "19334231874417936920373206667743968732111079944305074391336368778070483916700", + "13066997071728447881198118575843939658697378417140786780555780293235058313809", + "21748243383585930121267829337068672152331355859557319216005146741088078177776", + "4729857991097679142531555530778775359869066124489215723560961928063868892509", + "10577601991872490569510439890156265728720234335184061751849281340511337992941" + ], + [ + "7747057591006694283771094080223466992944268528068312216842995183850946130039", + "4886702506456149339702507481965767513030760140914208723069777301441071913604", + "5898436541135699764342264451424927415484077927336797157373285411019153975587", + "16839385201759245723654222260362256486118232187059679573616214581881705575844", + "6305158418300175869186849543393007704046294930541539672291219984407035712351", + "3675391087989231470068462116066166900798151940813975689767133444816956154867", + "19995633826572539362478368778049668087181497436133879932396932065650004213216" + ], + ["0", "0", "0", "0", "0", "0", "0"], + ["0", "0", "0", "0", "0", "0", "0"] + ], + "coordPrivKey": "6310661511279165105169780416448368158568408309735512101164896326904417294766", + "coordPubKey": [ + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + "4363822302427519764561660537570341277214758164895027920046745209970137856681" + ], + "encPubKeys": [ + [ + "7169482574855732726427143738152492655331222726959638442902625038852449210076", + "18313605050567479150590532619972444964205796585191616809522388018889233970802" + ], + [ + "5256799541456598402918482992442121299298063071517271647164800069329014249835", + "11186376155642197318025761393908801092451283308218533272869916765747906183435" + ], + [ + "13895891042223842984354082723295984532606901725635480661500868013041641776581", + "2455124196163095292891166406953801607702028315118548277145952282806422267751" + ], + ["0", "0"], + ["0", "0"] + ], + "currentStateRoot": "23497257039248226627100051681980129488805559380200297564116493861623124041", + "currentStateLeaves": [ + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "94", + "1112907789366310788273677943438906826288638856578263778624705486384839564986", + "1" + ], + [ + "4934845797881523927654842245387640257368309434525961062601274110069416343731", + "7218132018004361008636029786293016526331813670637191622129869640055131468762", + "80", + "0", + "0" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ] + ], + "currentStateLeavesPathElements": [ + [ + [ + "18580219913978378659515413019638819787107247455473307233464668909013811520153", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "20656366419936271335085265592254274896226005128010665303302123173161901839249", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ] + ], + "currentStateCommitment": "21652674250848744330319584314183410486313485141843731604892491492196983334654", + "currentStateSalt": "0", + "newStateCommitment": "1754580529630222025942951861769060631888758322071773541679673721401306995000", + "newStateSalt": "1234567890", + "currentVoteWeights": ["0", "0", "0", "0", "0"], + "currentVoteWeightsPathElements": [ + [["0", "6", "0", "0"]], + [["0", "0", "0", "0"]], + [["0", "0", "0", "0"]], + [["0", "0", "0", "0"]], + [["0", "0", "0", "0"]] + ] +} diff --git a/contracts/api-maci/src/test/plonk_test/result.json b/contracts/api-maci/src/test/plonk_test/result.json new file mode 100644 index 0000000..aaced48 --- /dev/null +++ b/contracts/api-maci/src/test/plonk_test/result.json @@ -0,0 +1,9 @@ +{ + "results": [ + "0", + "15000000000000000000000117", + "4000000000000000000000016", + "0", + "0" + ] +} diff --git a/contracts/api-maci/src/test/plonk_test/tally.json b/contracts/api-maci/src/test/plonk_test/tally.json new file mode 100644 index 0000000..22b397a --- /dev/null +++ b/contracts/api-maci/src/test/plonk_test/tally.json @@ -0,0 +1,46 @@ +{ + "stateRoot": "12480932824397539022855711113183770325849042050278578054294641706972829790761", + "stateSalt": "1234567890", + "packedVals": "8589934592", + "stateCommitment": "1754580529630222025942951861769060631888758322071773541679673721401306995000", + "currentTallyCommitment": "0", + "newTallyCommitment": "1361085100389551978360671231113356786606115614158285928154098646076342523744", + "inputHash": "8280185659400042849104305172164897274530820630296270130884068612955963419505", + "stateLeaf": [ + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "90", + "19735089350886863470141225871384857090821550042885805314099018535307240287975", + "2" + ], + [ + "4934845797881523927654842245387640257368309434525961062601274110069416343731", + "7218132018004361008636029786293016526331813670637191622129869640055131468762", + "71", + "18969064164777550680711660110980077317206906508951068065459536661603422469571", + "1" + ], + ["0", "0", "0", "0", "0"], + ["0", "0", "0", "0", "0"], + ["0", "0", "0", "0", "0"] + ], + "statePathElements": [ + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + "votes": [ + ["0", "6", "4", "0", "0"], + ["0", "9", "0", "0", "0"], + ["0", "0", "0", "0", "0"], + ["0", "0", "0", "0", "0"], + ["0", "0", "0", "0", "0"] + ], + "currentResults": ["0", "0", "0", "0", "0"], + "currentResultsRootSalt": "0", + "newResultsRootSalt": "1234567890" +} diff --git a/contracts/api-maci/src/test/qv_test/msg.json b/contracts/api-maci/src/test/qv_test/msg.json new file mode 100644 index 0000000..8a83574 --- /dev/null +++ b/contracts/api-maci/src/test/qv_test/msg.json @@ -0,0 +1,243 @@ +{ + "inputHash": "20899425030036757162726506869768737327440504017907015323468371238151146236562", + "packedVals": "18446744082299486213", + "batchStartHash": "0", + "batchEndHash": "2806393043795941555460875661453750929773752821171436852821298017638863319962", + "msgs": [ + [ + "12464466727380559741327029120716347565653310312805404943915221364233278355900", + "21756441382307499802075883466410791472157330940626781651729753858169806666424", + "16969575794768092744384541035544740469107350730057435369856614212872736197087", + "21106921111328932602220561288958073500538147520872081228867170491702777820919", + "14247661340753952303912914431542420007228355835757020038580415480350873616819", + "1913470981312317779087601088668868709201150623028133851357692554008495433683", + "5278987120186068145861189009145856833865800618239583715075012754431163754428" + ], + [ + "11595320132863457586416679934298203690085656835845107075309505316952855316091", + "13361013576988023762737230888849686331292693448179482733681417441488583791458", + "19334231874417936920373206667743968732111079944305074391336368778070483916700", + "13066997071728447881198118575843939658697378417140786780555780293235058313809", + "21748243383585930121267829337068672152331355859557319216005146741088078177776", + "4729857991097679142531555530778775359869066124489215723560961928063868892509", + "10577601991872490569510439890156265728720234335184061751849281340511337992941" + ], + [ + "7747057591006694283771094080223466992944268528068312216842995183850946130039", + "4886702506456149339702507481965767513030760140914208723069777301441071913604", + "5898436541135699764342264451424927415484077927336797157373285411019153975587", + "16839385201759245723654222260362256486118232187059679573616214581881705575844", + "6305158418300175869186849543393007704046294930541539672291219984407035712351", + "3675391087989231470068462116066166900798151940813975689767133444816956154867", + "19995633826572539362478368778049668087181497436133879932396932065650004213216" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0" + ] + ], + "coordPrivKey": "6310661511279165105169780416448368158568408309735512101164896326904417294766", + "coordPubKey": [ + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + "4363822302427519764561660537570341277214758164895027920046745209970137856681" + ], + "encPubKeys": [ + [ + "7169482574855732726427143738152492655331222726959638442902625038852449210076", + "18313605050567479150590532619972444964205796585191616809522388018889233970802" + ], + [ + "5256799541456598402918482992442121299298063071517271647164800069329014249835", + "11186376155642197318025761393908801092451283308218533272869916765747906183435" + ], + [ + "13895891042223842984354082723295984532606901725635480661500868013041641776581", + "2455124196163095292891166406953801607702028315118548277145952282806422267751" + ], + [ + "0", + "0" + ], + [ + "0", + "0" + ] + ], + "currentStateRoot": "23497257039248226627100051681980129488805559380200297564116493861623124041", + "currentStateLeaves": [ + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "64", + "1112907789366310788273677943438906826288638856578263778624705486384839564986", + "1" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "64", + "1112907789366310788273677943438906826288638856578263778624705486384839564986", + "1" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ], + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "100", + "0", + "0" + ] + ], + "currentStateLeavesPathElements": [ + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + [ + [ + "983904741545144904108830065039735356359693224024102638488768630912410211560", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156", + "14655542659562014735865511769057053982292279840403315552050801315682099828156" + ], + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ] + ], + "currentStateCommitment": "21652674250848744330319584314183410486313485141843731604892491492196983334654", + "currentStateSalt": "0", + "newStateCommitment": "8548207780152387484874685918374912996615715282696572390877807197888311534601", + "newStateSalt": "1234567890", + "currentVoteWeights": [ + "0", + "0", + "0", + "0", + "0" + ], + "currentVoteWeightsPathElements": [ + [ + [ + "0", + "6", + "0", + "0" + ] + ], + [ + [ + "6", + "0", + "0", + "0" + ] + ], + [ + [ + "0", + "0", + "0", + "0" + ] + ], + [ + [ + "0", + "0", + "0", + "0" + ] + ], + [ + [ + "0", + "0", + "0", + "0" + ] + ] + ] +} diff --git a/contracts/api-maci/src/test/qv_test/result.json b/contracts/api-maci/src/test/qv_test/result.json new file mode 100644 index 0000000..6980d95 --- /dev/null +++ b/contracts/api-maci/src/test/qv_test/result.json @@ -0,0 +1,9 @@ +{ + "results": [ + "0", + "6000000000000000000000036", + "4000000000000000000000016", + "0", + "0" + ] +} diff --git a/contracts/api-maci/src/test/qv_test/tally.json b/contracts/api-maci/src/test/qv_test/tally.json new file mode 100644 index 0000000..6ba57e5 --- /dev/null +++ b/contracts/api-maci/src/test/qv_test/tally.json @@ -0,0 +1,100 @@ +{ + "stateRoot": "1099468898919442897929246833633216037507048685675576124409601827363473119615", + "stateSalt": "1234567890", + "packedVals": "8589934592", + "stateCommitment": "8548207780152387484874685918374912996615715282696572390877807197888311534601", + "currentTallyCommitment": "0", + "newTallyCommitment": "12845598565229795822167465491382532582095821103513408909387141431833671202461", + "inputHash": "13923590082648821620680778808019545918070856220673593541975215575625157326704", + "stateLeaf": [ + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "48", + "19735089350886863470141225871384857090821550042885805314099018535307240287975", + "2" + ], + [ + "4934845797881523927654842245387640257368309434525961062601274110069416343731", + "7218132018004361008636029786293016526331813670637191622129869640055131468762", + "80", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ] + ], + "statePathElements": [ + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + "votes": [ + [ + "0", + "6", + "4", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ] + ], + "currentResults": [ + "0", + "0", + "0", + "0", + "0" + ], + "currentResultsRootSalt": "0", + "newResultsRootSalt": "1234567890" +} diff --git a/contracts/api-maci/src/test/result.json b/contracts/api-maci/src/test/result.json new file mode 100644 index 0000000..aaced48 --- /dev/null +++ b/contracts/api-maci/src/test/result.json @@ -0,0 +1,9 @@ +{ + "results": [ + "0", + "15000000000000000000000117", + "4000000000000000000000016", + "0", + "0" + ] +} diff --git a/contracts/api-maci/src/test/tally_test.json b/contracts/api-maci/src/test/tally_test.json new file mode 100644 index 0000000..4ea189c --- /dev/null +++ b/contracts/api-maci/src/test/tally_test.json @@ -0,0 +1,100 @@ +{ + "stateRoot": "12480932824397539022855711113183770325849042050278578054294641706972829790761", + "stateSalt": "1234567890", + "packedVals": "8589934592", + "stateCommitment": "1754580529630222025942951861769060631888758322071773541679673721401306995000", + "currentTallyCommitment": "0", + "newTallyCommitment": "1361085100389551978360671231113356786606115614158285928154098646076342523744", + "inputHash": "8280185659400042849104305172164897274530820630296270130884068612955963419505", + "stateLeaf": [ + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628", + "90", + "19735089350886863470141225871384857090821550042885805314099018535307240287975", + "2" + ], + [ + "4934845797881523927654842245387640257368309434525961062601274110069416343731", + "7218132018004361008636029786293016526331813670637191622129869640055131468762", + "71", + "18969064164777550680711660110980077317206906508951068065459536661603422469571", + "1" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ] + ], + "statePathElements": [ + [ + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905", + "19261153649140605024552417994922546473530072875902678653210025980873274131905" + ] + ], + "votes": [ + [ + "0", + "6", + "4", + "0", + "0" + ], + [ + "0", + "9", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0" + ] + ], + "currentResults": [ + "0", + "0", + "0", + "0", + "0" + ], + "currentResultsRootSalt": "0", + "newResultsRootSalt": "1234567890" +} diff --git a/contracts/api-maci/src/test/user_pubkey.json b/contracts/api-maci/src/test/user_pubkey.json new file mode 100644 index 0000000..7d1e9fb --- /dev/null +++ b/contracts/api-maci/src/test/user_pubkey.json @@ -0,0 +1,12 @@ +{ + "pubkeys": [ + [ + "8446677751716569713622015905729882243875224951572887602730835165068040887285", + "12484654491029393893324568717198080229359788322121893494118068510674758553628" + ], + [ + "4934845797881523927654842245387640257368309434525961062601274110069416343731", + "7218132018004361008636029786293016526331813670637191622129869640055131468762" + ] + ] +} diff --git a/contracts/api-maci/src/utils.rs b/contracts/api-maci/src/utils.rs new file mode 100644 index 0000000..d78832b --- /dev/null +++ b/contracts/api-maci/src/utils.rs @@ -0,0 +1,136 @@ +use cosmwasm_std::Uint256; +// use num_bigint::BigUint; +// use sha256::digest; +use ff::*; +use poseidon_rs::Poseidon; +use sha2::{Digest, Sha256}; +pub type Fr = poseidon_rs::Fr; // alias + +// pub fn uint256_from_decimal_string(decimal_string: &str) -> Uint256 { +// assert!( +// decimal_string.len() <= 77, +// "the decimal length can't abrove 77" +// ); + +// let decimal_number = BigUint::parse_bytes(decimal_string.as_bytes(), 10) +// .expect("Failed to parse decimal string"); + +// let byte_array = decimal_number.to_bytes_be(); + +// let hex_string = hex::encode(byte_array); +// uint256_from_hex_string(&hex_string) +// } + +pub fn uint256_from_hex_string(hex_string: &str) -> Uint256 { + let padded_hex_string = if hex_string.len() < 64 { + let padding_length = 64 - hex_string.len(); + format!("{:0>width$}{}", "", hex_string, width = padding_length) + } else { + hex_string.to_string() + }; + + let res = hex_to_decimal(&padded_hex_string); + Uint256::from_be_bytes(res) +} + +pub fn uint256_to_hex(data: Uint256) -> String { + hex::encode(data.to_be_bytes()) +} + +pub fn hex_to_decimal(hex_bytes: &str) -> [u8; 32] { + let bytes = hex::decode(hex_bytes).unwrap_or_else(|_| vec![]); + let decimal_values: Vec = bytes.iter().cloned().collect(); + + let mut array: [u8; 32] = [0; 32]; + + if decimal_values.len() >= 32 { + array.copy_from_slice(&decimal_values[..32]); + } else { + array[..decimal_values.len()].copy_from_slice(&decimal_values); + } + + array +} + +pub fn hex_to_uint256(hex_bytes: &str) -> Uint256 { + let bytes = hex::decode(hex_bytes).unwrap_or_else(|_| vec![]); + let decimal_values: Vec = bytes.iter().cloned().collect(); + + let mut array: [u8; 32] = [0; 32]; + + if decimal_values.len() >= 32 { + array.copy_from_slice(&decimal_values[..32]); + } else { + array[..decimal_values.len()].copy_from_slice(&decimal_values); + } + + Uint256::from_be_bytes(array) +} + +pub fn hash_uint256(data: Uint256) -> Uint256 { + let uint256_inputs = vec![Fr::from_str(&data.to_string()).unwrap()]; + + hash(uint256_inputs) +} + +pub fn hash(message: Vec) -> Uint256 { + let poseidon = Poseidon::new(); + + let hash_item = poseidon.hash(message).unwrap().to_string(); + let hash_res = &hash_item[5..hash_item.len() - 1]; + + uint256_from_hex_string(hash_res) +} + +pub fn hash2(data: [Uint256; 2]) -> Uint256 { + let uint256_inputs: Vec = data + .iter() + .map(|input| Fr::from_str(&input.to_string()).unwrap()) + .collect(); + + hash(uint256_inputs) +} + +pub fn hash5(data: [Uint256; 5]) -> Uint256 { + let uint256_inputs: Vec = data + .iter() + .map(|input| -> Fr { Fr::from_str(&input.to_string()).unwrap() }) + .collect(); + hash(uint256_inputs) +} + +pub fn hash_256_uint256_list(arrays: &[Uint256]) -> String { + let total_length = arrays.len() * 32; + let mut result: Vec = Vec::with_capacity(total_length); + + for array in arrays { + result.extend_from_slice(&array.to_be_bytes()); + } + + let hash_result = Sha256::digest(&result); + + // Use hex crate to convert binary data to hexadecimal string + hex::encode(hash_result) +} +// pub fn hash_256_uint256_list(arrays: &[Uint256]) -> String { +// let total_length = arrays.len() * 32; +// let mut result: Vec = Vec::with_capacity(total_length); + +// for array in arrays { +// result.extend_from_slice(&array.to_be_bytes()); +// } + +// // digest(result.as_slice()) +// Sha256::digest(&result.concat()) +// } + +pub fn encode_packed(arrays: &[&[u8; 32]]) -> Vec { + let total_length = arrays.len() * 32; + let mut result: Vec = Vec::with_capacity(total_length); + + for array in arrays { + result.extend_from_slice(*array); + } + + result +} diff --git a/contracts/api-maci/ts/ApiMaci.client.ts b/contracts/api-maci/ts/ApiMaci.client.ts new file mode 100644 index 0000000..a0ff441 --- /dev/null +++ b/contracts/api-maci/ts/ApiMaci.client.ts @@ -0,0 +1,459 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; +import { Coin, StdFee } from "@cosmjs/amino"; +import { Uint256, Timestamp, Uint64, VotingPowerMode, InstantiateMsg, PubKey, RoundInfo, VotingTime, VotingPowerArgs, ExecuteMsg, Uint128, MessageData, Groth16ProofType, PlonkProofType, QueryMsg, Addr, PeriodStatus, Period, Boolean, Binary, OracleWhitelistConfig, ArrayOfString, WhitelistConfig } from "./ApiMaci.types"; +export interface ApiMaciReadOnlyInterface { + contractAddress: string; + getRoundInfo: () => Promise; + getVotingTime: () => Promise; + getPeriod: () => Promise; + getNumSignUp: () => Promise; + getMsgChainLength: () => Promise; + getProcessedMsgCount: () => Promise; + getProcessedUserCount: () => Promise; + getResult: ({ + index + }: { + index: Uint256; + }) => Promise; + getAllResult: () => Promise; + getStateIdxInc: ({ + address + }: { + address: Addr; + }) => Promise; + getVoiceCreditBalance: ({ + index + }: { + index: Uint256; + }) => Promise; + isWhiteList: ({ + amount, + certificate, + pubkey + }: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }) => Promise; + whiteBalanceOf: ({ + amount, + certificate, + pubkey + }: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }) => Promise; + whiteInfo: ({ + pubkey + }: { + pubkey: PubKey; + }) => Promise; + maxWhitelistNum: () => Promise; + voteOptionMap: () => Promise; + maxVoteOptions: () => Promise; + queryTotalFeeGrant: () => Promise; + queryCircuitType: () => Promise; + queryCertSystem: () => Promise; + queryOracleWhitelistConfig: () => Promise; +} +export class ApiMaciQueryClient implements ApiMaciReadOnlyInterface { + client: CosmWasmClient; + contractAddress: string; + constructor(client: CosmWasmClient, contractAddress: string) { + this.client = client; + this.contractAddress = contractAddress; + this.getRoundInfo = this.getRoundInfo.bind(this); + this.getVotingTime = this.getVotingTime.bind(this); + this.getPeriod = this.getPeriod.bind(this); + this.getNumSignUp = this.getNumSignUp.bind(this); + this.getMsgChainLength = this.getMsgChainLength.bind(this); + this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this); + this.getProcessedUserCount = this.getProcessedUserCount.bind(this); + this.getResult = this.getResult.bind(this); + this.getAllResult = this.getAllResult.bind(this); + this.getStateIdxInc = this.getStateIdxInc.bind(this); + this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this); + this.isWhiteList = this.isWhiteList.bind(this); + this.whiteBalanceOf = this.whiteBalanceOf.bind(this); + this.whiteInfo = this.whiteInfo.bind(this); + this.maxWhitelistNum = this.maxWhitelistNum.bind(this); + this.voteOptionMap = this.voteOptionMap.bind(this); + this.maxVoteOptions = this.maxVoteOptions.bind(this); + this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this); + this.queryCircuitType = this.queryCircuitType.bind(this); + this.queryCertSystem = this.queryCertSystem.bind(this); + this.queryOracleWhitelistConfig = this.queryOracleWhitelistConfig.bind(this); + } + getRoundInfo = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_round_info: {} + }); + }; + getVotingTime = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_voting_time: {} + }); + }; + getPeriod = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_period: {} + }); + }; + getNumSignUp = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_num_sign_up: {} + }); + }; + getMsgChainLength = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_msg_chain_length: {} + }); + }; + getProcessedMsgCount = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_processed_msg_count: {} + }); + }; + getProcessedUserCount = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_processed_user_count: {} + }); + }; + getResult = async ({ + index + }: { + index: Uint256; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_result: { + index + } + }); + }; + getAllResult = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_all_result: {} + }); + }; + getStateIdxInc = async ({ + address + }: { + address: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_state_idx_inc: { + address + } + }); + }; + getVoiceCreditBalance = async ({ + index + }: { + index: Uint256; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_voice_credit_balance: { + index + } + }); + }; + isWhiteList = async ({ + amount, + certificate, + pubkey + }: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + is_white_list: { + amount, + certificate, + pubkey + } + }); + }; + whiteBalanceOf = async ({ + amount, + certificate, + pubkey + }: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + white_balance_of: { + amount, + certificate, + pubkey + } + }); + }; + whiteInfo = async ({ + pubkey + }: { + pubkey: PubKey; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + white_info: { + pubkey + } + }); + }; + maxWhitelistNum = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + max_whitelist_num: {} + }); + }; + voteOptionMap = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + vote_option_map: {} + }); + }; + maxVoteOptions = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + max_vote_options: {} + }); + }; + queryTotalFeeGrant = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_total_fee_grant: {} + }); + }; + queryCircuitType = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_circuit_type: {} + }); + }; + queryCertSystem = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_cert_system: {} + }); + }; + queryOracleWhitelistConfig = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + query_oracle_whitelist_config: {} + }); + }; +} +export interface ApiMaciInterface extends ApiMaciReadOnlyInterface { + contractAddress: string; + sender: string; + setRoundInfo: ({ + roundInfo + }: { + roundInfo: RoundInfo; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + setVoteOptionsMap: ({ + voteOptionMap + }: { + voteOptionMap: string[]; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + signUp: ({ + amount, + certificate, + pubkey + }: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + startProcessPeriod: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + publishMessage: ({ + encPubKey, + message + }: { + encPubKey: PubKey; + message: MessageData; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + processMessage: ({ + groth16Proof, + newStateCommitment, + plonkProof + }: { + groth16Proof?: Groth16ProofType; + newStateCommitment: Uint256; + plonkProof?: PlonkProofType; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + stopProcessingPeriod: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + processTally: ({ + groth16Proof, + newTallyCommitment, + plonkProof + }: { + groth16Proof?: Groth16ProofType; + newTallyCommitment: Uint256; + plonkProof?: PlonkProofType; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + stopTallyingPeriod: ({ + results, + salt + }: { + results: Uint256[]; + salt: Uint256; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + bond: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + withdraw: ({ + amount + }: { + amount?: Uint128; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; +} +export class ApiMaciClient extends ApiMaciQueryClient implements ApiMaciInterface { + client: SigningCosmWasmClient; + sender: string; + contractAddress: string; + constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + super(client, contractAddress); + this.client = client; + this.sender = sender; + this.contractAddress = contractAddress; + this.setRoundInfo = this.setRoundInfo.bind(this); + this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this); + this.signUp = this.signUp.bind(this); + this.startProcessPeriod = this.startProcessPeriod.bind(this); + this.publishMessage = this.publishMessage.bind(this); + this.processMessage = this.processMessage.bind(this); + this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this); + this.processTally = this.processTally.bind(this); + this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this); + this.bond = this.bond.bind(this); + this.withdraw = this.withdraw.bind(this); + } + setRoundInfo = async ({ + roundInfo + }: { + roundInfo: RoundInfo; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_round_info: { + round_info: roundInfo + } + }, fee, memo, _funds); + }; + setVoteOptionsMap = async ({ + voteOptionMap + }: { + voteOptionMap: string[]; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_vote_options_map: { + vote_option_map: voteOptionMap + } + }, fee, memo, _funds); + }; + signUp = async ({ + amount, + certificate, + pubkey + }: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + sign_up: { + amount, + certificate, + pubkey + } + }, fee, memo, _funds); + }; + startProcessPeriod = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + start_process_period: {} + }, fee, memo, _funds); + }; + publishMessage = async ({ + encPubKey, + message + }: { + encPubKey: PubKey; + message: MessageData; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + publish_message: { + enc_pub_key: encPubKey, + message + } + }, fee, memo, _funds); + }; + processMessage = async ({ + groth16Proof, + newStateCommitment, + plonkProof + }: { + groth16Proof?: Groth16ProofType; + newStateCommitment: Uint256; + plonkProof?: PlonkProofType; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + process_message: { + groth16_proof: groth16Proof, + new_state_commitment: newStateCommitment, + plonk_proof: plonkProof + } + }, fee, memo, _funds); + }; + stopProcessingPeriod = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + stop_processing_period: {} + }, fee, memo, _funds); + }; + processTally = async ({ + groth16Proof, + newTallyCommitment, + plonkProof + }: { + groth16Proof?: Groth16ProofType; + newTallyCommitment: Uint256; + plonkProof?: PlonkProofType; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + process_tally: { + groth16_proof: groth16Proof, + new_tally_commitment: newTallyCommitment, + plonk_proof: plonkProof + } + }, fee, memo, _funds); + }; + stopTallyingPeriod = async ({ + results, + salt + }: { + results: Uint256[]; + salt: Uint256; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + stop_tallying_period: { + results, + salt + } + }, fee, memo, _funds); + }; + bond = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + bond: {} + }, fee, memo, _funds); + }; + withdraw = async ({ + amount + }: { + amount?: Uint128; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + withdraw: { + amount + } + }, fee, memo, _funds); + }; +} \ No newline at end of file diff --git a/contracts/api-maci/ts/ApiMaci.types.ts b/contracts/api-maci/ts/ApiMaci.types.ts new file mode 100644 index 0000000..54da10b --- /dev/null +++ b/contracts/api-maci/ts/ApiMaci.types.ts @@ -0,0 +1,188 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +export type Uint256 = string; +export type Timestamp = Uint64; +export type Uint64 = string; +export type VotingPowerMode = "slope" | "threshold"; +export interface InstantiateMsg { + certification_system: Uint256; + circuit_type: Uint256; + coordinator: PubKey; + max_voters: number; + round_info: RoundInfo; + vote_option_map: string[]; + voting_time: VotingTime; + whitelist_backend_pubkey: string; + whitelist_voting_power_args: VotingPowerArgs; +} +export interface PubKey { + x: Uint256; + y: Uint256; +} +export interface RoundInfo { + description: string; + link: string; + title: string; +} +export interface VotingTime { + end_time: Timestamp; + start_time: Timestamp; +} +export interface VotingPowerArgs { + mode: VotingPowerMode; + slope: Uint256; + threshold: Uint256; +} +export type ExecuteMsg = { + set_round_info: { + round_info: RoundInfo; + }; +} | { + set_vote_options_map: { + vote_option_map: string[]; + }; +} | { + sign_up: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }; +} | { + start_process_period: {}; +} | { + publish_message: { + enc_pub_key: PubKey; + message: MessageData; + }; +} | { + process_message: { + groth16_proof?: Groth16ProofType | null; + new_state_commitment: Uint256; + plonk_proof?: PlonkProofType | null; + }; +} | { + stop_processing_period: {}; +} | { + process_tally: { + groth16_proof?: Groth16ProofType | null; + new_tally_commitment: Uint256; + plonk_proof?: PlonkProofType | null; + }; +} | { + stop_tallying_period: { + results: Uint256[]; + salt: Uint256; + }; +} | { + bond: {}; +} | { + withdraw: { + amount?: Uint128 | null; + }; +}; +export type Uint128 = string; +export interface MessageData { + data: [Uint256, Uint256, Uint256, Uint256, Uint256, Uint256, Uint256]; +} +export interface Groth16ProofType { + a: string; + b: string; + c: string; +} +export interface PlonkProofType { + grand_product_at_z_omega: string; + grand_product_commitment: string; + input_values: string[]; + linearization_polynomial_at_z: string; + n: number; + num_inputs: number; + opening_at_z_omega_proof: string; + opening_at_z_proof: string; + permutation_polynomials_at_z: string[]; + quotient_poly_commitments: string[]; + quotient_polynomial_at_z: string; + wire_commitments: string[]; + wire_values_at_z: string[]; + wire_values_at_z_omega: string[]; +} +export type QueryMsg = { + get_round_info: {}; +} | { + get_voting_time: {}; +} | { + get_period: {}; +} | { + get_num_sign_up: {}; +} | { + get_msg_chain_length: {}; +} | { + get_processed_msg_count: {}; +} | { + get_processed_user_count: {}; +} | { + get_result: { + index: Uint256; + }; +} | { + get_all_result: {}; +} | { + get_state_idx_inc: { + address: Addr; + }; +} | { + get_voice_credit_balance: { + index: Uint256; + }; +} | { + is_white_list: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }; +} | { + white_balance_of: { + amount: Uint256; + certificate: string; + pubkey: PubKey; + }; +} | { + white_info: { + pubkey: PubKey; + }; +} | { + max_whitelist_num: {}; +} | { + vote_option_map: {}; +} | { + max_vote_options: {}; +} | { + query_total_fee_grant: {}; +} | { + query_circuit_type: {}; +} | { + query_cert_system: {}; +} | { + query_oracle_whitelist_config: {}; +}; +export type Addr = string; +export type PeriodStatus = "pending" | "voting" | "processing" | "tallying" | "ended"; +export interface Period { + status: PeriodStatus; +} +export type Boolean = boolean; +export type Binary = string; +export interface OracleWhitelistConfig { + backend_pubkey: Binary; + slope: Uint256; + threshold: Uint256; + voting_power_mode: VotingPowerMode; +} +export type ArrayOfString = string[]; +export interface WhitelistConfig { + balance: Uint256; + is_register: boolean; +} \ No newline at end of file diff --git a/contracts/api-saas/Cargo.toml b/contracts/api-saas/Cargo.toml new file mode 100644 index 0000000..0f007ed --- /dev/null +++ b/contracts/api-saas/Cargo.toml @@ -0,0 +1,53 @@ +[package] +name = "cw-api-saas" +version = "0.1.2" +authors = ["Your Name "] +edition = "2021" + +[lib] +crate-type = ["cdylib", "rlib"] + +[profile.release] +codegen-units = 1 +debug = false +debug-assertions = false +incremental = false +lto = true +opt-level = 3 +overflow-checks = true +panic = 'abort' +rpath = false + +[dependencies] +cosmwasm-schema = "1.5.0" +cosmwasm-std = { version = "1.5.0", features = ["staking"] } +cw-storage-plus = "1.1.0" +cw2 = "1.1.0" +cw-utils = "1.0.1" +thiserror = { version = "1.0.31" } +schemars = "0.8.10" +serde = { version = "1.0.137", default-features = false, features = ["derive"] } +serde_json = "1.0" +bech32 = "0.9.1" +cw-amaci = { path = "../amaci", features = ["library"] } +cw-api-maci = { path = "../api-maci", features = ["library"] } +cw-amaci-registry = { path = "../registry", features = ["library"] } +anyhow = {version = "1.0", optional = true} +cw-multi-test = {version = "0.20.0", optional = true} +cosmos-sdk-proto = { version = "0.19.0", default-features = false } +prost = "0.11" +prost-types = "0.11" + +[dev-dependencies] +cw-multi-test = { version = "0.20.0", features = ["cosmwasm_1_4"] } +anyhow = "1.0" +cw-amaci-registry = { path = "../registry", features = ["mt"] } +cw-amaci = { path = "../amaci", features = ["mt"] } +cw-api-maci = { path = "../api-maci", features = ["mt"] } + +[features] +# for more explicit tests, cargo test --features=backtraces +backtraces = ["cosmwasm-std/backtraces"] +# use library feature to disable all instantiate/execute/query exports +library = [] +mt = ["library", "anyhow", "cw-multi-test"] diff --git a/contracts/api-saas/schema/cw-api-saas.json b/contracts/api-saas/schema/cw-api-saas.json new file mode 100644 index 0000000..1d6e6f2 --- /dev/null +++ b/contracts/api-saas/schema/cw-api-saas.json @@ -0,0 +1,700 @@ +{ + "contract_name": "cw-api-saas", + "contract_version": "0.1.2", + "idl_version": "1.0.0", + "instantiate": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "InstantiateMsg", + "type": "object", + "required": [ + "admin", + "denom", + "maci_code_id", + "registry_contract", + "treasury_manager" + ], + "properties": { + "admin": { + "$ref": "#/definitions/Addr" + }, + "denom": { + "type": "string" + }, + "maci_code_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "registry_contract": { + "$ref": "#/definitions/Addr" + }, + "treasury_manager": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + } + } + }, + "execute": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ExecuteMsg", + "oneOf": [ + { + "type": "object", + "required": [ + "update_config" + ], + "properties": { + "update_config": { + "type": "object", + "properties": { + "admin": { + "anyOf": [ + { + "$ref": "#/definitions/Addr" + }, + { + "type": "null" + } + ] + }, + "denom": { + "type": [ + "string", + "null" + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "update_maci_code_id" + ], + "properties": { + "update_maci_code_id": { + "type": "object", + "required": [ + "code_id" + ], + "properties": { + "code_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "update_amaci_registry_contract" + ], + "properties": { + "update_amaci_registry_contract": { + "type": "object", + "required": [ + "registry_contract" + ], + "properties": { + "registry_contract": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "add_operator" + ], + "properties": { + "add_operator": { + "type": "object", + "required": [ + "operator" + ], + "properties": { + "operator": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "remove_operator" + ], + "properties": { + "remove_operator": { + "type": "object", + "required": [ + "operator" + ], + "properties": { + "operator": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "deposit" + ], + "properties": { + "deposit": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "withdraw" + ], + "properties": { + "withdraw": { + "type": "object", + "required": [ + "amount" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint128" + }, + "recipient": { + "anyOf": [ + { + "$ref": "#/definitions/Addr" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "create_maci_round" + ], + "properties": { + "create_maci_round": { + "type": "object", + "required": [ + "certification_system", + "circuit_type", + "coordinator", + "end_time", + "max_voters", + "round_info", + "start_time", + "vote_option_map", + "whitelist_backend_pubkey" + ], + "properties": { + "certification_system": { + "$ref": "#/definitions/Uint256" + }, + "circuit_type": { + "$ref": "#/definitions/Uint256" + }, + "coordinator": { + "$ref": "#/definitions/PubKey" + }, + "end_time": { + "$ref": "#/definitions/Timestamp" + }, + "max_voters": { + "type": "integer", + "format": "uint128", + "minimum": 0.0 + }, + "round_info": { + "$ref": "#/definitions/RoundInfo" + }, + "start_time": { + "$ref": "#/definitions/Timestamp" + }, + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + }, + "whitelist_backend_pubkey": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "create_amaci_round" + ], + "properties": { + "create_amaci_round": { + "type": "object", + "required": [ + "certification_system", + "circuit_type", + "max_voter", + "operator", + "pre_deactivate_root", + "round_info", + "voice_credit_amount", + "vote_option_map", + "voting_time" + ], + "properties": { + "certification_system": { + "$ref": "#/definitions/Uint256" + }, + "circuit_type": { + "$ref": "#/definitions/Uint256" + }, + "max_voter": { + "$ref": "#/definitions/Uint256" + }, + "operator": { + "$ref": "#/definitions/Addr" + }, + "oracle_whitelist_pubkey": { + "type": [ + "string", + "null" + ] + }, + "pre_deactivate_coordinator": { + "anyOf": [ + { + "$ref": "#/definitions/PubKey" + }, + { + "type": "null" + } + ] + }, + "pre_deactivate_root": { + "$ref": "#/definitions/Uint256" + }, + "round_info": { + "$ref": "#/definitions/RoundInfo" + }, + "voice_credit_amount": { + "$ref": "#/definitions/Uint256" + }, + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + }, + "voting_time": { + "$ref": "#/definitions/VotingTime" + }, + "whitelist": { + "anyOf": [ + { + "$ref": "#/definitions/WhitelistBase" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "set_round_info" + ], + "properties": { + "set_round_info": { + "type": "object", + "required": [ + "contract_addr", + "round_info" + ], + "properties": { + "contract_addr": { + "type": "string" + }, + "round_info": { + "$ref": "#/definitions/RoundInfo" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "set_vote_options_map" + ], + "properties": { + "set_vote_options_map": { + "type": "object", + "required": [ + "contract_addr", + "vote_option_map" + ], + "properties": { + "contract_addr": { + "type": "string" + }, + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "PubKey": { + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/definitions/Uint256" + }, + "y": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "RoundInfo": { + "type": "object", + "required": [ + "description", + "link", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + }, + "VotingTime": { + "type": "object", + "required": [ + "end_time", + "start_time" + ], + "properties": { + "end_time": { + "$ref": "#/definitions/Timestamp" + }, + "start_time": { + "$ref": "#/definitions/Timestamp" + } + }, + "additionalProperties": false + }, + "WhitelistBase": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/WhitelistBaseConfig" + } + } + }, + "additionalProperties": false + }, + "WhitelistBaseConfig": { + "type": "object", + "required": [ + "addr" + ], + "properties": { + "addr": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + } + }, + "query": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "QueryMsg", + "oneOf": [ + { + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "operators" + ], + "properties": { + "operators": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "is_operator" + ], + "properties": { + "is_operator": { + "type": "object", + "required": [ + "address" + ], + "properties": { + "address": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "balance" + ], + "properties": { + "balance": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "maci_code_id" + ], + "properties": { + "maci_code_id": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "treasury_manager" + ], + "properties": { + "treasury_manager": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + } + } + }, + "migrate": null, + "sudo": null, + "responses": { + "balance": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint128", + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "config": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Config", + "type": "object", + "required": [ + "admin", + "denom" + ], + "properties": { + "admin": { + "$ref": "#/definitions/Addr" + }, + "denom": { + "type": "string" + } + }, + "additionalProperties": false, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + } + } + }, + "is_operator": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Boolean", + "type": "boolean" + }, + "maci_code_id": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "uint64", + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "operators": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Array_of_OperatorInfo", + "type": "array", + "items": { + "$ref": "#/definitions/OperatorInfo" + }, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "OperatorInfo": { + "type": "object", + "required": [ + "added_at", + "address" + ], + "properties": { + "added_at": { + "$ref": "#/definitions/Timestamp" + }, + "address": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + } + } + }, + "treasury_manager": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Addr", + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/execute.json b/contracts/api-saas/schema/raw/execute.json new file mode 100644 index 0000000..aff9f19 --- /dev/null +++ b/contracts/api-saas/schema/raw/execute.json @@ -0,0 +1,465 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ExecuteMsg", + "oneOf": [ + { + "type": "object", + "required": [ + "update_config" + ], + "properties": { + "update_config": { + "type": "object", + "properties": { + "admin": { + "anyOf": [ + { + "$ref": "#/definitions/Addr" + }, + { + "type": "null" + } + ] + }, + "denom": { + "type": [ + "string", + "null" + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "update_maci_code_id" + ], + "properties": { + "update_maci_code_id": { + "type": "object", + "required": [ + "code_id" + ], + "properties": { + "code_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "update_amaci_registry_contract" + ], + "properties": { + "update_amaci_registry_contract": { + "type": "object", + "required": [ + "registry_contract" + ], + "properties": { + "registry_contract": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "add_operator" + ], + "properties": { + "add_operator": { + "type": "object", + "required": [ + "operator" + ], + "properties": { + "operator": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "remove_operator" + ], + "properties": { + "remove_operator": { + "type": "object", + "required": [ + "operator" + ], + "properties": { + "operator": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "deposit" + ], + "properties": { + "deposit": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "withdraw" + ], + "properties": { + "withdraw": { + "type": "object", + "required": [ + "amount" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint128" + }, + "recipient": { + "anyOf": [ + { + "$ref": "#/definitions/Addr" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "create_maci_round" + ], + "properties": { + "create_maci_round": { + "type": "object", + "required": [ + "certification_system", + "circuit_type", + "coordinator", + "end_time", + "max_voters", + "round_info", + "start_time", + "vote_option_map", + "whitelist_backend_pubkey" + ], + "properties": { + "certification_system": { + "$ref": "#/definitions/Uint256" + }, + "circuit_type": { + "$ref": "#/definitions/Uint256" + }, + "coordinator": { + "$ref": "#/definitions/PubKey" + }, + "end_time": { + "$ref": "#/definitions/Timestamp" + }, + "max_voters": { + "type": "integer", + "format": "uint128", + "minimum": 0.0 + }, + "round_info": { + "$ref": "#/definitions/RoundInfo" + }, + "start_time": { + "$ref": "#/definitions/Timestamp" + }, + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + }, + "whitelist_backend_pubkey": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "create_amaci_round" + ], + "properties": { + "create_amaci_round": { + "type": "object", + "required": [ + "certification_system", + "circuit_type", + "max_voter", + "operator", + "pre_deactivate_root", + "round_info", + "voice_credit_amount", + "vote_option_map", + "voting_time" + ], + "properties": { + "certification_system": { + "$ref": "#/definitions/Uint256" + }, + "circuit_type": { + "$ref": "#/definitions/Uint256" + }, + "max_voter": { + "$ref": "#/definitions/Uint256" + }, + "operator": { + "$ref": "#/definitions/Addr" + }, + "oracle_whitelist_pubkey": { + "type": [ + "string", + "null" + ] + }, + "pre_deactivate_coordinator": { + "anyOf": [ + { + "$ref": "#/definitions/PubKey" + }, + { + "type": "null" + } + ] + }, + "pre_deactivate_root": { + "$ref": "#/definitions/Uint256" + }, + "round_info": { + "$ref": "#/definitions/RoundInfo" + }, + "voice_credit_amount": { + "$ref": "#/definitions/Uint256" + }, + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + }, + "voting_time": { + "$ref": "#/definitions/VotingTime" + }, + "whitelist": { + "anyOf": [ + { + "$ref": "#/definitions/WhitelistBase" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "set_round_info" + ], + "properties": { + "set_round_info": { + "type": "object", + "required": [ + "contract_addr", + "round_info" + ], + "properties": { + "contract_addr": { + "type": "string" + }, + "round_info": { + "$ref": "#/definitions/RoundInfo" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "set_vote_options_map" + ], + "properties": { + "set_vote_options_map": { + "type": "object", + "required": [ + "contract_addr", + "vote_option_map" + ], + "properties": { + "contract_addr": { + "type": "string" + }, + "vote_option_map": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "PubKey": { + "type": "object", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/definitions/Uint256" + }, + "y": { + "$ref": "#/definitions/Uint256" + } + }, + "additionalProperties": false + }, + "RoundInfo": { + "type": "object", + "required": [ + "description", + "link", + "title" + ], + "properties": { + "description": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "Uint256": { + "description": "An implementation of u256 that is using strings for JSON encoding/decoding, such that the full u256 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances out of primitive uint types or `new` to provide big endian bytes:\n\n``` # use cosmwasm_std::Uint256; let a = Uint256::from(258u128); let b = Uint256::new([ 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 1u8, 2u8, ]); assert_eq!(a, b); ```", + "type": "string" + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + }, + "VotingTime": { + "type": "object", + "required": [ + "end_time", + "start_time" + ], + "properties": { + "end_time": { + "$ref": "#/definitions/Timestamp" + }, + "start_time": { + "$ref": "#/definitions/Timestamp" + } + }, + "additionalProperties": false + }, + "WhitelistBase": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/definitions/WhitelistBaseConfig" + } + } + }, + "additionalProperties": false + }, + "WhitelistBaseConfig": { + "type": "object", + "required": [ + "addr" + ], + "properties": { + "addr": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + } +} diff --git a/contracts/api-saas/schema/raw/instantiate.json b/contracts/api-saas/schema/raw/instantiate.json new file mode 100644 index 0000000..022f62d --- /dev/null +++ b/contracts/api-saas/schema/raw/instantiate.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "InstantiateMsg", + "type": "object", + "required": [ + "admin", + "denom", + "maci_code_id", + "registry_contract", + "treasury_manager" + ], + "properties": { + "admin": { + "$ref": "#/definitions/Addr" + }, + "denom": { + "type": "string" + }, + "maci_code_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "registry_contract": { + "$ref": "#/definitions/Addr" + }, + "treasury_manager": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/query.json b/contracts/api-saas/schema/raw/query.json new file mode 100644 index 0000000..770fdcc --- /dev/null +++ b/contracts/api-saas/schema/raw/query.json @@ -0,0 +1,98 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "QueryMsg", + "oneOf": [ + { + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "operators" + ], + "properties": { + "operators": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "is_operator" + ], + "properties": { + "is_operator": { + "type": "object", + "required": [ + "address" + ], + "properties": { + "address": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "balance" + ], + "properties": { + "balance": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "maci_code_id" + ], + "properties": { + "maci_code_id": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + }, + { + "type": "object", + "required": [ + "treasury_manager" + ], + "properties": { + "treasury_manager": { + "type": "object", + "additionalProperties": false + } + }, + "additionalProperties": false + } + ], + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/response_to_balance.json b/contracts/api-saas/schema/raw/response_to_balance.json new file mode 100644 index 0000000..25b73e8 --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_balance.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Uint128", + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" +} diff --git a/contracts/api-saas/schema/raw/response_to_config.json b/contracts/api-saas/schema/raw/response_to_config.json new file mode 100644 index 0000000..52fe6a8 --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_config.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Config", + "type": "object", + "required": [ + "admin", + "denom" + ], + "properties": { + "admin": { + "$ref": "#/definitions/Addr" + }, + "denom": { + "type": "string" + } + }, + "additionalProperties": false, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/response_to_fee_grant_records.json b/contracts/api-saas/schema/raw/response_to_fee_grant_records.json new file mode 100644 index 0000000..71264ed --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_fee_grant_records.json @@ -0,0 +1,54 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Array_of_FeeGrantRecord", + "type": "array", + "items": { + "$ref": "#/definitions/FeeGrantRecord" + }, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "FeeGrantRecord": { + "type": "object", + "required": [ + "amount", + "granted_at", + "granted_by", + "grantee" + ], + "properties": { + "amount": { + "$ref": "#/definitions/Uint128" + }, + "granted_at": { + "$ref": "#/definitions/Timestamp" + }, + "granted_by": { + "$ref": "#/definitions/Addr" + }, + "grantee": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/response_to_is_operator.json b/contracts/api-saas/schema/raw/response_to_is_operator.json new file mode 100644 index 0000000..a7fe2bf --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_is_operator.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Boolean", + "type": "boolean" +} diff --git a/contracts/api-saas/schema/raw/response_to_maci_code_id.json b/contracts/api-saas/schema/raw/response_to_maci_code_id.json new file mode 100644 index 0000000..7b729a7 --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_maci_code_id.json @@ -0,0 +1,7 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "uint64", + "type": "integer", + "format": "uint64", + "minimum": 0.0 +} diff --git a/contracts/api-saas/schema/raw/response_to_maci_contract.json b/contracts/api-saas/schema/raw/response_to_maci_contract.json new file mode 100644 index 0000000..948d312 --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_maci_contract.json @@ -0,0 +1,68 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Nullable_MaciContractInfo", + "anyOf": [ + { + "$ref": "#/definitions/MaciContractInfo" + }, + { + "type": "null" + } + ], + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "MaciContractInfo": { + "type": "object", + "required": [ + "code_id", + "contract_address", + "created_at", + "creation_fee", + "creator_operator", + "round_title" + ], + "properties": { + "code_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "contract_address": { + "$ref": "#/definitions/Addr" + }, + "created_at": { + "$ref": "#/definitions/Timestamp" + }, + "creation_fee": { + "$ref": "#/definitions/Uint128" + }, + "creator_operator": { + "$ref": "#/definitions/Addr" + }, + "round_title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/response_to_maci_contracts.json b/contracts/api-saas/schema/raw/response_to_maci_contracts.json new file mode 100644 index 0000000..ebc22cb --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_maci_contracts.json @@ -0,0 +1,64 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Array_of_MaciContractInfo", + "type": "array", + "items": { + "$ref": "#/definitions/MaciContractInfo" + }, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "MaciContractInfo": { + "type": "object", + "required": [ + "code_id", + "contract_address", + "created_at", + "creation_fee", + "creator_operator", + "round_title" + ], + "properties": { + "code_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "contract_address": { + "$ref": "#/definitions/Addr" + }, + "created_at": { + "$ref": "#/definitions/Timestamp" + }, + "creation_fee": { + "$ref": "#/definitions/Uint128" + }, + "creator_operator": { + "$ref": "#/definitions/Addr" + }, + "round_title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/response_to_operator_maci_contracts.json b/contracts/api-saas/schema/raw/response_to_operator_maci_contracts.json new file mode 100644 index 0000000..ebc22cb --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_operator_maci_contracts.json @@ -0,0 +1,64 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Array_of_MaciContractInfo", + "type": "array", + "items": { + "$ref": "#/definitions/MaciContractInfo" + }, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "MaciContractInfo": { + "type": "object", + "required": [ + "code_id", + "contract_address", + "created_at", + "creation_fee", + "creator_operator", + "round_title" + ], + "properties": { + "code_id": { + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "contract_address": { + "$ref": "#/definitions/Addr" + }, + "created_at": { + "$ref": "#/definitions/Timestamp" + }, + "creation_fee": { + "$ref": "#/definitions/Uint128" + }, + "creator_operator": { + "$ref": "#/definitions/Addr" + }, + "round_title": { + "type": "string" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint128": { + "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```", + "type": "string" + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/response_to_operators.json b/contracts/api-saas/schema/raw/response_to_operators.json new file mode 100644 index 0000000..e15ea25 --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_operators.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Array_of_OperatorInfo", + "type": "array", + "items": { + "$ref": "#/definitions/OperatorInfo" + }, + "definitions": { + "Addr": { + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" + }, + "OperatorInfo": { + "type": "object", + "required": [ + "added_at", + "address" + ], + "properties": { + "added_at": { + "$ref": "#/definitions/Timestamp" + }, + "address": { + "$ref": "#/definitions/Addr" + } + }, + "additionalProperties": false + }, + "Timestamp": { + "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```", + "allOf": [ + { + "$ref": "#/definitions/Uint64" + } + ] + }, + "Uint64": { + "description": "A thin wrapper around u64 that is using strings for JSON encoding/decoding, such that the full u64 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u64` to get the value out:\n\n``` # use cosmwasm_std::Uint64; let a = Uint64::from(42u64); assert_eq!(a.u64(), 42);\n\nlet b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ```", + "type": "string" + } + } +} diff --git a/contracts/api-saas/schema/raw/response_to_oracle_maci_code_id.json b/contracts/api-saas/schema/raw/response_to_oracle_maci_code_id.json new file mode 100644 index 0000000..7b729a7 --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_oracle_maci_code_id.json @@ -0,0 +1,7 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "uint64", + "type": "integer", + "format": "uint64", + "minimum": 0.0 +} diff --git a/contracts/api-saas/schema/raw/response_to_treasury_manager.json b/contracts/api-saas/schema/raw/response_to_treasury_manager.json new file mode 100644 index 0000000..4c7f193 --- /dev/null +++ b/contracts/api-saas/schema/raw/response_to_treasury_manager.json @@ -0,0 +1,6 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Addr", + "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.", + "type": "string" +} diff --git a/contracts/api-saas/src/bin/schema.rs b/contracts/api-saas/src/bin/schema.rs new file mode 100644 index 0000000..78b456a --- /dev/null +++ b/contracts/api-saas/src/bin/schema.rs @@ -0,0 +1,11 @@ +use cosmwasm_schema::write_api; + +use cw_api_saas::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; + +fn main() { + write_api! { + instantiate: InstantiateMsg, + execute: ExecuteMsg, + query: QueryMsg, + } +} diff --git a/contracts/api-saas/src/contract.rs b/contracts/api-saas/src/contract.rs new file mode 100644 index 0000000..289091e --- /dev/null +++ b/contracts/api-saas/src/contract.rs @@ -0,0 +1,947 @@ +#[cfg(not(feature = "library"))] +use cosmwasm_std::entry_point; +use cosmwasm_std::{ + attr, from_json, to_json_binary, Addr, BankMsg, Binary, Coin, CosmosMsg, Deps, DepsMut, Env, + MessageInfo, Order, Reply, Response, StdError, StdResult, SubMsg, SubMsgResponse, Timestamp, + Uint128, Uint256, WasmMsg, +}; +use cw2::set_contract_version; +use cw_utils::{may_pay, parse_instantiate_response_data}; + +use cosmos_sdk_proto::cosmos::base::v1beta1::Coin as SdkCoin; +use cosmos_sdk_proto::cosmos::feegrant::v1beta1::{ + AllowedMsgAllowance, BasicAllowance, MsgGrantAllowance, MsgRevokeAllowance, +}; +use cosmos_sdk_proto::Any; +use prost::Message; + +// External contract types with aliases to avoid path conflicts +use cw_amaci::msg::WhitelistBase; +use cw_amaci::state::{RoundInfo, VotingTime}; + +use cw_api_maci::msg::{ + InstantiateMsg as OracleMaciInstantiateMsg, InstantiationData as OracleMaciInstantiationData, + VotingPowerArgs, +}; +use cw_api_maci::state::{ + PubKey as OracleMaciPubKey, RoundInfo as OracleMaciRoundInfo, VotingPowerMode, + VotingTime as OracleMaciVotingTime, +}; + +use cosmos_sdk_proto::traits::TypeUrl; +// Local contract types +use crate::error::ContractError; +use crate::msg::{ExecuteMsg, InstantiateMsg, InstantiationData, MigrateMsg, PubKey, QueryMsg}; +use crate::state::{ + Config, OperatorInfo, CONFIG, MACI_CODE_ID, OPERATORS, REGISTRY_CONTRACT_ADDR, TOTAL_BALANCE, + TREASURY_MANAGER, +}; + +// Version info for migration +const CONTRACT_NAME: &str = "crates.io:cw-saas"; +const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); + +// Reply IDs +pub const CREATED_API_MACI_ROUND_REPLY_ID: u64 = 1; +pub const CREATED_AMACI_ROUND_REPLY_ID: u64 = 2; + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn instantiate( + deps: DepsMut, + _env: Env, + _info: MessageInfo, + msg: InstantiateMsg, +) -> Result { + set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; + + let config = Config { + admin: msg.admin, + denom: msg.denom, + }; + + CONFIG.save(deps.storage, &config)?; + // Store treasury manager separately for easier access + TREASURY_MANAGER.save(deps.storage, &msg.treasury_manager)?; + TOTAL_BALANCE.save(deps.storage, &Uint128::zero())?; + MACI_CODE_ID.save(deps.storage, &msg.maci_code_id)?; + REGISTRY_CONTRACT_ADDR.save(deps.storage, &msg.registry_contract)?; + + Ok(Response::new() + .add_attribute("action", "instantiate") + .add_attribute("admin", config.admin.to_string()) + .add_attribute("treasury_manager", msg.treasury_manager.to_string()) + .add_attribute("denom", config.denom)) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn execute( + deps: DepsMut, + env: Env, + info: MessageInfo, + msg: ExecuteMsg, +) -> Result { + match msg { + ExecuteMsg::UpdateConfig { admin, denom } => { + execute_update_config(deps, info, admin, denom) + } + ExecuteMsg::UpdateAmaciRegistryContract { registry_contract } => { + execute_update_amaci_registry_contract(deps, info, registry_contract) + } + ExecuteMsg::AddOperator { operator } => execute_add_operator(deps, env, info, operator), + ExecuteMsg::RemoveOperator { operator } => { + execute_remove_operator(deps, env, info, operator) + } + ExecuteMsg::Deposit {} => execute_deposit(deps, env, info), + ExecuteMsg::Withdraw { amount, recipient } => { + execute_withdraw(deps, env, info, amount, recipient) + } + + ExecuteMsg::UpdateMaciCodeId { code_id } => { + execute_update_maci_code_id(deps, env, info, code_id) + } + ExecuteMsg::CreateMaciRound { + coordinator, + max_voters, + vote_option_map, + round_info, + start_time, + end_time, + circuit_type, + certification_system, + whitelist_backend_pubkey, + } => execute_create_maci_round( + deps, + env, + info, + coordinator, + max_voters, + vote_option_map, + round_info, + start_time, + end_time, + circuit_type, + certification_system, + whitelist_backend_pubkey, + ), + ExecuteMsg::SetRoundInfo { + contract_addr, + round_info, + } => execute_set_round_info(deps, env, info, contract_addr, round_info), + ExecuteMsg::SetVoteOptionsMap { + contract_addr, + vote_option_map, + } => execute_set_vote_options_map(deps, env, info, contract_addr, vote_option_map), + ExecuteMsg::CreateAmaciRound { + operator, + max_voter, + voice_credit_amount, + vote_option_map, + round_info, + voting_time, + whitelist, + pre_deactivate_root, + circuit_type, + certification_system, + oracle_whitelist_pubkey, + pre_deactivate_coordinator, + } => execute_create_amaci_round( + deps, + env, + info, + operator, + max_voter, + voice_credit_amount, + vote_option_map, + round_info, + voting_time, + whitelist, + pre_deactivate_root, + circuit_type, + certification_system, + oracle_whitelist_pubkey, + pre_deactivate_coordinator, + ), + } +} + +pub fn execute_update_config( + deps: DepsMut, + info: MessageInfo, + admin: Option, + denom: Option, +) -> Result { + let mut config = CONFIG.load(deps.storage)?; + + // Only admin can update config + if !config.is_admin(&info.sender) { + return Err(ContractError::Unauthorized {}); + } + + if let Some(admin) = admin { + config.admin = admin; + } + if let Some(denom) = denom { + config.denom = denom; + } + + CONFIG.save(deps.storage, &config)?; + + Ok(Response::new().add_attribute("action", "update_config")) +} + +pub fn execute_update_amaci_registry_contract( + deps: DepsMut, + info: MessageInfo, + registry_contract: Addr, +) -> Result { + let config = CONFIG.load(deps.storage)?; + + // Only admin can update config + if !config.is_admin(&info.sender) { + return Err(ContractError::Unauthorized {}); + } + + REGISTRY_CONTRACT_ADDR.save(deps.storage, ®istry_contract)?; + + Ok(Response::new() + .add_attribute("action", "update_amaci_registry_contract") + .add_attribute("registry_contract", registry_contract.to_string())) +} + +pub fn execute_add_operator( + deps: DepsMut, + env: Env, + info: MessageInfo, + operator: Addr, +) -> Result { + let config = CONFIG.load(deps.storage)?; + + // Only admin can add operators + if !config.is_admin(&info.sender) { + return Err(ContractError::Unauthorized {}); + } + + // Check if operator already exists + if OPERATORS.has(deps.storage, &operator) { + return Err(ContractError::OperatorAlreadyExists {}); + } + + // Create new operator + let operator_info = OperatorInfo::new(operator.clone(), env.block.time); + + // Large feegrant amount for operators - 10 billion tokens in smallest unit + let feegrant_amount = Uint128::from(10_000_000_000_000_000_000_000_000u128); + + // Create basic allowance + let allowance = BasicAllowance { + spend_limit: vec![SdkCoin { + denom: config.denom.clone(), + amount: feegrant_amount.to_string(), + }], + expiration: None, + }; + + // Create allowed message allowance (for execute contract calls) + let allowed_allowance = AllowedMsgAllowance { + allowance: Some(Any { + type_url: BasicAllowance::TYPE_URL.to_string(), + value: allowance.encode_to_vec(), + }), + allowed_messages: vec!["/cosmwasm.wasm.v1.MsgExecuteContract".to_string()], + }; + + // Create grant message + let grant_msg = MsgGrantAllowance { + granter: env.contract.address.to_string(), + grantee: operator.to_string(), + allowance: Some(Any { + type_url: AllowedMsgAllowance::TYPE_URL.to_string(), + value: allowed_allowance.encode_to_vec(), + }), + }; + + let grant_message = CosmosMsg::Stargate { + type_url: MsgGrantAllowance::TYPE_URL.to_string(), + value: grant_msg.encode_to_vec().into(), + }; + + // Save operator info + OPERATORS.save(deps.storage, &operator, &operator_info)?; + + Ok(Response::new() + .add_message(grant_message) + .add_attribute("action", "add_operator") + .add_attribute("operator", operator.to_string()) + .add_attribute("feegrant_action", "auto_grant") + .add_attribute("feegrant_amount", feegrant_amount.to_string()) + .add_attribute("feegrant_denom", config.denom)) +} + +pub fn execute_remove_operator( + deps: DepsMut, + env: Env, + info: MessageInfo, + operator: Addr, +) -> Result { + let config = CONFIG.load(deps.storage)?; + + // Only admin can remove operators + if !config.is_admin(&info.sender) { + return Err(ContractError::Unauthorized {}); + } + + // Check if operator exists + if !OPERATORS.has(deps.storage, &operator) { + return Err(ContractError::OperatorNotFound {}); + } + + // Create revoke message (operators always have feegrant) + let revoke_msg = MsgRevokeAllowance { + granter: env.contract.address.to_string(), + grantee: operator.to_string(), + }; + + let revoke_message = CosmosMsg::Stargate { + type_url: MsgRevokeAllowance::TYPE_URL.to_string(), + value: revoke_msg.encode_to_vec().into(), + }; + + // Remove operator from storage + OPERATORS.remove(deps.storage, &operator); + + Ok(Response::new() + .add_message(revoke_message) + .add_attribute("action", "remove_operator") + .add_attribute("operator", operator.to_string()) + .add_attribute("feegrant_action", "auto_revoke")) +} + +pub fn execute_deposit( + deps: DepsMut, + _env: Env, + info: MessageInfo, +) -> Result { + let config = CONFIG.load(deps.storage)?; + + // Check if funds were sent + let amount = may_pay(&info, &config.denom)?; + if amount.is_zero() { + return Err(ContractError::NoFunds {}); + } + + // Update total balance + let mut total_balance = TOTAL_BALANCE.load(deps.storage)?; + total_balance += amount; + TOTAL_BALANCE.save(deps.storage, &total_balance)?; + + Ok(Response::new() + .add_attribute("action", "deposit") + .add_attribute("sender", info.sender.to_string()) + .add_attribute("amount", amount.to_string()) + .add_attribute("total_balance", total_balance.to_string())) +} + +pub fn execute_update_maci_code_id( + deps: DepsMut, + _env: Env, + info: MessageInfo, + code_id: u64, +) -> Result { + if !is_admin(deps.as_ref(), info.sender.as_ref())? { + Err(ContractError::Unauthorized {}) + } else { + MACI_CODE_ID.save(deps.storage, &code_id)?; + Ok(Response::new() + .add_attribute("action", "update_maci_code_id") + .add_attribute("code_id", &code_id.to_string())) + } +} + +pub fn execute_withdraw( + deps: DepsMut, + _env: Env, + info: MessageInfo, + amount: Uint128, + recipient: Option, +) -> Result { + let config = CONFIG.load(deps.storage)?; + + // Only treasury manager can withdraw + if !is_treasury_manager(deps.as_ref(), info.sender.as_ref())? { + return Err(ContractError::TreasuryManagerUnauthorized {}); + } + + if amount.is_zero() { + return Err(ContractError::InvalidWithdrawAmount {}); + } + + // Check if sufficient balance + let total_balance = TOTAL_BALANCE.load(deps.storage)?; + if total_balance < amount { + return Err(ContractError::InsufficientBalance {}); + } + + // Update total balance + let new_balance = total_balance - amount; + TOTAL_BALANCE.save(deps.storage, &new_balance)?; + + // Send funds to recipient + let recipient_addr = recipient.unwrap_or_else(|| info.sender.clone()); + let msg = BankMsg::Send { + to_address: recipient_addr.to_string(), + amount: vec![Coin { + denom: config.denom, + amount, + }], + }; + + Ok(Response::new() + .add_message(msg) + .add_attribute("action", "withdraw") + .add_attribute("amount", amount.to_string()) + .add_attribute("recipient", recipient_addr.to_string()) + .add_attribute("new_balance", new_balance.to_string())) +} + +pub fn execute_create_maci_round( + deps: DepsMut, + env: Env, + info: MessageInfo, + coordinator: PubKey, + max_voters: u128, + vote_option_map: Vec, + round_info: RoundInfo, + start_time: Timestamp, + end_time: Timestamp, + circuit_type: Uint256, + certification_system: Uint256, + whitelist_backend_pubkey: String, +) -> Result { + // Only operators can create API MACI rounds + if !OPERATORS.has(deps.storage, &info.sender) { + return Err(ContractError::Unauthorized {}); + } + + // Create Oracle MACI VotingTime using provided start_time and end_time + let oracle_voting_time = OracleMaciVotingTime { + start_time: start_time, + end_time: end_time, + }; + + // Create Oracle MACI InstantiateMsg using proper Oracle MACI types (like registry does with AMACI) + let oracle_maci_instantiate_msg = OracleMaciInstantiateMsg { + coordinator: OracleMaciPubKey { + x: coordinator.x, + y: coordinator.y, + }, + max_voters, + vote_option_map: vote_option_map.clone(), + round_info: OracleMaciRoundInfo { + title: round_info.title.clone(), + description: round_info.description.clone(), + link: round_info.link.clone(), + }, + voting_time: oracle_voting_time, + circuit_type, + certification_system, + whitelist_backend_pubkey: whitelist_backend_pubkey.clone(), + // Fixed default values - one person one vote system + whitelist_voting_power_args: VotingPowerArgs { + mode: VotingPowerMode::Slope, + slope: Uint256::one(), + threshold: Uint256::one(), + }, + }; + + // Validate the message can be serialized properly + let serialized_msg = to_json_binary(&oracle_maci_instantiate_msg).map_err(|e| { + ContractError::SerializationError { + msg: format!("Failed to serialize Oracle MACI InstantiateMsg: {}", e), + } + })?; + + let maci_code_id = MACI_CODE_ID.load(deps.storage)?; + + // Prepare the instantiate message with SaaS contract as admin and token funds + let instantiate_msg = WasmMsg::Instantiate { + admin: Some(env.contract.address.to_string()), // SaaS contract as Oracle MACI admin + code_id: maci_code_id, + msg: serialized_msg, + funds: vec![], // No funds needed for MACI contract + label: format!("API Maci Round - {}", round_info.title), + }; + + // Create SubMsg with reply using registry pattern - this allows getting the real contract address + let submsg = SubMsg::reply_on_success(instantiate_msg, CREATED_API_MACI_ROUND_REPLY_ID); + Ok(Response::new() + .add_submessage(submsg) + .add_attribute("action", "create_api_maci_round") + .add_attribute("operator", info.sender.to_string()) + .add_attribute("round_title", round_info.title) + .add_attribute("max_voters", max_voters.to_string())) +} + +pub fn execute_set_round_info( + deps: DepsMut, + _env: Env, + info: MessageInfo, + contract_addr: String, + round_info: RoundInfo, +) -> Result { + // Only operators can manage Oracle MACI contracts + if !OPERATORS.has(deps.storage, &info.sender) { + return Err(ContractError::Unauthorized {}); + } + + // Validate the contract address format + let target_addr = deps.api.addr_validate(&contract_addr)?; + + // Create Oracle MACI SetRoundInfo message + let oracle_maci_msg = serde_json::json!({ + "set_round_info": { + "round_info": { + "title": round_info.title, + "description": round_info.description, + "link": round_info.link + } + } + }); + + // Execute the contract call + let execute_msg = WasmMsg::Execute { + contract_addr: target_addr.to_string(), + msg: to_json_binary(&oracle_maci_msg)?, + funds: vec![], + }; + + Ok(Response::new() + .add_message(execute_msg) + .add_attribute("action", "saas_set_round_info") + .add_attribute("operator", info.sender.to_string()) + .add_attribute("target_contract", contract_addr) + .add_attribute("round_title", round_info.title)) +} + +pub fn execute_set_vote_options_map( + deps: DepsMut, + _env: Env, + info: MessageInfo, + contract_addr: String, + vote_option_map: Vec, +) -> Result { + // Only operators can manage Oracle MACI contracts + if !OPERATORS.has(deps.storage, &info.sender) { + return Err(ContractError::Unauthorized {}); + } + + // Validate the contract address format + let target_addr = deps.api.addr_validate(&contract_addr)?; + + // Create Oracle MACI SetVoteOptionsMap message + let oracle_maci_msg = serde_json::json!({ + "set_vote_options_map": { + "vote_option_map": vote_option_map + } + }); + + // Execute the contract call + let execute_msg = WasmMsg::Execute { + contract_addr: target_addr.to_string(), + msg: to_json_binary(&oracle_maci_msg)?, + funds: vec![], + }; + + Ok(Response::new() + .add_message(execute_msg) + .add_attribute("action", "saas_set_vote_option") + .add_attribute("operator", info.sender.to_string()) + .add_attribute("target_contract", contract_addr) + .add_attribute("vote_option_map", format!("{:?}", vote_option_map))) +} + +pub fn execute_create_amaci_round( + deps: DepsMut, + _env: Env, + info: MessageInfo, + operator: Addr, + max_voter: Uint256, + voice_credit_amount: Uint256, + vote_option_map: Vec, + round_info: RoundInfo, + voting_time: VotingTime, + whitelist: Option, + pre_deactivate_root: Uint256, + circuit_type: Uint256, + certification_system: Uint256, + oracle_whitelist_pubkey: Option, + pre_deactivate_coordinator: Option, +) -> Result { + // Only operators can create AMACI rounds via registry + if !OPERATORS.has(deps.storage, &info.sender) { + return Err(ContractError::Unauthorized {}); + } + + // Load registry contract address and config + let registry_contract = REGISTRY_CONTRACT_ADDR.load(deps.storage)?; + let config = CONFIG.load(deps.storage)?; + + // Calculate required fee using registry's centralized calculation logic + let max_option = Uint256::from_u128(vote_option_map.len() as u128); + let required_fee = cw_amaci_registry::utils::calculate_round_fee(max_voter, max_option) + .map_err(|_| ContractError::InvalidOracleMaciParameters { + reason: "No matched size circuit".to_string(), + })?; + + // Check if SaaS contract has sufficient balance + let total_balance = TOTAL_BALANCE.load(deps.storage)?; + if total_balance < required_fee { + return Err(ContractError::InsufficientBalance {}); + } + + // Deduct fee from SaaS contract balance + let new_balance = total_balance - required_fee; + TOTAL_BALANCE.save(deps.storage, &new_balance)?; + + // Create the registry CreateRound message + let registry_msg = serde_json::json!({ + "create_round": { + "operator": operator, + "max_voter": max_voter, + "voice_credit_amount": voice_credit_amount, + "vote_option_map": vote_option_map, + "round_info": round_info, + "voting_time": voting_time, + "whitelist": whitelist, + "pre_deactivate_root": pre_deactivate_root, + "circuit_type": circuit_type, + "certification_system": certification_system, + "oracle_whitelist_pubkey": oracle_whitelist_pubkey, + "pre_deactivate_coordinator": pre_deactivate_coordinator + } + }); + + // Execute the contract call to registry with the required fee from SaaS balance + let execute_msg = WasmMsg::Execute { + contract_addr: registry_contract.to_string(), + msg: to_json_binary(®istry_msg)?, + funds: vec![Coin { + denom: config.denom, + amount: required_fee, + }], // Use SaaS contract's balance to pay the fee + }; + + // Use SubMsg with reply to get the created contract address + let submsg = SubMsg::reply_on_success(execute_msg, CREATED_AMACI_ROUND_REPLY_ID); + + Ok(Response::new() + .add_submessage(submsg) + .add_attribute("action", "create_amaci_round") + .add_attribute("operator", info.sender.to_string()) + .add_attribute("registry_contract", registry_contract.to_string()) + .add_attribute("round_title", round_info.title) + .add_attribute("max_voter", max_voter.to_string()) + .add_attribute("max_option", vote_option_map.len().to_string()) + .add_attribute("fee_paid", required_fee.to_string()) + .add_attribute("saas_balance_after", new_balance.to_string())) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { + match msg { + QueryMsg::Config {} => to_json_binary(&CONFIG.load(deps.storage)?), + QueryMsg::Operators {} => to_json_binary(&query_operators(deps)?), + QueryMsg::IsOperator { address } => to_json_binary(&query_is_operator(deps, address)?), + QueryMsg::Balance {} => to_json_binary(&TOTAL_BALANCE.load(deps.storage)?), + QueryMsg::MaciCodeId {} => to_json_binary(&MACI_CODE_ID.load(deps.storage)?), + QueryMsg::TreasuryManager {} => to_json_binary(&TREASURY_MANAGER.load(deps.storage)?), + } +} + +fn query_operators(deps: Deps) -> StdResult> { + OPERATORS + .range(deps.storage, None, None, Order::Ascending) + .map(|item| item.map(|(_, operator_info)| operator_info)) + .collect() +} + +fn query_is_operator(deps: Deps, address: Addr) -> StdResult { + Ok(OPERATORS.has(deps.storage, &address)) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result { + match msg.id { + CREATED_API_MACI_ROUND_REPLY_ID => { + reply_created_maci_round(deps, env, msg.result.into_result()) + } + CREATED_AMACI_ROUND_REPLY_ID => { + reply_created_amaci_round(deps, env, msg.result.into_result()) + } + id => Err(ContractError::Std(StdError::generic_err(format!( + "Unknown reply id: {}", + id + )))), + } +} + +fn reply_created_maci_round( + deps: DepsMut, + _env: Env, + result: Result, +) -> Result { + // Parse SubMsg response + let response = result.map_err(StdError::generic_err)?; + + // Parse response data using the same method as registry + let data = response + .data + .ok_or(ContractError::Std(StdError::generic_err( + "Data missing from response", + )))?; + let parsed_response = match parse_instantiate_response_data(&data) { + Ok(data) => data, + Err(err) => { + return Err(ContractError::Std(StdError::generic_err(format!( + "Failed to parse instantiate response: {}", + err + )))) + } + }; + + let contract_address = Addr::unchecked(parsed_response.contract_address.clone()); + + let oracle_maci_return_data: OracleMaciInstantiationData = + from_json(&parsed_response.data.unwrap())?; + + let maci_code_id = MACI_CODE_ID.load(deps.storage)?; + + // Prepare return data - now contains complete oracle maci instantiation data + let saas_instantiation_data = InstantiationData { + addr: contract_address.clone(), + }; + + let mut response_attrs = vec![ + attr("action", "created_maci_round"), + attr("round_addr", &contract_address.to_string()), + attr("code_id", &maci_code_id.to_string()), + attr("caller", &oracle_maci_return_data.caller.to_string()), + attr("admin", &oracle_maci_return_data.caller.to_string()), + attr("operator", &oracle_maci_return_data.caller.to_string()), + ]; + + // If successfully parsed Oracle MACI instantiation data, add more detailed information + // if let Some(ref oracle_maci_data) = oracle_maci_instantiation_data { + response_attrs.extend(vec![ + attr( + "voting_start", + &oracle_maci_return_data + .voting_time + .start_time + .nanos() + .to_string(), + ), + attr( + "voting_end", + &oracle_maci_return_data + .voting_time + .end_time + .nanos() + .to_string(), + ), + attr( + "round_title", + &oracle_maci_return_data.round_info.title.to_string(), + ), + attr("max_voters", oracle_maci_return_data.max_voters.to_string()), + attr( + "vote_option_map", + format!("{:?}", oracle_maci_return_data.vote_option_map), + ), + attr("circuit_type", &oracle_maci_return_data.circuit_type), + attr( + "certification_system", + &oracle_maci_return_data.certification_system, + ), + attr( + "coordinator_pubkey_x", + oracle_maci_return_data.coordinator.x.to_string(), + ), + attr( + "coordinator_pubkey_y", + oracle_maci_return_data.coordinator.y.to_string(), + ), + attr( + "state_tree_depth", + oracle_maci_return_data + .parameters + .state_tree_depth + .to_string(), + ), + attr( + "int_state_tree_depth", + &oracle_maci_return_data + .parameters + .int_state_tree_depth + .to_string(), + ), + attr( + "vote_option_tree_depth", + oracle_maci_return_data + .parameters + .vote_option_tree_depth + .to_string(), + ), + attr( + "message_batch_size", + &oracle_maci_return_data + .parameters + .message_batch_size + .to_string(), + ), + ]); + + if oracle_maci_return_data.round_info.description != "" { + response_attrs.push(attr( + "round_description", + &oracle_maci_return_data.round_info.description, + )); + } + + if oracle_maci_return_data.round_info.link != "" { + response_attrs.push(attr("round_link", &oracle_maci_return_data.round_info.link)); + } + + Ok(Response::new() + .add_attributes(response_attrs) + .set_data(to_json_binary(&saas_instantiation_data)?)) +} + +fn reply_created_amaci_round( + _deps: DepsMut, + _env: Env, + result: Result, +) -> Result { + // Parse SubMsg response from registry + let response = result.map_err(StdError::generic_err)?; + + // Parse response data using the same method as in api-maci + let data = response + .data + .ok_or(ContractError::Std(StdError::generic_err( + "Data missing from response", + )))?; + + // Try to parse the instantiation data from Registry response + let parsed_response = match parse_instantiate_response_data(&data) { + Ok(data) => data, + Err(err) => { + return Err(ContractError::Std(StdError::generic_err(format!( + "Failed to parse instantiate response: {}", + err + )))) + } + }; + + let amaci_contract_addr = Addr::unchecked(parsed_response.contract_address.clone()); + + // Extract information from response events for indexer + let mut event_attrs = std::collections::HashMap::new(); + + for event in response.events { + for attr in event.attributes { + match attr.key.as_str() { + // Store all AMACI-related attributes for indexer + "code_id" + | "round_addr" + | "operator" + | "vote_option_map" + | "voice_credit_amount" + | "pre_deactivate_root" + | "state_tree_depth" + | "int_state_tree_depth" + | "vote_option_tree_depth" + | "message_batch_size" + | "circuit_type" + | "certification_system" + | "penalty_rate" + | "deactivate_timeout" + | "tally_timeout" + | "voting_start" + | "voting_end" + | "round_title" + | "round_description" + | "round_link" + | "coordinator_pubkey_x" + | "coordinator_pubkey_y" + | "caller" + | "admin" => { + event_attrs.insert(attr.key.clone(), attr.value.clone()); + } + _ => {} + } + } + } + + // Prepare return data with the AMACI contract address + let saas_instantiation_data = InstantiationData { + addr: amaci_contract_addr.clone(), + }; + + // Create a minimal AMACI instantiation data structure + // We don't have all the data that the original AMACI contract returned, + // but we have enough to continue with the response + + let mut attributes = vec![attr("action", "created_amaci_round")]; + + // Add all extracted event attributes for indexer + for (key, value) in event_attrs { + attributes.push(attr(&key, &value)); + } + + Ok(Response::new() + .add_attributes(attributes) + .set_data(to_json_binary(&saas_instantiation_data)?)) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn migrate(deps: DepsMut, _env: Env, _msg: MigrateMsg) -> Result { + cw2::ensure_from_older_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; + + Ok(Response::new().add_attributes(vec![ + attr("action", "migrate"), + attr("version", CONTRACT_VERSION), + ])) +} + +// Utility functions +fn is_admin(deps: Deps, sender: &str) -> StdResult { + let config = CONFIG.load(deps.storage)?; + + if config.is_admin(&Addr::unchecked(sender)) { + return Ok(true); + } + Ok(false) +} + +fn is_treasury_manager(deps: Deps, sender: &str) -> StdResult { + let treasury_manager = TREASURY_MANAGER.load(deps.storage)?; + let sender_addr = Addr::unchecked(sender); + Ok(treasury_manager == sender_addr) +} + +pub fn validate_dora_address(address: &str) -> Result<(), ContractError> { + match bech32::decode(address) { + Ok((prefix, _data, _variant)) => { + if prefix != "dora" { + return Err(ContractError::InvalidAddressPrefix { + expected: "dora".to_string(), + actual: prefix, + }); + } + Ok(()) + } + Err(_) => Err(ContractError::InvalidAddress { + address: address.to_string(), + }), + } +} diff --git a/contracts/api-saas/src/error.rs b/contracts/api-saas/src/error.rs new file mode 100644 index 0000000..6089d63 --- /dev/null +++ b/contracts/api-saas/src/error.rs @@ -0,0 +1,57 @@ +use cosmwasm_std::{OverflowError, StdError}; +use cw_utils::PaymentError; +use thiserror::Error; + +#[derive(Error, Debug, PartialEq)] +pub enum ContractError { + #[error("{0}")] + Std(#[from] StdError), + + #[error("Unauthorized")] + Unauthorized {}, + + #[error("Operator not found")] + OperatorNotFound {}, + + #[error("Operator already exists")] + OperatorAlreadyExists {}, + + #[error("Insufficient balance in SaaS contract")] + InsufficientBalance {}, + + #[error("Invalid address prefix, expected: {expected}, got: {actual}")] + InvalidAddressPrefix { expected: String, actual: String }, + + #[error("Invalid address: {address}")] + InvalidAddress { address: String }, + + #[error("No registry contract set")] + NoRegistryContract {}, + + #[error("Invalid Oracle MACI parameters: {reason}")] + InvalidOracleMaciParameters { reason: String }, + + #[error("Message serialization failed: {msg}")] + SerializationError { msg: String }, + + #[error("No funds sent")] + NoFunds {}, + + #[error("Cannot withdraw zero amount")] + InvalidWithdrawAmount {}, + + #[error("Value too large for conversion")] + ValueTooLarge {}, + + #[error("Payment error: {0}")] + Payment(#[from] PaymentError), + + #[error("Overflow error: {0}")] + Overflow(#[from] OverflowError), + + #[error("Contract instantiation failed")] + ContractInstantiationFailed {}, + + #[error("Treasury manager unauthorized")] + TreasuryManagerUnauthorized {}, +} diff --git a/contracts/api-saas/src/lib.rs b/contracts/api-saas/src/lib.rs new file mode 100644 index 0000000..a2cc211 --- /dev/null +++ b/contracts/api-saas/src/lib.rs @@ -0,0 +1,9 @@ +pub mod contract; +pub mod error; +pub mod msg; +pub mod state; + +#[cfg(any(feature = "mt", test))] +pub mod multitest; + +pub use crate::error::ContractError; diff --git a/contracts/api-saas/src/msg.rs b/contracts/api-saas/src/msg.rs new file mode 100644 index 0000000..794ef6d --- /dev/null +++ b/contracts/api-saas/src/msg.rs @@ -0,0 +1,123 @@ +use cosmwasm_schema::{cw_serde, QueryResponses}; +use cosmwasm_std::{Addr, Uint128, Uint256}; +use cw_amaci::msg::WhitelistBase; +use cw_amaci::state::{RoundInfo, VotingTime}; + +use crate::state::{Config, OperatorInfo}; + +#[cw_serde] +pub struct PubKey { + pub x: Uint256, + pub y: Uint256, +} + +#[cw_serde] +pub struct InstantiateMsg { + pub admin: Addr, + pub treasury_manager: Addr, + pub registry_contract: Addr, + pub denom: String, + pub maci_code_id: u64, +} + +#[cw_serde] +pub enum ExecuteMsg { + // Admin management + UpdateConfig { + admin: Option, + denom: Option, + }, + + UpdateMaciCodeId { + code_id: u64, + }, + UpdateAmaciRegistryContract { + registry_contract: Addr, + }, + + // Operator management + AddOperator { + operator: Addr, + }, + RemoveOperator { + operator: Addr, + }, + + // Deposit/Withdraw functions + Deposit {}, + Withdraw { + amount: Uint128, + recipient: Option, + }, + + // Create API MACI round + CreateMaciRound { + coordinator: PubKey, + max_voters: u128, + vote_option_map: Vec, + round_info: RoundInfo, + start_time: cosmwasm_std::Timestamp, + end_time: cosmwasm_std::Timestamp, + circuit_type: Uint256, + certification_system: Uint256, + whitelist_backend_pubkey: String, + // The following parameters are hardcoded in the contract: + // whitelist_voting_power_args: slope mode (one person one vote) + }, + + // Create AMACI round via registry + CreateAmaciRound { + operator: Addr, + max_voter: Uint256, + voice_credit_amount: Uint256, + vote_option_map: Vec, + round_info: RoundInfo, + voting_time: VotingTime, + whitelist: Option, + pre_deactivate_root: Uint256, + circuit_type: Uint256, + certification_system: Uint256, + oracle_whitelist_pubkey: Option, + pre_deactivate_coordinator: Option, + }, + + // API MACI management + SetRoundInfo { + contract_addr: String, + round_info: RoundInfo, + }, + SetVoteOptionsMap { + contract_addr: String, + vote_option_map: Vec, + }, +} + +#[cw_serde] +#[derive(QueryResponses)] +pub enum QueryMsg { + #[returns(Config)] + Config {}, + + #[returns(Vec)] + Operators {}, + + #[returns(bool)] + IsOperator { address: Addr }, + + #[returns(Uint128)] + Balance {}, + + #[returns(u64)] + MaciCodeId {}, + + #[returns(Addr)] + TreasuryManager {}, +} + +#[cw_serde] +pub struct MigrateMsg {} + +#[cw_serde] +pub struct InstantiationData { + pub addr: Addr, +} diff --git a/contracts/api-saas/src/multitest/mod.rs b/contracts/api-saas/src/multitest/mod.rs new file mode 100644 index 0000000..11cf662 --- /dev/null +++ b/contracts/api-saas/src/multitest/mod.rs @@ -0,0 +1,371 @@ +#[cfg(test)] +mod tests; + +use anyhow::Result as AnyResult; +use cosmwasm_std::testing::{MockApi, MockStorage}; +use cosmwasm_std::{Addr, Coin, Empty, StdResult, Timestamp, Uint128, Uint256}; +use cw_amaci::state::RoundInfo; +use cw_multi_test::{ + no_init, AppBuilder, AppResponse, BankKeeper, ContractWrapper, DistributionKeeper, Executor, + FailingModule, GovFailingModule, IbcFailingModule, StakeKeeper, StargateAccepting, WasmKeeper, +}; + +use crate::{ + contract::{execute, instantiate, migrate, query, reply}, + msg::*, + state::{Config, OperatorInfo}, +}; + +pub const DORA_DEMON: &str = "peaka"; + +// Note: Mock feegrant functionality removed as it's handled by Oracle MACI contract + +pub type App = cw_multi_test::App< + BankKeeper, + MockApi, + MockStorage, + FailingModule, + WasmKeeper, + StakeKeeper, + DistributionKeeper, + IbcFailingModule, + GovFailingModule, + StargateAccepting, +>; + +pub fn create_app() -> App { + AppBuilder::new() + .with_stargate(StargateAccepting) + .build(no_init) +} + +#[derive(Clone, Debug, Copy)] +pub struct SaasCodeId(u64); + +impl SaasCodeId { + pub fn store_code(app: &mut App) -> Self { + let contract = ContractWrapper::new(execute, instantiate, query) + .with_migrate(migrate) + .with_reply(reply); + let code_id = app.store_code(Box::new(contract)); + Self(code_id) + } + + pub fn instantiate( + self, + app: &mut App, + sender: Addr, + admin: Addr, + treasury_manager: Addr, + registry_contract: Addr, + denom: String, + oracle_maci_code_id: u64, + label: &str, + ) -> AnyResult { + SaasContract::instantiate( + app, + self, + sender, + admin, + treasury_manager, + registry_contract, + denom, + oracle_maci_code_id, + label, + ) + } +} + +impl From for u64 { + fn from(code_id: SaasCodeId) -> Self { + code_id.0 + } +} + +#[derive(Clone, Debug)] +pub struct SaasContract(Addr); + +impl SaasContract { + fn addr(&self) -> Addr { + self.0.clone() + } + + #[track_caller] + pub fn instantiate( + app: &mut App, + code_id: SaasCodeId, + sender: Addr, + admin: Addr, + treasury_manager: Addr, + registry_contract: Addr, + denom: String, + maci_code_id: u64, + label: &str, + ) -> AnyResult { + let init_msg = InstantiateMsg { + admin, + treasury_manager, + registry_contract, + denom, + maci_code_id, + }; + + app.instantiate_contract(code_id.0, sender, &init_msg, &[], label, None) + .map(Self) + } + + #[track_caller] + pub fn update_config( + &self, + app: &mut App, + sender: Addr, + admin: Option, + denom: Option, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::UpdateConfig { admin, denom }, + &[], + ) + } + + #[track_caller] + pub fn add_operator( + &self, + app: &mut App, + sender: Addr, + operator: Addr, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::AddOperator { operator }, + &[], + ) + } + + #[track_caller] + pub fn remove_operator( + &self, + app: &mut App, + sender: Addr, + operator: Addr, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::RemoveOperator { operator }, + &[], + ) + } + + #[track_caller] + pub fn deposit(&self, app: &mut App, sender: Addr, funds: &[Coin]) -> AnyResult { + app.execute_contract(sender, self.addr(), &ExecuteMsg::Deposit {}, funds) + } + + #[track_caller] + pub fn withdraw( + &self, + app: &mut App, + sender: Addr, + amount: Uint128, + recipient: Option, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::Withdraw { amount, recipient }, + &[], + ) + } + + #[track_caller] + pub fn update_maci_code_id( + &self, + app: &mut App, + sender: Addr, + code_id: u64, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::UpdateMaciCodeId { code_id }, + &[], + ) + } + + #[track_caller] + pub fn create_api_maci_round( + &self, + app: &mut App, + sender: Addr, + coordinator: PubKey, + max_voters: u128, + vote_option_map: Vec, + round_info: RoundInfo, + start_time: Timestamp, + end_time: Timestamp, + circuit_type: cosmwasm_std::Uint256, + certification_system: cosmwasm_std::Uint256, + whitelist_backend_pubkey: String, + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::CreateMaciRound { + coordinator, + max_voters, + vote_option_map, + round_info, + start_time, + end_time, + circuit_type, + certification_system, + whitelist_backend_pubkey, + }, + &[], + ) + } + + #[track_caller] + pub fn create_amaci_round( + &self, + app: &mut App, + sender: Addr, + operator: Addr, + max_voter: Uint256, + voice_credit_amount: Uint256, + vote_option_map: Vec, + round_info: RoundInfo, + voting_time: cw_amaci::state::VotingTime, + whitelist: Option, + pre_deactivate_root: Uint256, + circuit_type: Uint256, + certification_system: Uint256, + oracle_whitelist_pubkey: Option, + funds: &[Coin], + ) -> AnyResult { + app.execute_contract( + sender, + self.addr(), + &ExecuteMsg::CreateAmaciRound { + operator, + max_voter, + voice_credit_amount, + vote_option_map, + round_info, + voting_time, + whitelist, + pre_deactivate_root, + circuit_type, + certification_system, + oracle_whitelist_pubkey, + pre_deactivate_coordinator: None, + }, + funds, + ) + } + + // Query methods + pub fn query_config(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::Config {}) + } + + pub fn query_operators(&self, app: &App) -> StdResult> { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::Operators {}) + } + + pub fn query_is_operator(&self, app: &App, address: Addr) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::IsOperator { address }) + } + + pub fn query_balance(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::Balance {}) + } + + pub fn query_maci_code_id(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::MaciCodeId {}) + } + + pub fn query_treasury_manager(&self, app: &App) -> StdResult { + app.wrap() + .query_wasm_smart(self.addr(), &QueryMsg::TreasuryManager {}) + } + + pub fn balance_of(&self, app: &App, address: String, denom: String) -> StdResult { + app.wrap().query_balance(address, denom) + } + + // Note: Feegrant query functions removed as they're handled by Oracle MACI contract +} + +impl From for SaasContract { + fn from(value: Addr) -> Self { + Self(value) + } +} + +// Helper functions for creating test addresses +pub fn admin() -> Addr { + Addr::unchecked("admin") +} + +pub fn creator() -> Addr { + Addr::unchecked("creator") +} + +pub fn operator1() -> Addr { + Addr::unchecked("operator1") +} + +pub fn operator2() -> Addr { + Addr::unchecked("operator2") +} + +pub fn operator3() -> Addr { + Addr::unchecked("operator3") +} + +pub fn user1() -> Addr { + Addr::unchecked("user1") +} + +pub fn user2() -> Addr { + Addr::unchecked("user2") +} + +pub fn user3() -> Addr { + Addr::unchecked("user3") +} + +pub fn mock_registry_contract() -> Addr { + Addr::unchecked("registry_contract") +} + +pub fn treasury_manager() -> Addr { + Addr::unchecked("treasury_manager") +} + +// Helper function to create test round info +pub fn test_round_info() -> RoundInfo { + RoundInfo { + title: "Test Round".to_string(), + description: "A test voting round".to_string(), + link: "https://example.com".to_string(), + } +} + +// Helper function to create test voting time (for legacy AMACI tests) +pub fn test_voting_time() -> cw_amaci::state::VotingTime { + cw_amaci::state::VotingTime { + start_time: Timestamp::from_seconds(1640995200), // 2022-01-01 + end_time: Timestamp::from_seconds(1641081600), // 2022-01-02 + } +} diff --git a/contracts/api-saas/src/multitest/tests.rs b/contracts/api-saas/src/multitest/tests.rs new file mode 100644 index 0000000..40b03f8 --- /dev/null +++ b/contracts/api-saas/src/multitest/tests.rs @@ -0,0 +1,1311 @@ +use cosmwasm_std::{coins, Addr, Uint128, Uint256}; +use cw_multi_test::{AppBuilder, Contract, ContractWrapper, Executor, StargateAccepting}; + +use crate::error::ContractError; +use crate::msg::{ExecuteMsg, PubKey}; +use crate::multitest::{ + admin, create_app, creator, operator1, operator2, treasury_manager, user1, user2, SaasCodeId, + DORA_DEMON, +}; +use cw_amaci::multitest::uint256_from_decimal_string; +use cw_api_maci; +use cw_api_maci::state::RoundInfo as OracleMaciRoundInfo; + +#[test] +fn test_instantiate_saas_contract() { + let mut app = create_app(); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Verify config + let config = contract.query_config(&app).unwrap(); + assert_eq!(config.admin, admin()); + assert_eq!(config.denom, DORA_DEMON); + + // Verify treasury manager query + let queried_treasury_manager = contract.query_treasury_manager(&app).unwrap(); + assert_eq!(queried_treasury_manager, treasury_manager()); + + // Verify initial balance is zero + let balance = contract.query_balance(&app).unwrap(); + assert_eq!(balance, Uint128::zero()); + + // Verify no operators initially + let operators = contract.query_operators(&app).unwrap(); + assert!(operators.is_empty()); + + // Verify oracle maci code id is set correctly + let stored_code_id = contract.query_maci_code_id(&app).unwrap(); + assert_eq!(stored_code_id, oracle_maci_code_id); +} + +#[test] +fn test_update_config() { + let mut app = create_app(); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + let new_admin = user1(); + + // Update config as admin + contract + .update_config(&mut app, admin(), Some(new_admin.clone()), None) + .unwrap(); + + // Verify config updated + let config = contract.query_config(&app).unwrap(); + assert_eq!(config.admin, new_admin); + + // Try to update as non-admin (should fail) + let err = contract + .update_config(&mut app, user2(), Some(admin()), None) + .unwrap_err(); + assert!(err.to_string().contains("Error executing WasmMsg")); +} + +#[test] +fn test_operator_management() { + let mut app = create_app(); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Add operator as admin + contract + .add_operator(&mut app, admin(), operator1()) + .unwrap(); + + // Verify operator was added + let is_operator = contract.query_is_operator(&app, operator1()).unwrap(); + assert!(is_operator); + + let operators = contract.query_operators(&app).unwrap(); + assert_eq!(operators.len(), 1); + assert_eq!(operators[0].address, operator1()); + + // Try to add same operator again (should fail) + let err = contract + .add_operator(&mut app, admin(), operator1()) + .unwrap_err(); + assert!(err.to_string().contains("Error executing WasmMsg")); + + // Add second operator + contract + .add_operator(&mut app, admin(), operator2()) + .unwrap(); + + let operators = contract.query_operators(&app).unwrap(); + assert_eq!(operators.len(), 2); + + // Remove operator + contract + .remove_operator(&mut app, admin(), operator1()) + .unwrap(); + + let is_operator = contract.query_is_operator(&app, operator1()).unwrap(); + assert!(!is_operator); + + let operators = contract.query_operators(&app).unwrap(); + assert_eq!(operators.len(), 1); + assert_eq!(operators[0].address, operator2()); + + // Try to remove non-existent operator (should fail) + let err = contract + .remove_operator(&mut app, admin(), operator1()) + .unwrap_err(); + assert!(err.to_string().contains("Error executing WasmMsg")); + + // Try to add operator as non-admin (should fail) + let err = contract + .add_operator(&mut app, user1(), operator1()) + .unwrap_err(); + assert!(err.to_string().contains("Error executing WasmMsg")); +} + +#[test] +fn test_deposit_and_withdraw() { + let deposit_amount = 1000000u128; + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(deposit_amount, DORA_DEMON)) + .unwrap(); + }); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Deposit funds + contract + .deposit(&mut app, user1(), &coins(deposit_amount, DORA_DEMON)) + .unwrap(); + + // Check balance + let balance = contract.query_balance(&app).unwrap(); + assert_eq!(balance, Uint128::from(deposit_amount)); + + // Try to deposit without funds (should fail) + let err = contract.deposit(&mut app, user1(), &[]).unwrap_err(); + assert!(err.to_string().contains("Error executing WasmMsg")); + + // Withdraw funds as treasury manager + let withdraw_amount = Uint128::from(500000u128); + contract + .withdraw(&mut app, treasury_manager(), withdraw_amount, None) + .unwrap(); + + // Check balance updated + let balance = contract.query_balance(&app).unwrap(); + assert_eq!(balance, Uint128::from(deposit_amount) - withdraw_amount); + + // Try to withdraw as non-admin (should fail) + let err = contract + .withdraw(&mut app, user1(), withdraw_amount, None) + .unwrap_err(); + assert!(err.to_string().contains("Error executing WasmMsg")); + + // Try to withdraw zero amount (should fail) + let err = contract + .withdraw(&mut app, admin(), Uint128::zero(), None) + .unwrap_err(); + assert!(err.to_string().contains("Error executing WasmMsg")); + + // Try to withdraw more than balance (should fail) + let err = contract + .withdraw(&mut app, admin(), Uint128::from(1000000u128), None) + .unwrap_err(); + assert!(err.to_string().contains("Error executing WasmMsg")); +} + +#[test] +fn test_create_api_maci_round_success() { + let initial_balance = 1000000000000000000000u128; // 1000 DORA + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance(storage, &operator1(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + }); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Add operator and deposit funds + contract + .add_operator(&mut app, admin(), operator1()) + .unwrap(); + contract + .deposit(&mut app, user1(), &coins(initial_balance, DORA_DEMON)) + .unwrap(); + + let initial_balance_check = contract.query_balance(&app).unwrap(); + assert_eq!(initial_balance_check, Uint128::from(initial_balance)); + + // Create Oracle MACI round + let max_voters = 5u128; + let create_msg = ExecuteMsg::CreateMaciRound { + coordinator: PubKey { + x: Uint256::from(1u32), + y: Uint256::from(2u32), + }, + max_voters, + vote_option_map: vec!["Option 1".to_string()], + round_info: cw_amaci::state::RoundInfo { + title: "Test Round".to_string(), + description: "Test Description".to_string(), + link: "https://test.com".to_string(), + }, + start_time: cosmwasm_std::Timestamp::from_seconds(1640995200), // 2022-01-01 + end_time: cosmwasm_std::Timestamp::from_seconds(1641081600), // 2022-01-02 + circuit_type: Uint256::zero(), + certification_system: Uint256::zero(), + whitelist_backend_pubkey: "dGVzdA==".to_string(), + }; + + let result = app.execute_contract(operator1(), contract.addr(), &create_msg, &[]); + + // Oracle MACI creation should succeed + if let Err(e) = &result { + println!("Error creating Oracle MACI round: {:?}", e); + } + assert!( + result.is_ok(), + "Oracle MACI round creation should succeed: {:?}", + result.err() + ); + + let response = result.unwrap(); + + // Verify Oracle MACI contract was instantiated + let _instantiate_event = response + .events + .iter() + .find(|e| e.ty == "instantiate") + .expect("Should have instantiate event"); + + // Note: No fees are deducted anymore as funds logic is removed + + // Verify balance remains unchanged + let final_balance = contract.query_balance(&app).unwrap(); + assert_eq!(final_balance, Uint128::from(initial_balance)); + + // Note: MACI tracking functionality removed - contracts are created but not tracked in SaaS contract +} + +#[test] +fn test_create_api_maci_round_unauthorized() { + let mut app = create_app(); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + let create_msg = ExecuteMsg::CreateMaciRound { + coordinator: PubKey { + x: uint256_from_decimal_string( + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + ), + y: uint256_from_decimal_string( + "4363822302427519764561660537570341277214758164895027920046745209970137856681", + ), + }, + max_voters: 5, + vote_option_map: vec!["Option 1".to_string()], + round_info: cw_amaci::state::RoundInfo { + title: "Test Round".to_string(), + description: "Test Description".to_string(), + link: "https://test.com".to_string(), + }, + start_time: cosmwasm_std::Timestamp::from_seconds(1753920000), // 2022-01-01 + end_time: cosmwasm_std::Timestamp::from_seconds(1754006400), // 2022-01-02 + circuit_type: Uint256::zero(), + certification_system: Uint256::zero(), + whitelist_backend_pubkey: "AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ".to_string(), + }; + + // Try to create round as non-operator (should fail with Unauthorized) + let result = app.execute_contract(user1(), contract.addr(), &create_msg, &[]); + + assert!( + result.is_err(), + "Non-operator should not be able to create Oracle MACI round" + ); + + let error = result.unwrap_err(); + assert_eq!( + error.downcast::().unwrap(), + ContractError::Unauthorized {} + ); +} + +#[test] +fn test_create_api_maci_round_with_minimal_funds() { + let initial_balance = 10000000000000000000u128; // 10 DORA - previously insufficient, now enough + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance(storage, &operator1(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + }); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Add operator and deposit funds + contract + .add_operator(&mut app, admin(), operator1()) + .unwrap(); + contract + .deposit(&mut app, user1(), &coins(initial_balance, DORA_DEMON)) + .unwrap(); + + let create_msg = ExecuteMsg::CreateMaciRound { + coordinator: PubKey { + x: Uint256::from(1u32), + y: Uint256::from(2u32), + }, + max_voters: 100, // No longer requires any specific token amount + vote_option_map: vec!["Option 1".to_string()], + round_info: cw_amaci::state::RoundInfo { + title: "Test Round".to_string(), + description: "Test Description".to_string(), + link: "https://test.com".to_string(), + }, + start_time: cosmwasm_std::Timestamp::from_seconds(1640995200), // 2022-01-01 + end_time: cosmwasm_std::Timestamp::from_seconds(1641081600), // 2022-01-02 + circuit_type: Uint256::zero(), + certification_system: Uint256::zero(), + whitelist_backend_pubkey: "dGVzdA==".to_string(), + }; + + // Should now succeed since no funds checking is done + let result = app.execute_contract(operator1(), contract.addr(), &create_msg, &[]); + + assert!(result.is_ok(), "Should succeed without funds checking"); + + // Verify balance remains unchanged + let final_balance = contract.query_balance(&app).unwrap(); + assert_eq!(final_balance, Uint128::from(initial_balance)); +} + +#[test] +fn test_oracle_maci_round_management() { + let initial_balance = 1000000000000000000000u128; // 1000 DORA + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance(storage, &operator1(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + }); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Setup: add operator and deposit funds + contract + .add_operator(&mut app, admin(), operator1()) + .unwrap(); + contract + .deposit(&mut app, user1(), &coins(initial_balance, DORA_DEMON)) + .unwrap(); + + // Create Oracle MACI round first + let create_msg = ExecuteMsg::CreateMaciRound { + coordinator: PubKey { + x: uint256_from_decimal_string( + "3557592161792765812904087712812111121909518311142005886657252371904276697771", + ), + y: uint256_from_decimal_string( + "4363822302427519764561660537570341277214758164895027920046745209970137856681", + ), + }, + max_voters: 5, + vote_option_map: vec!["Option 1".to_string()], + round_info: cw_amaci::state::RoundInfo { + title: "Test Round".to_string(), + description: "Test Description".to_string(), + link: "https://test.com".to_string(), + }, + start_time: cosmwasm_std::Timestamp::from_seconds(1753920000), // 2022-01-01 + end_time: cosmwasm_std::Timestamp::from_seconds(1754006400), // 2022-01-02 + circuit_type: Uint256::zero(), + certification_system: Uint256::zero(), + whitelist_backend_pubkey: "AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ".to_string(), + }; + + let create_result = app.execute_contract(operator1(), contract.addr(), &create_msg, &[]); + if let Err(e) = &create_result { + println!("Error creating Oracle MACI round: {:?}", e); + } + assert!( + create_result.is_ok(), + "Oracle MACI round creation should succeed: {:?}", + create_result.err() + ); + + let response = create_result.unwrap(); + + // Note: fee_grant_amount verification removed as feegrant is handled by Oracle MACI contract + + // Get the created contract address from events + let oracle_maci_addr = extract_contract_address_from_events(&response.events); + println!("========= oracle_maci_addr: {}", oracle_maci_addr); + + // Query and print Oracle MACI round info + let round_info_query_msg = serde_json::json!({ + "get_round_info": {} + }); + + let round_info_result: Result = app + .wrap() + .query_wasm_smart(oracle_maci_addr.clone(), &round_info_query_msg); + + match round_info_result { + Ok(round_info) => { + println!("========= Oracle MACI Round Info =========="); + println!("Title: {}", round_info.title); + println!("Description: {}", round_info.description); + println!("Link: {}", round_info.link); + println!("=========================================="); + } + Err(e) => { + println!("Failed to query round info: {:?}", e); + } + } + + let create_result_again = app.execute_contract(operator1(), contract.addr(), &create_msg, &[]); + if let Err(e) = &create_result_again { + println!("Error creating Oracle MACI round again: {:?}", e); + } + assert!( + create_result_again.is_ok(), + "Oracle MACI round creation should succeed: {:?}", + create_result_again.err() + ); + + // Get the created contract address from events + let oracle_maci_addr_again = + extract_contract_address_from_events(&create_result_again.unwrap().events); + println!( + "========= oracle_maci_addr_again: {}", + oracle_maci_addr_again + ); + + // Query and print second Oracle MACI round info + let round_info_query_msg_again = serde_json::json!({ + "get_round_info": {} + }); + + let round_info_result_again: Result = app + .wrap() + .query_wasm_smart(oracle_maci_addr_again.clone(), &round_info_query_msg_again); + + match round_info_result_again { + Ok(round_info) => { + println!("====== Second Oracle MACI Round Info ======"); + println!("Title: {}", round_info.title); + println!("Description: {}", round_info.description); + println!("Link: {}", round_info.link); + println!("==========================================="); + } + Err(e) => { + println!("Failed to query second round info: {:?}", e); + } + } + // Test round info management + let updated_round_info = cw_amaci::state::RoundInfo { + title: "Updated Round Title".to_string(), + description: "Updated Description".to_string(), + link: "https://updated-test.com".to_string(), + }; + + let set_round_info_msg = ExecuteMsg::SetRoundInfo { + contract_addr: oracle_maci_addr.clone(), + round_info: updated_round_info, + }; + + // Operator should be able to update round info (may fail due to test environment but should pass authorization) + let result = app.execute_contract(operator1(), contract.addr(), &set_round_info_msg, &[]); + // In test environment this may fail due to target contract not existing, but not due to authorization + if let Err(e) = &result { + let error_msg = e.to_string(); + assert!( + !error_msg.contains("Unauthorized"), + "Should not fail due to authorization" + ); + } + + // Non-operator should not be able to update round info + let result = app.execute_contract(user1(), contract.addr(), &set_round_info_msg, &[]); + assert!( + result.is_err(), + "Non-operator should not be able to update round info" + ); + assert_eq!( + result.unwrap_err().downcast::().unwrap(), + ContractError::Unauthorized {} + ); + + // Test vote options management + let updated_vote_options = vec![ + "Strongly Support".to_string(), + "Support".to_string(), + "Neutral".to_string(), + "Oppose".to_string(), + "Strongly Oppose".to_string(), + ]; + + let set_vote_options_msg = ExecuteMsg::SetVoteOptionsMap { + contract_addr: oracle_maci_addr.clone(), + vote_option_map: updated_vote_options, + }; + + // Operator should be able to update vote options + let result = app.execute_contract(operator1(), contract.addr(), &set_vote_options_msg, &[]); + if let Err(e) = &result { + let error_msg = e.to_string(); + assert!( + !error_msg.contains("Unauthorized"), + "Should not fail due to authorization" + ); + } + + // Note: Fee grant management functionality has been removed as it's + // handled directly by the Oracle MACI contract +} + +// Helper function to extract contract address from events +fn extract_contract_address_from_events(events: &[cosmwasm_std::Event]) -> String { + for event in events { + if event.ty == "instantiate" { + for attr in &event.attributes { + if attr.key == "_contract_address" { + return attr.value.clone(); + } + } + } + } + "contract1".to_string() // Default fallback for test +} + +// Note: test_operator_feegrant_lifecycle test removed as feegrant functionality +// is now handled directly by the Oracle MACI contract + +#[test] +fn test_treasury_manager_withdraw_success() { + let deposit_amount = Uint128::from(1000u128); + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + }); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Deposit funds first + let deposit_amount = Uint128::from(1000u128); + contract + .deposit(&mut app, user1(), &coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + + // Verify balance + let balance = contract.query_balance(&app).unwrap(); + assert_eq!(balance, deposit_amount); + + // Treasury manager withdraws funds + let withdraw_amount = Uint128::from(500u128); + let response = contract + .withdraw(&mut app, treasury_manager(), withdraw_amount, Some(user2())) + .unwrap(); + + // Verify response attributes + let attrs: Vec<_> = response.events.iter().flat_map(|e| &e.attributes).collect(); + let action_attr = attrs.iter().find(|attr| attr.key == "action").unwrap(); + assert_eq!(action_attr.value, "withdraw"); + + // Verify new balance + let new_balance = contract.query_balance(&app).unwrap(); + assert_eq!(new_balance, deposit_amount - withdraw_amount); +} + +#[test] +fn test_admin_withdraw_fails() { + let deposit_amount = Uint128::from(1000u128); + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + }); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Deposit funds first + contract + .deposit(&mut app, user1(), &coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + + // Admin tries to withdraw (should fail) + let withdraw_amount = Uint128::from(500u128); + let err = contract + .withdraw(&mut app, admin(), withdraw_amount, None) + .unwrap_err(); + + // Should get TreasuryManagerUnauthorized error + assert!(err.to_string().contains("Error executing WasmMsg")); +} + +#[test] +fn test_treasury_manager_cannot_manage_operators() { + let mut app = create_app(); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Treasury manager tries to add operator (should fail) + let err = contract + .add_operator(&mut app, treasury_manager(), operator1()) + .unwrap_err(); + + assert!(err.to_string().contains("Error executing WasmMsg")); + + // Admin adds operator (should succeed) + contract + .add_operator(&mut app, admin(), operator1()) + .unwrap(); + + // Treasury manager tries to remove operator (should fail) + let err = contract + .remove_operator(&mut app, treasury_manager(), operator1()) + .unwrap_err(); + + assert!(err.to_string().contains("Error executing WasmMsg")); +} + +#[test] +fn test_deposit_still_public() { + let deposit_amount = Uint128::from(1000u128); + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance(storage, &user2(), coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance(storage, &admin(), coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance( + storage, + &treasury_manager(), + coins(deposit_amount.u128(), DORA_DEMON), + ) + .unwrap(); + }); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Various users can deposit + contract + .deposit(&mut app, user1(), &coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + + contract + .deposit(&mut app, user2(), &coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + + contract + .deposit(&mut app, admin(), &coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + + contract + .deposit( + &mut app, + treasury_manager(), + &coins(deposit_amount.u128(), DORA_DEMON), + ) + .unwrap(); + + // Verify total balance + let total_balance = contract.query_balance(&app).unwrap(); + assert_eq!(total_balance, deposit_amount * Uint128::from(4u128)); +} + +#[test] +fn test_role_separation_complete_workflow() { + let deposit_amount = Uint128::from(2000u128); + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + }); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Step 1: Public deposits funds + contract + .deposit(&mut app, user1(), &coins(deposit_amount.u128(), DORA_DEMON)) + .unwrap(); + + // Step 2: Admin manages operators + contract + .add_operator(&mut app, admin(), operator1()) + .unwrap(); + + let is_operator = contract.query_is_operator(&app, operator1()).unwrap(); + assert!(is_operator); + + // Step 3: Treasury manager withdraws funds + let withdraw_amount = Uint128::from(1000u128); + contract + .withdraw(&mut app, treasury_manager(), withdraw_amount, Some(user2())) + .unwrap(); + + // Step 4: Verify balances + let remaining_balance = contract.query_balance(&app).unwrap(); + assert_eq!(remaining_balance, deposit_amount - withdraw_amount); + + // Step 5: Treasury manager is immutable - only the original treasury manager can withdraw + let second_withdraw = Uint128::from(500u128); + contract + .withdraw(&mut app, treasury_manager(), second_withdraw, Some(user1())) + .unwrap(); + + // Step 6: Verify non-treasury manager (user2) cannot withdraw + let err = contract + .withdraw(&mut app, user2(), Uint128::from(100u128), None) + .unwrap_err(); + + assert!(err.to_string().contains("Error executing WasmMsg")); + + // Verify final balance + let final_balance = contract.query_balance(&app).unwrap(); + assert_eq!( + final_balance, + deposit_amount - withdraw_amount - second_withdraw + ); +} + +#[test] +fn test_migration_sets_treasury_manager() { + let mut app = create_app(); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let code_id = SaasCodeId::store_code(&mut app); + let contract = code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + crate::multitest::mock_registry_contract(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Verify treasury manager is set correctly after instantiation + let queried_treasury_manager = contract.query_treasury_manager(&app).unwrap(); + assert_eq!(queried_treasury_manager, treasury_manager()); + + // Verify treasury manager is still accessible via query + let queried_treasury_manager = contract.query_treasury_manager(&app).unwrap(); + assert_eq!(queried_treasury_manager, treasury_manager()); + + // Migration scenario would be tested in integration tests + // where we deploy an old version without treasury_manager + // and then migrate to new version +} + +// Oracle MACI contract wrapper for testing +fn oracle_maci_contract() -> Box> { + let contract = ContractWrapper::new( + cw_api_maci::contract::execute, + cw_api_maci::contract::instantiate, + cw_api_maci::contract::query, + ) + .with_reply(cw_api_maci::contract::reply); + Box::new(contract) +} + +// Real Registry and AMACI contract wrappers for integration testing +fn real_registry_contract() -> Box> { + let contract = ContractWrapper::new( + cw_amaci_registry::contract::execute, + cw_amaci_registry::contract::instantiate, + cw_amaci_registry::contract::query, + ) + .with_reply(cw_amaci_registry::contract::reply); + Box::new(contract) +} + +fn real_amaci_contract() -> Box> { + let contract = ContractWrapper::new( + cw_amaci::contract::execute, + cw_amaci::contract::instantiate, + cw_amaci::contract::query, + ); + Box::new(contract) +} + +// ========= CreateAmaciRound Tests ========= + +#[test] +fn test_create_amaci_round_success_real() { + let initial_balance = 50000000000000000000u128; // 50 DORA - enough for any fee + let mut app = AppBuilder::default() + .with_stargate(StargateAccepting) + .build(|router, _api, storage| { + router + .bank + .init_balance(storage, &user1(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance(storage, &operator1(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance(storage, &admin(), coins(initial_balance, DORA_DEMON)) + .unwrap(); + router + .bank + .init_balance( + storage, + &treasury_manager(), + coins(initial_balance, DORA_DEMON), + ) + .unwrap(); + // Give dora operator some funds for gas + router + .bank + .init_balance( + storage, + &Addr::unchecked("dora1eu7mhp4ggxd6utnz8uzurw395natgs6jskl4ug"), + coins(1000000000000000000u128, DORA_DEMON), + ) + .unwrap(); + }); + + // Store contracts + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let amaci_code_id = app.store_code(real_amaci_contract()); + let registry_code_id = app.store_code(real_registry_contract()); + let saas_code_id = SaasCodeId::store_code(&mut app); + + // Instantiate real registry with AMACI code ID + let registry_addr = app + .instantiate_contract( + registry_code_id, + admin(), + &cw_amaci_registry::msg::InstantiateMsg { + admin: admin(), + operator: admin(), // admin is also operator for simplicity + amaci_code_id, + }, + &[], + "Real Registry", + None, + ) + .unwrap(); + + // Set validators (only admin can do this) + app.execute_contract( + admin(), + registry_addr.clone(), + &cw_amaci_registry::msg::ExecuteMsg::SetValidators { + addresses: cw_amaci_registry::state::ValidatorSet { + addresses: vec![admin()], // admin is also validator + }, + }, + &[], + ) + .unwrap(); + + // Set maci operator (validator can do this) + let dora_operator = Addr::unchecked("dora1eu7mhp4ggxd6utnz8uzurw395natgs6jskl4ug"); + app.execute_contract( + admin(), // admin as validator + registry_addr.clone(), + &cw_amaci_registry::msg::ExecuteMsg::SetMaciOperator { + operator: dora_operator.clone(), // set dora operator + }, + &[], + ) + .unwrap(); + + // Set operator pubkey in registry (operator can do this) + let pubkey = cw_amaci::state::PubKey { + x: Uint256::from(1u128), + y: Uint256::from(2u128), + }; + app.execute_contract( + dora_operator.clone(), // dora operator sets own pubkey + registry_addr.clone(), + &cw_amaci_registry::msg::ExecuteMsg::SetMaciOperatorPubkey { pubkey }, + &[], + ) + .unwrap(); + + // Instantiate SaaS contract with real registry address + let contract = saas_code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + registry_addr.clone(), + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Add operator to SaaS contract + contract + .add_operator(&mut app, admin(), operator1()) + .unwrap(); + + // Deposit funds to SaaS contract to pay for the round creation + let required_fee = 20000000000000000000u128; // 20 DORA + contract + .deposit( + &mut app, + treasury_manager(), + &coins(required_fee, DORA_DEMON), + ) + .unwrap(); + + // Create AMACI round parameters + let dora_operator = Addr::unchecked("dora1eu7mhp4ggxd6utnz8uzurw395natgs6jskl4ug"); // Use valid dora address + let max_voter = Uint256::from(25u128); + let voice_credit_amount = Uint256::from(100u128); + let round_info = crate::multitest::test_round_info(); + let voting_time = crate::multitest::test_voting_time(); + let circuit_type = Uint256::zero(); + let certification_system = Uint256::zero(); + + // Create AMACI round via SaaS contract (no funds sent, uses SaaS balance) + let result = contract.create_amaci_round( + &mut app, + operator1(), // sender (must be operator in SaaS) + dora_operator, // operator parameter (must be operator in registry) + max_voter, + voice_credit_amount, + vec![ + "Candidate A".to_string(), + "Candidate B".to_string(), + "Candidate C".to_string(), + "Candidate D".to_string(), + "Candidate E".to_string(), + ], // vote_option_map + round_info.clone(), + voting_time, + None, // no whitelist + Uint256::zero(), // pre_deactivate_root + circuit_type, + certification_system, + None, // oracle_whitelist_pubkey + &[], // No funds sent - using SaaS contract balance + ); + + // Should succeed + assert!( + result.is_ok(), + "AMACI round creation should succeed: {:?}", + result.err() + ); + + let response = result.unwrap(); + + // Print all events and attributes for verification + println!("=== AMACI Round Creation Events ==="); + for (event_idx, event) in response.events.iter().enumerate() { + println!("Event {}: {}", event_idx, event.ty); + for attr in &event.attributes { + println!(" {}: {}", attr.key, attr.value); + } + println!(); + } + println!("=== End Events ==="); + + // Verify response attributes + let attrs: Vec<_> = response.events.iter().flat_map(|e| &e.attributes).collect(); + + // Check SaaS contract attributes + let action_attr = attrs.iter().find(|attr| attr.key == "action").unwrap(); + assert_eq!(action_attr.value, "create_amaci_round"); + + let registry_attr = attrs + .iter() + .find(|attr| attr.key == "registry_contract") + .unwrap(); + assert_eq!(registry_attr.value, registry_addr.to_string()); + + let round_title_attr = attrs.iter().find(|attr| attr.key == "round_title").unwrap(); + assert_eq!(round_title_attr.value, round_info.title); + + // Check that a real AMACI contract was created (we should get a real contract address) + let round_addr_attr = attrs.iter().find(|attr| attr.key == "round_addr"); + assert!( + round_addr_attr.is_some(), + "Should have round_addr attribute" + ); + let amaci_contract_addr = round_addr_attr.unwrap().value.clone(); + + // The AMACI contract address should be a valid contract address, not our mock value + assert_ne!(amaci_contract_addr, "contract42"); + println!("Got AMACI contract address: {}", amaci_contract_addr); + assert!( + !amaci_contract_addr.is_empty(), + "AMACI contract address should not be empty" + ); + + // Verify the AMACI contract exists by querying its round info + let round_info_query: cw_amaci::state::RoundInfo = app + .wrap() + .query_wasm_smart( + amaci_contract_addr, + &cw_amaci::msg::QueryMsg::GetRoundInfo {}, + ) + .unwrap(); + + assert_eq!(round_info_query.title, round_info.title); + assert_eq!(round_info_query.description, round_info.description); + assert_eq!(round_info_query.link, round_info.link); +} + +#[test] +fn test_create_amaci_round_unauthorized_real() { + let mut app = create_app(); + + let oracle_maci_code_id = app.store_code(oracle_maci_contract()); + let amaci_code_id = app.store_code(real_amaci_contract()); + let registry_code_id = app.store_code(real_registry_contract()); + let saas_code_id = SaasCodeId::store_code(&mut app); + + // Instantiate real registry + let registry_addr = app + .instantiate_contract( + registry_code_id, + admin(), + &cw_amaci_registry::msg::InstantiateMsg { + admin: admin(), + operator: admin(), + amaci_code_id, + }, + &[], + "Real Registry", + None, + ) + .unwrap(); + + // Instantiate SaaS contract + let contract = saas_code_id + .instantiate( + &mut app, + creator(), + admin(), + treasury_manager(), + registry_addr, + DORA_DEMON.to_string(), + oracle_maci_code_id, + "SaaS Contract", + ) + .unwrap(); + + // Don't add user1 as operator in SaaS contract + + // Try to create AMACI round as non-operator + let result = contract.create_amaci_round( + &mut app, + user1(), // sender (not an operator in SaaS) + admin(), // operator parameter + Uint256::from(25u128), // max_voter + Uint256::from(100u128), // voice_credit_amount + vec![ + "Test Option 1".to_string(), + "Test Option 2".to_string(), + "Test Option 3".to_string(), + "Test Option 4".to_string(), + "Test Option 5".to_string(), + ], // vote_option_map + crate::multitest::test_round_info(), + crate::multitest::test_voting_time(), + None, // no whitelist + Uint256::zero(), // pre_deactivate_root + Uint256::zero(), // circuit_type + Uint256::zero(), // certification_system + None, // oracle_whitelist_pubkey + &[], // no fee (will fail before fee checking) + ); + + // Should fail with Unauthorized + assert!( + result.is_err(), + "Non-operator should not be able to create AMACI round" + ); + + let error = result.unwrap_err(); + assert_eq!( + error.downcast::().unwrap(), + ContractError::Unauthorized {} + ); +} diff --git a/contracts/api-saas/src/state.rs b/contracts/api-saas/src/state.rs new file mode 100644 index 0000000..9124073 --- /dev/null +++ b/contracts/api-saas/src/state.rs @@ -0,0 +1,38 @@ +use cosmwasm_schema::cw_serde; +use cosmwasm_std::{Addr, Timestamp, Uint128}; +use cw_storage_plus::{Item, Map}; + +#[cw_serde] +pub struct Config { + pub admin: Addr, + pub denom: String, +} + +impl Config { + pub fn is_admin(&self, addr: &Addr) -> bool { + self.admin == *addr + } +} + +#[cw_serde] +pub struct OperatorInfo { + pub address: Addr, + pub added_at: Timestamp, +} + +impl OperatorInfo { + pub fn new(address: Addr, added_at: Timestamp) -> Self { + Self { address, added_at } + } +} + +// Storage items +pub const CONFIG: Item = Item::new("config"); +pub const OPERATORS: Map<&Addr, OperatorInfo> = Map::new("operators"); +pub const TOTAL_BALANCE: Item = Item::new("total_balance"); + +pub const MACI_CODE_ID: Item = Item::new("maci_code_id"); +pub const REGISTRY_CONTRACT_ADDR: Item = Item::new("registry_contract_addr"); + +// Treasury manager storage for easier access and migration support +pub const TREASURY_MANAGER: Item = Item::new("treasury_manager"); diff --git a/contracts/api-saas/ts/ApiSaas.client.ts b/contracts/api-saas/ts/ApiSaas.client.ts new file mode 100644 index 0000000..5815009 --- /dev/null +++ b/contracts/api-saas/ts/ApiSaas.client.ts @@ -0,0 +1,379 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; +import { Coin, StdFee } from "@cosmjs/amino"; +import { Addr, InstantiateMsg, ExecuteMsg, Uint128, Uint256, Timestamp, Uint64, PubKey, RoundInfo, VotingTime, WhitelistBase, WhitelistBaseConfig, QueryMsg, Config, Boolean, ArrayOfOperatorInfo, OperatorInfo } from "./ApiSaas.types"; +export interface ApiSaasReadOnlyInterface { + contractAddress: string; + config: () => Promise; + operators: () => Promise; + isOperator: ({ + address + }: { + address: Addr; + }) => Promise; + balance: () => Promise; + maciCodeId: () => Promise; + treasuryManager: () => Promise; +} +export class ApiSaasQueryClient implements ApiSaasReadOnlyInterface { + client: CosmWasmClient; + contractAddress: string; + constructor(client: CosmWasmClient, contractAddress: string) { + this.client = client; + this.contractAddress = contractAddress; + this.config = this.config.bind(this); + this.operators = this.operators.bind(this); + this.isOperator = this.isOperator.bind(this); + this.balance = this.balance.bind(this); + this.maciCodeId = this.maciCodeId.bind(this); + this.treasuryManager = this.treasuryManager.bind(this); + } + config = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + config: {} + }); + }; + operators = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + operators: {} + }); + }; + isOperator = async ({ + address + }: { + address: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + is_operator: { + address + } + }); + }; + balance = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + balance: {} + }); + }; + maciCodeId = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + maci_code_id: {} + }); + }; + treasuryManager = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + treasury_manager: {} + }); + }; +} +export interface ApiSaasInterface extends ApiSaasReadOnlyInterface { + contractAddress: string; + sender: string; + updateConfig: ({ + admin, + denom + }: { + admin?: Addr; + denom?: string; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + updateMaciCodeId: ({ + codeId + }: { + codeId: number; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + updateAmaciRegistryContract: ({ + registryContract + }: { + registryContract: Addr; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + addOperator: ({ + operator + }: { + operator: Addr; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + removeOperator: ({ + operator + }: { + operator: Addr; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + deposit: (fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + withdraw: ({ + amount, + recipient + }: { + amount: Uint128; + recipient?: Addr; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + createMaciRound: ({ + certificationSystem, + circuitType, + coordinator, + endTime, + maxVoters, + roundInfo, + startTime, + voteOptionMap, + whitelistBackendPubkey + }: { + certificationSystem: Uint256; + circuitType: Uint256; + coordinator: PubKey; + endTime: Timestamp; + maxVoters: number; + roundInfo: RoundInfo; + startTime: Timestamp; + voteOptionMap: string[]; + whitelistBackendPubkey: string; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + createAmaciRound: ({ + certificationSystem, + circuitType, + maxVoter, + operator, + oracleWhitelistPubkey, + preDeactivateCoordinator, + preDeactivateRoot, + roundInfo, + voiceCreditAmount, + voteOptionMap, + votingTime, + whitelist + }: { + certificationSystem: Uint256; + circuitType: Uint256; + maxVoter: Uint256; + operator: Addr; + oracleWhitelistPubkey?: string; + preDeactivateCoordinator?: PubKey; + preDeactivateRoot: Uint256; + roundInfo: RoundInfo; + voiceCreditAmount: Uint256; + voteOptionMap: string[]; + votingTime: VotingTime; + whitelist?: WhitelistBase; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + setRoundInfo: ({ + contractAddr, + roundInfo + }: { + contractAddr: string; + roundInfo: RoundInfo; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + setVoteOptionsMap: ({ + contractAddr, + voteOptionMap + }: { + contractAddr: string; + voteOptionMap: string[]; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; +} +export class ApiSaasClient extends ApiSaasQueryClient implements ApiSaasInterface { + client: SigningCosmWasmClient; + sender: string; + contractAddress: string; + constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + super(client, contractAddress); + this.client = client; + this.sender = sender; + this.contractAddress = contractAddress; + this.updateConfig = this.updateConfig.bind(this); + this.updateMaciCodeId = this.updateMaciCodeId.bind(this); + this.updateAmaciRegistryContract = this.updateAmaciRegistryContract.bind(this); + this.addOperator = this.addOperator.bind(this); + this.removeOperator = this.removeOperator.bind(this); + this.deposit = this.deposit.bind(this); + this.withdraw = this.withdraw.bind(this); + this.createMaciRound = this.createMaciRound.bind(this); + this.createAmaciRound = this.createAmaciRound.bind(this); + this.setRoundInfo = this.setRoundInfo.bind(this); + this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this); + } + updateConfig = async ({ + admin, + denom + }: { + admin?: Addr; + denom?: string; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_config: { + admin, + denom + } + }, fee, memo, _funds); + }; + updateMaciCodeId = async ({ + codeId + }: { + codeId: number; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_maci_code_id: { + code_id: codeId + } + }, fee, memo, _funds); + }; + updateAmaciRegistryContract = async ({ + registryContract + }: { + registryContract: Addr; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_amaci_registry_contract: { + registry_contract: registryContract + } + }, fee, memo, _funds); + }; + addOperator = async ({ + operator + }: { + operator: Addr; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + add_operator: { + operator + } + }, fee, memo, _funds); + }; + removeOperator = async ({ + operator + }: { + operator: Addr; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + remove_operator: { + operator + } + }, fee, memo, _funds); + }; + deposit = async (fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + deposit: {} + }, fee, memo, _funds); + }; + withdraw = async ({ + amount, + recipient + }: { + amount: Uint128; + recipient?: Addr; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + withdraw: { + amount, + recipient + } + }, fee, memo, _funds); + }; + createMaciRound = async ({ + certificationSystem, + circuitType, + coordinator, + endTime, + maxVoters, + roundInfo, + startTime, + voteOptionMap, + whitelistBackendPubkey + }: { + certificationSystem: Uint256; + circuitType: Uint256; + coordinator: PubKey; + endTime: Timestamp; + maxVoters: number; + roundInfo: RoundInfo; + startTime: Timestamp; + voteOptionMap: string[]; + whitelistBackendPubkey: string; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + create_maci_round: { + certification_system: certificationSystem, + circuit_type: circuitType, + coordinator, + end_time: endTime, + max_voters: maxVoters, + round_info: roundInfo, + start_time: startTime, + vote_option_map: voteOptionMap, + whitelist_backend_pubkey: whitelistBackendPubkey + } + }, fee, memo, _funds); + }; + createAmaciRound = async ({ + certificationSystem, + circuitType, + maxVoter, + operator, + oracleWhitelistPubkey, + preDeactivateCoordinator, + preDeactivateRoot, + roundInfo, + voiceCreditAmount, + voteOptionMap, + votingTime, + whitelist + }: { + certificationSystem: Uint256; + circuitType: Uint256; + maxVoter: Uint256; + operator: Addr; + oracleWhitelistPubkey?: string; + preDeactivateCoordinator?: PubKey; + preDeactivateRoot: Uint256; + roundInfo: RoundInfo; + voiceCreditAmount: Uint256; + voteOptionMap: string[]; + votingTime: VotingTime; + whitelist?: WhitelistBase; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + create_amaci_round: { + certification_system: certificationSystem, + circuit_type: circuitType, + max_voter: maxVoter, + operator, + oracle_whitelist_pubkey: oracleWhitelistPubkey, + pre_deactivate_coordinator: preDeactivateCoordinator, + pre_deactivate_root: preDeactivateRoot, + round_info: roundInfo, + voice_credit_amount: voiceCreditAmount, + vote_option_map: voteOptionMap, + voting_time: votingTime, + whitelist + } + }, fee, memo, _funds); + }; + setRoundInfo = async ({ + contractAddr, + roundInfo + }: { + contractAddr: string; + roundInfo: RoundInfo; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_round_info: { + contract_addr: contractAddr, + round_info: roundInfo + } + }, fee, memo, _funds); + }; + setVoteOptionsMap = async ({ + contractAddr, + voteOptionMap + }: { + contractAddr: string; + voteOptionMap: string[]; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_vote_options_map: { + contract_addr: contractAddr, + vote_option_map: voteOptionMap + } + }, fee, memo, _funds); + }; +} \ No newline at end of file diff --git a/contracts/api-saas/ts/ApiSaas.types.ts b/contracts/api-saas/ts/ApiSaas.types.ts new file mode 100644 index 0000000..f72e729 --- /dev/null +++ b/contracts/api-saas/ts/ApiSaas.types.ts @@ -0,0 +1,128 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +export type Addr = string; +export interface InstantiateMsg { + admin: Addr; + denom: string; + maci_code_id: number; + registry_contract: Addr; + treasury_manager: Addr; +} +export type ExecuteMsg = { + update_config: { + admin?: Addr | null; + denom?: string | null; + }; +} | { + update_maci_code_id: { + code_id: number; + }; +} | { + update_amaci_registry_contract: { + registry_contract: Addr; + }; +} | { + add_operator: { + operator: Addr; + }; +} | { + remove_operator: { + operator: Addr; + }; +} | { + deposit: {}; +} | { + withdraw: { + amount: Uint128; + recipient?: Addr | null; + }; +} | { + create_maci_round: { + certification_system: Uint256; + circuit_type: Uint256; + coordinator: PubKey; + end_time: Timestamp; + max_voters: number; + round_info: RoundInfo; + start_time: Timestamp; + vote_option_map: string[]; + whitelist_backend_pubkey: string; + }; +} | { + create_amaci_round: { + certification_system: Uint256; + circuit_type: Uint256; + max_voter: Uint256; + operator: Addr; + oracle_whitelist_pubkey?: string | null; + pre_deactivate_coordinator?: PubKey | null; + pre_deactivate_root: Uint256; + round_info: RoundInfo; + voice_credit_amount: Uint256; + vote_option_map: string[]; + voting_time: VotingTime; + whitelist?: WhitelistBase | null; + }; +} | { + set_round_info: { + contract_addr: string; + round_info: RoundInfo; + }; +} | { + set_vote_options_map: { + contract_addr: string; + vote_option_map: string[]; + }; +}; +export type Uint128 = string; +export type Uint256 = string; +export type Timestamp = Uint64; +export type Uint64 = string; +export interface PubKey { + x: Uint256; + y: Uint256; +} +export interface RoundInfo { + description: string; + link: string; + title: string; +} +export interface VotingTime { + end_time: Timestamp; + start_time: Timestamp; +} +export interface WhitelistBase { + users: WhitelistBaseConfig[]; +} +export interface WhitelistBaseConfig { + addr: Addr; +} +export type QueryMsg = { + config: {}; +} | { + operators: {}; +} | { + is_operator: { + address: Addr; + }; +} | { + balance: {}; +} | { + maci_code_id: {}; +} | { + treasury_manager: {}; +}; +export interface Config { + admin: Addr; + denom: string; +} +export type Boolean = boolean; +export type ArrayOfOperatorInfo = OperatorInfo[]; +export interface OperatorInfo { + added_at: Timestamp; + address: Addr; +} \ No newline at end of file diff --git a/contracts/maci/Cargo.lock b/contracts/maci/Cargo.lock new file mode 100644 index 0000000..379363f --- /dev/null +++ b/contracts/maci/Cargo.lock @@ -0,0 +1,2103 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom 0.2.11", + "once_cell", + "version_check", +] + +[[package]] +name = "alga" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +dependencies = [ + "approx", + "num-complex", + "num-traits", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "approx" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bellman-ce-verifier" +version = "0.1.0" +source = "git+https://github.com/DoraFactory/snarkjs-bellman-adapter.git#4f46ef70b5f301236a66dc74a09ed56b106f8ba5" +dependencies = [ + "pairing_ce 0.28.5", + "parity-scale-codec", +] + +[[package]] +name = "bellman_ce" +version = "0.3.2" +source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" +dependencies = [ + "bit-vec", + "blake2s_const 0.6.0 (git+https://github.com/matter-labs/bellman?branch=beta)", + "blake2s_simd", + "byteorder", + "cfg-if 1.0.0", + "crossbeam", + "futures", + "hex", + "lazy_static", + "num_cpus", + "pairing_ce 0.24.2", + "rand 0.4.6", + "tiny-keccak", +] + +[[package]] +name = "bellman_ce" +version = "0.3.2" +source = "git+https://github.com/DoraFactory/bellman.git#135ea382722778065b140963f5fb0a7bd1e46375" +dependencies = [ + "arrayvec 0.7.4", + "bit-vec", + "blake2s_const 0.6.0 (git+https://github.com/DoraFactory/bellman.git)", + "blake2s_simd", + "byteorder", + "cfg-if 1.0.0", + "crossbeam", + "futures", + "hex", + "lazy_static", + "num_cpus", + "pairing_ce 0.28.5", + "rand 0.4.6", + "serde", + "smallvec", + "tiny-keccak", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +dependencies = [ + "serde", +] + +[[package]] +name = "blake2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "blake2-rfc_bellman_edition" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc60350286c7c3db13b98e91dbe5c8b6830a6821bc20af5b0c310ce94d74915" +dependencies = [ + "arrayvec 0.4.12", + "byteorder", + "constant_time_eq", +] + +[[package]] +name = "blake2s_const" +version = "0.6.0" +source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_const" +version = "0.6.0" +source = "git+https://github.com/DoraFactory/bellman.git#135ea382722778065b140963f5fb0a7bd1e46375" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "bnum" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9008b6bb9fc80b5277f2fe481c09e828743d9151203e804583eb4c9e15b31d" + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73c9d2043a9e617b0d602fbc0a0ecd621568edbf3a9774890a6d562389bd8e1c" +dependencies = [ + "prost 0.11.9", + "prost-types", + "tendermint-proto", +] + +[[package]] +name = "cosmwasm-crypto" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bb3c77c3b7ce472056968c745eb501c440fbc07be5004eba02782c35bfbbe3" +dependencies = [ + "digest 0.10.7", + "ecdsa", + "ed25519-zebra", + "k256", + "rand_core 0.6.4", + "thiserror", +] + +[[package]] +name = "cosmwasm-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea73e9162e6efde00018d55ed0061e93a108b5d6ec4548b4f8ce3c706249687" +dependencies = [ + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-schema" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df41ea55f2946b6b43579659eec048cc2f66e8c8e2e3652fc5e5e476f673856" +dependencies = [ + "cosmwasm-schema-derive", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43609e92ce1b9368aa951b334dd354a2d0dd4d484931a5f83ae10e12a26c8ba9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-std" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d6864742e3a7662d024b51a94ea81c9af21db6faea2f9a6d2232bb97c6e53e" +dependencies = [ + "base64", + "bech32", + "bnum", + "cosmwasm-crypto", + "cosmwasm-derive", + "derivative", + "forward_ref", + "hex", + "schemars", + "serde", + "serde-json-wasm", + "sha2 0.10.8", + "static_assertions", + "thiserror", +] + +[[package]] +name = "cosmwasm-storage" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd2b4ae72a03e8f56c85df59d172d51d2d7dc9cec6e2bc811e3fb60c588032a4" +dependencies = [ + "cosmwasm-std", + "serde", +] + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" +dependencies = [ + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-deque" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "crossbeam-utils", + "lazy_static", + "maybe-uninit", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "cw-multi-test" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fff029689ae89127cf6d7655809a68d712f3edbdb9686c70b018ba438b26ca" +dependencies = [ + "anyhow", + "bech32", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "derivative", + "itertools 0.12.0", + "prost 0.12.3", + "schemars", + "serde", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "cw-storage-plus" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-utils" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw4" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24754ff6e45f2a1c60adc409d9b2eb87666012c44021329141ffaab3388fccd2" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "serde", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[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", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dyn-clone" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_ce" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a682c12d0cc98a32ab7540401a5ea1ed21d11571eea11d5829cd721f85ff0" +dependencies = [ + "byteorder", + "ff_derive_ce 0.8.0", + "hex", + "rand 0.4.6", +] + +[[package]] +name = "ff_ce" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38107cbd8bac0d907d7e7513c9f68c95adbda9e6f6f6bdf3f5111c6ecac4fe47" +dependencies = [ + "byteorder", + "ff_derive_ce 0.9.3", + "hex", + "rand 0.4.6", +] + +[[package]] +name = "ff_ce" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b538e4231443a5b9c507caee3356f016d832cf7393d2d90f03ea3180d4e3fbc" +dependencies = [ + "byteorder", + "ff_derive_ce 0.11.2", + "hex", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "ff_derive_ce" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c052fa6d4c2f12305ec364bfb8ef884836f3f61ea015b202372ff996d1ac4b" +dependencies = [ + "num-bigint 0.2.6", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ff_derive_ce" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde5a00073374b4d7aa2d3a8359a5709f9c0bfac8393f254655d16b4acdfe823" +dependencies = [ + "num-bigint 0.4.4", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ff_derive_ce" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96fbccd88dbb1fac4ee4a07c2fcc4ca719a74ffbd9d2b9d41d8c8eb073d8b20" +dependencies = [ + "num-bigint 0.4.4", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "paste", +] + +[[package]] +name = "forward_ref" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" + +[[package]] +name = "franklin-crypto" +version = "0.0.5" +source = "git+https://github.com/matter-labs/franklin-crypto?branch=beta#9e3c2a12053c014df9b6c1f227db4470e02b4c5b" +dependencies = [ + "bellman_ce 0.3.2 (git+https://github.com/matter-labs/bellman?branch=beta)", + "bit-vec", + "blake2", + "blake2-rfc_bellman_edition", + "blake2s_simd", + "byteorder", + "digest 0.9.0", + "hex", + "hmac 0.11.0", + "itertools 0.9.0", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "poseidon_hash", + "rand 0.4.6", + "serde", + "serde_derive", + "sha2 0.9.9", + "splitmut", + "tiny-keccak", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "futures" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-executor" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac 0.11.1", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" +dependencies = [ + "cfg-if 1.0.0", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "maci" +version = "0.1.0" +dependencies = [ + "anyhow", + "assert_matches", + "bellman-ce-verifier", + "bellman_ce 0.3.2 (git+https://github.com/DoraFactory/bellman.git)", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus", + "cw2", + "cw4", + "derivative", + "ff_ce 0.11.0", + "ff_ce 0.14.3", + "franklin-crypto", + "getrandom 0.2.11", + "hex", + "num-bigint 0.4.4", + "num-traits", + "pairing_ce 0.28.5", + "poseidon-rs", + "prost 0.11.9", + "prost-types", + "schemars", + "serde", + "serde_json", + "sha2 0.9.9", + "thiserror", +] + +[[package]] +name = "mathru" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7584d97fddf282cc3e5cc6fae54e596cfcd708a3b375633294d9db8e8b6d776" +dependencies = [ + "rand 0.7.3", + "serde", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +dependencies = [ + "autocfg", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "pairing_ce" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e753515675eaaa98071d814bea0148ae8c9d7995fa0531bf222e7857e3f1759" +dependencies = [ + "byteorder", + "cfg-if 1.0.0", + "ff_ce 0.12.0", + "rand 0.4.6", +] + +[[package]] +name = "pairing_ce" +version = "0.28.5" +source = "git+https://github.com/matter-labs/pairing.git#f55393fd366596eac792d78525d26e9c4d6ed1ca" +dependencies = [ + "byteorder", + "cfg-if 1.0.0", + "ff_ce 0.14.3", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec 0.7.4", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "poseidon-rs" +version = "0.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7bd44e953add4c619a75a970cc4335e3175dfecc61ab64ee6caa8fffde95c95" +dependencies = [ + "ff_ce 0.11.0", + "rand 0.4.6", + "serde_json", +] + +[[package]] +name = "poseidon_hash" +version = "0.0.1" +source = "git+https://github.com/shamatar/poseidon_hash.git#495ae87ff066d066b140c7d0dff8d929b87d31ee" +dependencies = [ + "alga", + "approx", + "blake2-rfc_bellman_edition", + "byteorder", + "mathru", + "num-bigint 0.2.6", + "num-integer", + "num-traits", + "pairing_ce 0.24.2", + "rand 0.4.6", + "sha2 0.8.2", + "tiny-keccak", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive 0.12.3", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.11", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "schemars" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 1.0.109", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a62a1fad1e1828b24acac8f2b468971dade7b8c3c2e672bcadefefb1f8c137" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "splitmut" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85070f382340e8b23a75808e83573ddf65f9ad9143df9573ca37c1ed2ee956a" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tendermint-proto" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cec054567d16d85e8c3f6a3139963d1a66d9d3051ed545d31562550e9bcc3d" +dependencies = [ + "bytes", + "flex-error", + "num-derive", + "num-traits", + "prost 0.11.9", + "prost-types", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "time" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +dependencies = [ + "deranged", + "powerfmt", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winnow" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +dependencies = [ + "memchr", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/contracts/maci/src/contract.rs b/contracts/maci/src/contract.rs index 2eb135e..38478ad 100644 --- a/contracts/maci/src/contract.rs +++ b/contracts/maci/src/contract.rs @@ -361,12 +361,12 @@ pub fn execute_start_voting_period( let voting_time = VOTINGTIME.load(deps.storage)?; if let Some(_) = voting_time.start_time { - // if start_time exist,admin can't start round with this command. + // if start_time exist, admin can't start round with this command. return Err(ContractError::AlreadySetVotingTime { time_name: String::from("start_time"), }); } else { - // if start_time isn't exist,admin need start round with this command. (in Pending period can execute) + // if start_time isn't exist, admin need start round with this command. (in Pending period can execute) if period.status != PeriodStatus::Pending { return Err(ContractError::PeriodError {}); } @@ -1015,11 +1015,17 @@ pub fn execute_stop_processing_period( return Err(ContractError::PeriodError {}); } - // Check that all messages have been processed - let processed_msg_count = PROCESSED_MSG_COUNT.load(deps.storage)?; - let msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; - if processed_msg_count < msg_chain_length { - return Err(ContractError::MsgLeftProcess {}); + let num_sign_ups = NUMSIGNUPS.load(deps.storage)?; + + // If there are registered users, check if all messages have been processed + // If num_sign_ups is 0, skip the message processing check as all votes are invalid + if num_sign_ups != Uint256::zero() { + let processed_msg_count = PROCESSED_MSG_COUNT.load(deps.storage)?; + let msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; + + if processed_msg_count != msg_chain_length { + return Err(ContractError::MsgLeftProcess {}); + } } // Update the period status to Tallying @@ -1720,6 +1726,10 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { QueryMsg::QueryCertSystem {} => { to_json_binary::(&CERTSYSTEM.may_load(deps.storage)?.unwrap_or_default()) } + QueryMsg::QueryCurrentStateCommitment {} => { + let current_state_commitment = CURRENT_STATE_COMMITMENT.may_load(deps.storage)?; + to_json_binary(¤t_state_commitment) + } } } diff --git a/contracts/maci/src/msg.rs b/contracts/maci/src/msg.rs index 2c663ff..dff56da 100644 --- a/contracts/maci/src/msg.rs +++ b/contracts/maci/src/msg.rs @@ -187,4 +187,7 @@ pub enum QueryMsg { #[returns(Uint256)] QueryCertSystem {}, + + #[returns(Uint256)] + QueryCurrentStateCommitment {}, } diff --git a/contracts/maci/src/multitest/tests.rs b/contracts/maci/src/multitest/tests.rs index 3dab15f..3c38f10 100644 --- a/contracts/maci/src/multitest/tests.rs +++ b/contracts/maci/src/multitest/tests.rs @@ -109,14 +109,14 @@ mod test { assert_eq!( ContractError::PeriodError {}, sign_up_error.downcast().unwrap() - ); // 不能在voting环节之前进行signup + ); // Cannot signup before the voting period _ = contract.start_voting(&mut app, owner()); app.update_block(next_block); let set_whitelist_only_in_pending = contract.set_whitelist(&mut app, owner()).unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::PeriodError {}, set_whitelist_only_in_pending.downcast().unwrap() ); @@ -200,7 +200,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::Unauthorized {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -216,7 +216,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 不能投票环节结束之后不能进行sign up + // Cannot sign up after the voting period has ended ContractError::PeriodError {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -408,14 +408,14 @@ mod test { assert_eq!( ContractError::PeriodError {}, sign_up_error.downcast().unwrap() - ); // 不能在voting环节之前进行signup + ); // Cannot signup before the voting period _ = contract.set_vote_option_map(&mut app, owner()); app.update_block(next_block); // Start Voting let set_whitelist_only_in_pending = contract.set_whitelist(&mut app, owner()).unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::PeriodError {}, set_whitelist_only_in_pending.downcast().unwrap() ); @@ -475,7 +475,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::Unauthorized {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -501,7 +501,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 不能投票环节结束之后不能进行sign up + // Cannot sign up after the voting period has ended ContractError::PeriodError {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -675,7 +675,7 @@ mod test { assert_eq!( ContractError::PeriodError {}, sign_up_error.downcast().unwrap() - ); // 不能在voting环节之前进行signup + ); // Cannot signup before the voting period _ = contract.set_vote_option_map(&mut app, owner()); @@ -741,7 +741,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::Unauthorized {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -758,7 +758,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 不能投票环节结束之后不能进行sign up + // Cannot sign up after the voting period has ended ContractError::PeriodError {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -903,7 +903,7 @@ mod test { assert_eq!( ContractError::PeriodError {}, sign_up_error.downcast().unwrap() - ); // 不能在voting环节之前进行signup + ); // Cannot signup before the voting period _ = contract.set_vote_option_map(&mut app, owner()); @@ -971,7 +971,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::Unauthorized {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -988,7 +988,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 不能投票环节结束之后不能进行sign up + // Cannot sign up after the voting period has ended ContractError::PeriodError {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -1163,14 +1163,14 @@ mod test { assert_eq!( ContractError::PeriodError {}, sign_up_error.downcast().unwrap() - ); // 不能在voting环节之前进行signup + ); // Cannot signup before the voting period _ = contract.set_vote_option_map(&mut app, owner()); app.update_block(next_block); // Start Voting let set_whitelist_only_in_pending = contract.set_whitelist(&mut app, owner()).unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::PeriodError {}, set_whitelist_only_in_pending.downcast().unwrap() ); @@ -1230,7 +1230,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::Unauthorized {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -1256,7 +1256,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 不能投票环节结束之后不能进行sign up + // Cannot sign up after the voting period has ended ContractError::PeriodError {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -1447,14 +1447,14 @@ mod test { assert_eq!( ContractError::PeriodError {}, sign_up_error.downcast().unwrap() - ); // 不能在voting环节之前进行signup + ); // Cannot signup before the voting period _ = contract.set_vote_option_map(&mut app, owner()); app.update_block(next_block); // Start Voting let set_whitelist_only_in_pending = contract.set_whitelist(&mut app, owner()).unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::PeriodError {}, set_whitelist_only_in_pending.downcast().unwrap() ); @@ -1514,7 +1514,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 注册之后不能再进行注册 + // Cannot register again after registration ContractError::Unauthorized {}, sign_up_after_voting_end_error.downcast().unwrap() ); @@ -1540,7 +1540,7 @@ mod test { ) .unwrap_err(); assert_eq!( - // 不能投票环节结束之后不能进行sign up + // Cannot sign up after the voting period has ended ContractError::PeriodError {}, sign_up_after_voting_end_error.downcast().unwrap() ); diff --git a/contracts/maci/src/utils.rs b/contracts/maci/src/utils.rs index 14263bf..d78832b 100644 --- a/contracts/maci/src/utils.rs +++ b/contracts/maci/src/utils.rs @@ -109,7 +109,7 @@ pub fn hash_256_uint256_list(arrays: &[Uint256]) -> String { let hash_result = Sha256::digest(&result); - // 使用 hex crate 将二进制数据转换为十六进制字符串 + // Use hex crate to convert binary data to hexadecimal string hex::encode(hash_result) } // pub fn hash_256_uint256_list(arrays: &[Uint256]) -> String { diff --git a/contracts/oracle-maci/Cargo.lock b/contracts/oracle-maci/Cargo.lock new file mode 100644 index 0000000..379363f --- /dev/null +++ b/contracts/oracle-maci/Cargo.lock @@ -0,0 +1,2103 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom 0.2.11", + "once_cell", + "version_check", +] + +[[package]] +name = "alga" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +dependencies = [ + "approx", + "num-complex", + "num-traits", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "approx" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bellman-ce-verifier" +version = "0.1.0" +source = "git+https://github.com/DoraFactory/snarkjs-bellman-adapter.git#4f46ef70b5f301236a66dc74a09ed56b106f8ba5" +dependencies = [ + "pairing_ce 0.28.5", + "parity-scale-codec", +] + +[[package]] +name = "bellman_ce" +version = "0.3.2" +source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" +dependencies = [ + "bit-vec", + "blake2s_const 0.6.0 (git+https://github.com/matter-labs/bellman?branch=beta)", + "blake2s_simd", + "byteorder", + "cfg-if 1.0.0", + "crossbeam", + "futures", + "hex", + "lazy_static", + "num_cpus", + "pairing_ce 0.24.2", + "rand 0.4.6", + "tiny-keccak", +] + +[[package]] +name = "bellman_ce" +version = "0.3.2" +source = "git+https://github.com/DoraFactory/bellman.git#135ea382722778065b140963f5fb0a7bd1e46375" +dependencies = [ + "arrayvec 0.7.4", + "bit-vec", + "blake2s_const 0.6.0 (git+https://github.com/DoraFactory/bellman.git)", + "blake2s_simd", + "byteorder", + "cfg-if 1.0.0", + "crossbeam", + "futures", + "hex", + "lazy_static", + "num_cpus", + "pairing_ce 0.28.5", + "rand 0.4.6", + "serde", + "smallvec", + "tiny-keccak", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +dependencies = [ + "serde", +] + +[[package]] +name = "blake2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "blake2-rfc_bellman_edition" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc60350286c7c3db13b98e91dbe5c8b6830a6821bc20af5b0c310ce94d74915" +dependencies = [ + "arrayvec 0.4.12", + "byteorder", + "constant_time_eq", +] + +[[package]] +name = "blake2s_const" +version = "0.6.0" +source = "git+https://github.com/matter-labs/bellman?branch=beta#416f79d3f93fc855fb96bb61bfe73d2472e95548" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_const" +version = "0.6.0" +source = "git+https://github.com/DoraFactory/bellman.git#135ea382722778065b140963f5fb0a7bd1e46375" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "bnum" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9008b6bb9fc80b5277f2fe481c09e828743d9151203e804583eb4c9e15b31d" + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cosmos-sdk-proto" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73c9d2043a9e617b0d602fbc0a0ecd621568edbf3a9774890a6d562389bd8e1c" +dependencies = [ + "prost 0.11.9", + "prost-types", + "tendermint-proto", +] + +[[package]] +name = "cosmwasm-crypto" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bb3c77c3b7ce472056968c745eb501c440fbc07be5004eba02782c35bfbbe3" +dependencies = [ + "digest 0.10.7", + "ecdsa", + "ed25519-zebra", + "k256", + "rand_core 0.6.4", + "thiserror", +] + +[[package]] +name = "cosmwasm-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea73e9162e6efde00018d55ed0061e93a108b5d6ec4548b4f8ce3c706249687" +dependencies = [ + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-schema" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df41ea55f2946b6b43579659eec048cc2f66e8c8e2e3652fc5e5e476f673856" +dependencies = [ + "cosmwasm-schema-derive", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43609e92ce1b9368aa951b334dd354a2d0dd4d484931a5f83ae10e12a26c8ba9" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-std" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d6864742e3a7662d024b51a94ea81c9af21db6faea2f9a6d2232bb97c6e53e" +dependencies = [ + "base64", + "bech32", + "bnum", + "cosmwasm-crypto", + "cosmwasm-derive", + "derivative", + "forward_ref", + "hex", + "schemars", + "serde", + "serde-json-wasm", + "sha2 0.10.8", + "static_assertions", + "thiserror", +] + +[[package]] +name = "cosmwasm-storage" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd2b4ae72a03e8f56c85df59d172d51d2d7dc9cec6e2bc811e3fb60c588032a4" +dependencies = [ + "cosmwasm-std", + "serde", +] + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" +dependencies = [ + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-deque" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "crossbeam-utils", + "lazy_static", + "maybe-uninit", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" +dependencies = [ + "cfg-if 0.1.10", + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "cw-multi-test" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fff029689ae89127cf6d7655809a68d712f3edbdb9686c70b018ba438b26ca" +dependencies = [ + "anyhow", + "bech32", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "derivative", + "itertools 0.12.0", + "prost 0.12.3", + "schemars", + "serde", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "cw-storage-plus" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-utils" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw4" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24754ff6e45f2a1c60adc409d9b2eb87666012c44021329141ffaab3388fccd2" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "serde", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[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", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dyn-clone" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff_ce" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a682c12d0cc98a32ab7540401a5ea1ed21d11571eea11d5829cd721f85ff0" +dependencies = [ + "byteorder", + "ff_derive_ce 0.8.0", + "hex", + "rand 0.4.6", +] + +[[package]] +name = "ff_ce" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38107cbd8bac0d907d7e7513c9f68c95adbda9e6f6f6bdf3f5111c6ecac4fe47" +dependencies = [ + "byteorder", + "ff_derive_ce 0.9.3", + "hex", + "rand 0.4.6", +] + +[[package]] +name = "ff_ce" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b538e4231443a5b9c507caee3356f016d832cf7393d2d90f03ea3180d4e3fbc" +dependencies = [ + "byteorder", + "ff_derive_ce 0.11.2", + "hex", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "ff_derive_ce" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c052fa6d4c2f12305ec364bfb8ef884836f3f61ea015b202372ff996d1ac4b" +dependencies = [ + "num-bigint 0.2.6", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ff_derive_ce" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde5a00073374b4d7aa2d3a8359a5709f9c0bfac8393f254655d16b4acdfe823" +dependencies = [ + "num-bigint 0.4.4", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ff_derive_ce" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96fbccd88dbb1fac4ee4a07c2fcc4ca719a74ffbd9d2b9d41d8c8eb073d8b20" +dependencies = [ + "num-bigint 0.4.4", + "num-integer", + "num-traits", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "paste", +] + +[[package]] +name = "forward_ref" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" + +[[package]] +name = "franklin-crypto" +version = "0.0.5" +source = "git+https://github.com/matter-labs/franklin-crypto?branch=beta#9e3c2a12053c014df9b6c1f227db4470e02b4c5b" +dependencies = [ + "bellman_ce 0.3.2 (git+https://github.com/matter-labs/bellman?branch=beta)", + "bit-vec", + "blake2", + "blake2-rfc_bellman_edition", + "blake2s_simd", + "byteorder", + "digest 0.9.0", + "hex", + "hmac 0.11.0", + "itertools 0.9.0", + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "poseidon_hash", + "rand 0.4.6", + "serde", + "serde_derive", + "sha2 0.9.9", + "splitmut", + "tiny-keccak", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "futures" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-executor" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac 0.11.1", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" +dependencies = [ + "cfg-if 1.0.0", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "maci" +version = "0.1.0" +dependencies = [ + "anyhow", + "assert_matches", + "bellman-ce-verifier", + "bellman_ce 0.3.2 (git+https://github.com/DoraFactory/bellman.git)", + "cosmos-sdk-proto", + "cosmwasm-schema", + "cosmwasm-std", + "cosmwasm-storage", + "cw-multi-test", + "cw-storage-plus", + "cw2", + "cw4", + "derivative", + "ff_ce 0.11.0", + "ff_ce 0.14.3", + "franklin-crypto", + "getrandom 0.2.11", + "hex", + "num-bigint 0.4.4", + "num-traits", + "pairing_ce 0.28.5", + "poseidon-rs", + "prost 0.11.9", + "prost-types", + "schemars", + "serde", + "serde_json", + "sha2 0.9.9", + "thiserror", +] + +[[package]] +name = "mathru" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7584d97fddf282cc3e5cc6fae54e596cfcd708a3b375633294d9db8e8b6d776" +dependencies = [ + "rand 0.7.3", + "serde", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +dependencies = [ + "autocfg", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "pairing_ce" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e753515675eaaa98071d814bea0148ae8c9d7995fa0531bf222e7857e3f1759" +dependencies = [ + "byteorder", + "cfg-if 1.0.0", + "ff_ce 0.12.0", + "rand 0.4.6", +] + +[[package]] +name = "pairing_ce" +version = "0.28.5" +source = "git+https://github.com/matter-labs/pairing.git#f55393fd366596eac792d78525d26e9c4d6ed1ca" +dependencies = [ + "byteorder", + "cfg-if 1.0.0", + "ff_ce 0.14.3", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec 0.7.4", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "poseidon-rs" +version = "0.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7bd44e953add4c619a75a970cc4335e3175dfecc61ab64ee6caa8fffde95c95" +dependencies = [ + "ff_ce 0.11.0", + "rand 0.4.6", + "serde_json", +] + +[[package]] +name = "poseidon_hash" +version = "0.0.1" +source = "git+https://github.com/shamatar/poseidon_hash.git#495ae87ff066d066b140c7d0dff8d929b87d31ee" +dependencies = [ + "alga", + "approx", + "blake2-rfc_bellman_edition", + "byteorder", + "mathru", + "num-bigint 0.2.6", + "num-integer", + "num-traits", + "pairing_ce 0.24.2", + "rand 0.4.6", + "sha2 0.8.2", + "tiny-keccak", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive 0.12.3", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools 0.10.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.11", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "schemars" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 1.0.109", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16a62a1fad1e1828b24acac8f2b468971dade7b8c3c2e672bcadefefb1f8c137" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "splitmut" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85070f382340e8b23a75808e83573ddf65f9ad9143df9573ca37c1ed2ee956a" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tendermint-proto" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cec054567d16d85e8c3f6a3139963d1a66d9d3051ed545d31562550e9bcc3d" +dependencies = [ + "bytes", + "flex-error", + "num-derive", + "num-traits", + "prost 0.11.9", + "prost-types", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "time" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +dependencies = [ + "deranged", + "powerfmt", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winnow" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +dependencies = [ + "memchr", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/contracts/oracle-maci/src/contract.rs b/contracts/oracle-maci/src/contract.rs index 19d11f4..9cece63 100644 --- a/contracts/oracle-maci/src/contract.rs +++ b/contracts/oracle-maci/src/contract.rs @@ -14,7 +14,8 @@ use crate::state::{ MACIPARAMETERS, MAX_LEAVES_COUNT, MAX_VOTE_OPTIONS, MAX_WHITELIST_NUM, MSG_CHAIN_LENGTH, MSG_HASHES, NODES, NUMSIGNUPS, ORACLE_WHITELIST_CONFIG, PERIOD, PLONK_PROCESS_VKEYS, PLONK_TALLY_VKEYS, PROCESSED_MSG_COUNT, PROCESSED_USER_COUNT, QTR_LIB, RESULT, ROUNDINFO, - STATEIDXINC, TOTAL_RESULT, VOICECREDITBALANCE, VOTEOPTIONMAP, VOTINGTIME, WHITELIST, ZEROS, + STATEIDXINC, TOTAL_RESULT, USED_ENC_PUB_KEYS, VOICECREDITBALANCE, VOTEOPTIONMAP, VOTINGTIME, + WHITELIST, ZEROS, }; use sha2::{Digest as ShaDigest, Sha256}; @@ -121,7 +122,7 @@ pub fn instantiate( let fee_grant_amount = info .funds .iter() - .find(|coin| coin.denom == "peaka") // 或者使用适当的代币名称 + .find(|coin| coin.denom == "peaka") // Or use appropriate token name .map(|coin| coin.amount) .unwrap_or_else(|| Uint128::zero()); @@ -511,7 +512,6 @@ pub fn execute_sign_up( } let oracle_whitelist_config = ORACLE_WHITELIST_CONFIG.load(deps.storage)?; - let whitelist_snapshot_height = oracle_whitelist_config.snapshot_height; let whitelist_ecosystem = oracle_whitelist_config.ecosystem; let whitelist_backend_pubkey = oracle_whitelist_config.backend_pubkey; let payload = serde_json::json!({ @@ -639,6 +639,15 @@ pub fn execute_publish_message( && enc_pub_key.x < snark_scalar_field && enc_pub_key.y < snark_scalar_field { + // Check if enc_pub_key has already been used + let pubkey_storage_key = generate_pubkey_storage_key(&enc_pub_key); + if USED_ENC_PUB_KEYS.has(deps.storage, pubkey_storage_key.clone()) { + return Err(ContractError::EncPubKeyAlreadyUsed {}); + } + + // Mark this enc_pub_key as used + USED_ENC_PUB_KEYS.save(deps.storage, pubkey_storage_key, &true)?; + let mut msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; let old_msg_hashes = MSG_HASHES.load(deps.storage, msg_chain_length.to_be_bytes().to_vec())?; @@ -932,13 +941,19 @@ pub fn execute_stop_processing_period( return Err(ContractError::PeriodError {}); } - // Check that all users have not been processed yet - let processed_msg_count = PROCESSED_MSG_COUNT.load(deps.storage)?; - let msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; + let num_sign_ups = NUMSIGNUPS.load(deps.storage)?; - if processed_msg_count != msg_chain_length { - return Err(ContractError::MsgLeftProcess {}); + // If there are registered users, check if all messages have been processed + // If num_sign_ups is 0, skip the message processing check as all votes are invalid + if num_sign_ups != Uint256::zero() { + let processed_msg_count = PROCESSED_MSG_COUNT.load(deps.storage)?; + let msg_chain_length = MSG_CHAIN_LENGTH.load(deps.storage)?; + + if processed_msg_count != msg_chain_length { + return Err(ContractError::MsgLeftProcess {}); + } } + // Update the period status to Tallying let period = Period { status: PeriodStatus::Tallying, @@ -1494,7 +1509,6 @@ fn user_balance_of( } let oracle_whitelist_config = ORACLE_WHITELIST_CONFIG.load(deps.storage)?; - let whitelist_snapshot_height = oracle_whitelist_config.snapshot_height; let whitelist_ecosystem = oracle_whitelist_config.ecosystem; let whitelist_backend_pubkey = oracle_whitelist_config.backend_pubkey; let payload = serde_json::json!({ @@ -1665,6 +1679,14 @@ pub fn hash_message_and_enc_pub_key( return m_n_hash; } +// Generate storage key for PubKey +fn generate_pubkey_storage_key(pubkey: &PubKey) -> Vec { + let mut key = Vec::new(); + key.extend_from_slice(&pubkey.x.to_be_bytes()); + key.extend_from_slice(&pubkey.y.to_be_bytes()); + key +} + // Only admin can execute fn can_execute(deps: Deps, sender: &str) -> StdResult { let cfg = ADMIN.load(deps.storage)?; @@ -1777,6 +1799,10 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { QueryMsg::QueryOracleWhitelistConfig {} => { to_json_binary::(&ORACLE_WHITELIST_CONFIG.load(deps.storage)?) } + QueryMsg::QueryCurrentStateCommitment {} => { + let current_state_commitment = CURRENT_STATE_COMMITMENT.may_load(deps.storage)?; + to_json_binary(¤t_state_commitment) + } } } @@ -1805,6 +1831,6 @@ mod tests {} #[cfg_attr(not(feature = "library"), entry_point)] pub fn reply(_deps: DepsMut, _env: Env, _msg: Reply) -> Result { - // Oracle MACI合约本身不需要处理任何reply,但需要这个函数来支持multitest + // Oracle MACI contract itself does not need to handle any reply, but needs this function to support multitest Ok(Response::default()) } diff --git a/contracts/oracle-maci/src/error.rs b/contracts/oracle-maci/src/error.rs index dcfde32..dc2b73d 100644 --- a/contracts/oracle-maci/src/error.rs +++ b/contracts/oracle-maci/src/error.rs @@ -119,4 +119,7 @@ pub enum ContractError { #[error("Circuit parameters do not match any supported configuration")] NotMatchCircuitSize {}, + + #[error("Encrypted public key already used")] + EncPubKeyAlreadyUsed {}, } diff --git a/contracts/oracle-maci/src/msg.rs b/contracts/oracle-maci/src/msg.rs index b48ebae..70ff562 100644 --- a/contracts/oracle-maci/src/msg.rs +++ b/contracts/oracle-maci/src/msg.rs @@ -223,6 +223,9 @@ pub enum QueryMsg { #[returns(OracleWhitelistConfig)] QueryOracleWhitelistConfig {}, + + #[returns(Uint256)] + QueryCurrentStateCommitment {}, } #[cw_serde] diff --git a/contracts/oracle-maci/src/multitest/mod.rs b/contracts/oracle-maci/src/multitest/mod.rs index 21075b0..18575e6 100644 --- a/contracts/oracle-maci/src/multitest/mod.rs +++ b/contracts/oracle-maci/src/multitest/mod.rs @@ -414,7 +414,7 @@ impl MaciContract { code_id.0, Addr::unchecked(sender), &init_msg, - &[cosmwasm_std::coin(1000000u128, "peaka")], // 添加funds作为fee_grant_amount + &[cosmwasm_std::coin(1000000u128, "peaka")], // Add funds as fee_grant_amount label, None, ) @@ -468,7 +468,7 @@ impl MaciContract { code_id.0, Addr::unchecked(sender), &init_msg, - &[cosmwasm_std::coin(1000000u128, "peaka")], // 添加funds作为fee_grant_amount + &[cosmwasm_std::coin(1000000u128, "peaka")], // Add funds as fee_grant_amount label, None, ) diff --git a/contracts/oracle-maci/src/state.rs b/contracts/oracle-maci/src/state.rs index 7c70e2c..5d0e540 100644 --- a/contracts/oracle-maci/src/state.rs +++ b/contracts/oracle-maci/src/state.rs @@ -136,6 +136,9 @@ pub const MSG_CHAIN_LENGTH: Item = Item::new("msg_chain_length"); pub const PROCESSED_MSG_COUNT: Item = Item::new("processed_msg_count"); pub const PROCESSED_USER_COUNT: Item = Item::new("processed_user_count"); +// Storage for tracking used enc_pub_keys to ensure uniqueness +pub const USED_ENC_PUB_KEYS: Map, bool> = Map::new("used_enc_pub_keys"); + #[cw_serde] pub struct Groth16ProofStr { pub pi_a: Vec, diff --git a/contracts/registry/Cargo.lock b/contracts/registry/Cargo.lock new file mode 100644 index 0000000..7491590 --- /dev/null +++ b/contracts/registry/Cargo.lock @@ -0,0 +1,1046 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[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 = "bnum" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "cosmwasm-crypto" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd50718a2b6830ce9eb5d465de5a018a12e71729d66b70807ce97e6dd14f931d" +dependencies = [ + "digest 0.10.7", + "ecdsa 0.16.9", + "ed25519-zebra", + "k256 0.13.1", + "rand_core 0.6.4", + "thiserror", +] + +[[package]] +name = "cosmwasm-derive" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "242e98e7a231c122e08f300d9db3262d1007b51758a8732cd6210b3e9faa4f3a" +dependencies = [ + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-schema" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7879036156092ad1c22fe0d7316efc5a5eceec2bc3906462a2560215f2a2f929" +dependencies = [ + "cosmwasm-schema-derive", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cosmwasm-schema-derive" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb57855fbfc83327f8445ae0d413b1a05ac0d68c396ab4d122b2abd7bb82cb6" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-std" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c1556156fdf892a55cced6115968b961eaaadd6f724a2c2cb7d1e168e32dd3" +dependencies = [ + "base64", + "bech32", + "bnum", + "cosmwasm-crypto", + "cosmwasm-derive", + "derivative", + "forward_ref", + "hex", + "schemars", + "serde", + "serde-json-wasm", + "sha2 0.10.8", + "static_assertions", + "thiserror", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-bigint" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "cw-amaci-registry" +version = "0.1.0" +dependencies = [ + "anyhow", + "assert_matches", + "cosmwasm-schema", + "cosmwasm-std", + "cw-controllers", + "cw-multi-test", + "cw-storage-plus", + "cw-utils", + "cw2", + "cw20", + "cw4", + "derivative", + "hex", + "num-bigint", + "num-traits", + "schemars", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cw-controllers" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57de8d3761e46be863e3ac1eba8c8a976362a48c6abf240df1e26c3e421ee9e8" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "cw-multi-test" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "127c7bb95853b8e828bdab97065c81cb5ddc20f7339180b61b2300565aaa99d1" +dependencies = [ + "anyhow", + "cosmwasm-std", + "cw-storage-plus", + "cw-utils", + "derivative", + "itertools", + "k256 0.11.6", + "prost", + "schemars", + "serde", + "thiserror", +] + +[[package]] +name = "cw-storage-plus" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + +[[package]] +name = "cw-utils" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw2", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "semver", + "serde", + "thiserror", +] + +[[package]] +name = "cw20" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "526e39bb20534e25a1cd0386727f0038f4da294e5e535729ba3ef54055246abd" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-utils", + "schemars", + "serde", +] + +[[package]] +name = "cw4" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24754ff6e45f2a1c60adc409d9b2eb87666012c44021329141ffaab3388fccd2" +dependencies = [ + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus", + "schemars", + "serde", +] + +[[package]] +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[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", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +dependencies = [ + "der 0.6.1", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der 0.7.9", + "digest 0.10.7", + "elliptic-curve 0.13.8", + "rfc6979 0.4.0", + "signature 2.2.0", + "spki 0.7.3", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek", + "hashbrown", + "hex", + "rand_core 0.6.4", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +dependencies = [ + "base16ct 0.1.1", + "crypto-bigint 0.4.9", + "der 0.6.1", + "digest 0.10.7", + "ff 0.12.1", + "generic-array", + "group 0.12.1", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1 0.3.0", + "subtle", + "zeroize", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct 0.2.0", + "crypto-bigint 0.5.5", + "digest 0.10.7", + "ff 0.13.0", + "generic-array", + "group 0.13.0", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "sec1 0.7.3", + "subtle", + "zeroize", +] + +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "forward_ref" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff 0.13.0", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "k256" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" +dependencies = [ + "cfg-if", + "ecdsa 0.14.8", + "elliptic-curve 0.12.3", + "sha2 0.10.8", +] + +[[package]] +name = "k256" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +dependencies = [ + "cfg-if", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "once_cell", + "sha2 0.10.8", + "signature 2.2.0", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "num-bigint" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.9", + "spki 0.7.3", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint 0.4.9", + "hmac", + "zeroize", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.67", +] + +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct 0.1.1", + "der 0.6.1", + "generic-array", + "pkcs8 0.9.0", + "subtle", + "zeroize", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct 0.2.0", + "der 0.7.9", + "generic-array", + "pkcs8 0.10.2", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.67", +] + +[[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.67", +] + +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.9", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "subtle" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.67", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/contracts/registry/Cargo.toml b/contracts/registry/Cargo.toml index 5585d1c..963a066 100644 --- a/contracts/registry/Cargo.toml +++ b/contracts/registry/Cargo.toml @@ -31,7 +31,7 @@ rpath = false backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] -mt = ["library", "anyhow", "cw-multi-test"] +mt = ["library", "anyhow", "cw-multi-test", "secp256k1"] [package.metadata.scripts] optimize = """docker run --rm -v "$(pwd)":/code \ @@ -59,12 +59,19 @@ cw-amaci = {path = "../amaci", features = ["library"]} cw-multi-test = {version = "0.20.0", optional = true} num-bigint = "0.4.3" num-traits = "0.2" +base64 = "0.21.5" +secp256k1 = { version = "0.27.0", optional = true } +serde_json = "1.0" +sha2 = "0.10.6" [dev-dependencies] anyhow = "1" assert_matches = "1" +base64 = "0.21.5" cw-amaci = {path = "../amaci", features = ["mt"]} cw-multi-test = "0.20.0" derivative = "2" num-bigint = "0.4.3" +secp256k1 = "0.27.0" serde_json = "1.0" +sha2 = "0.10.6" diff --git a/contracts/registry/src/contract.rs b/contracts/registry/src/contract.rs index a6644e9..10a12fd 100644 --- a/contracts/registry/src/contract.rs +++ b/contracts/registry/src/contract.rs @@ -1,10 +1,10 @@ +use bech32::{self}; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - attr, coins, from_json, to_json_binary, Addr, Binary, Deps, DepsMut, Env, MessageInfo, - Reply, Response, StdError, StdResult, SubMsg, SubMsgResponse, Uint128, Uint256, WasmMsg, + attr, coins, from_json, to_json_binary, Addr, Binary, Deps, DepsMut, Env, MessageInfo, Reply, + Response, StdError, StdResult, SubMsg, SubMsgResponse, Uint128, Uint256, WasmMsg, }; -use bech32::{self}; use crate::error::ContractError; use crate::migrates::migrate_v0_1_4::migrate_v0_1_4; @@ -20,7 +20,7 @@ use cw_amaci::msg::{ InstantiateMsg as AMaciInstantiateMsg, InstantiationData as AMaciInstantiationData, WhitelistBase, }; -use cw_amaci::state::{MaciParameters, PubKey, RoundInfo, VotingTime}; +use cw_amaci::state::{PubKey, RoundInfo, VotingTime}; use cw_utils::parse_instantiate_response_data; // version info for migration info @@ -75,28 +75,32 @@ pub fn execute( ExecuteMsg::CreateRound { operator, max_voter, - max_option, voice_credit_amount, + vote_option_map, round_info, voting_time, whitelist, pre_deactivate_root, circuit_type, certification_system, + oracle_whitelist_pubkey, + pre_deactivate_coordinator, } => execute_create_round( deps, env, info, operator, max_voter, - max_option, voice_credit_amount, + vote_option_map, round_info, voting_time, whitelist, pre_deactivate_root, circuit_type, certification_system, + oracle_whitelist_pubkey, + pre_deactivate_coordinator, ), ExecuteMsg::SetValidators { addresses } => { execute_set_validators(deps, env, info, addresses) @@ -138,47 +142,22 @@ pub fn execute_create_round( info: MessageInfo, operator: Addr, max_voter: Uint256, - max_option: Uint256, voice_credit_amount: Uint256, + vote_option_map: Vec, round_info: RoundInfo, voting_time: VotingTime, whitelist: Option, pre_deactivate_root: Uint256, circuit_type: Uint256, certification_system: Uint256, + oracle_whitelist_pubkey: Option, + pre_deactivate_coordinator: Option, ) -> Result { validate_dora_address(operator.as_str())?; - - let maci_parameters: MaciParameters; - let required_fee: Uint128; - - if max_voter <= Uint256::from_u128(25u128) && max_option <= Uint256::from_u128(5u128) { - // state_tree_depth: 2 - // vote_option_tree_depth: 1 - // price: 20 DORA - maci_parameters = MaciParameters { - state_tree_depth: Uint256::from_u128(2u128), - int_state_tree_depth: Uint256::from_u128(1u128), - vote_option_tree_depth: Uint256::from_u128(1u128), - message_batch_size: Uint256::from_u128(5u128), - }; - required_fee = Uint128::from(20000000000000000000u128); - // required_fee = Uint128::from(50000000000000000000u128); - } else if max_voter <= Uint256::from_u128(625u128) && max_option <= Uint256::from_u128(25u128) { - // state_tree_depth: 4 - // vote_option_tree_depth: 2 - // price: 750 DORA - maci_parameters = MaciParameters { - state_tree_depth: Uint256::from_u128(4u128), - int_state_tree_depth: Uint256::from_u128(2u128), - vote_option_tree_depth: Uint256::from_u128(2u128), - message_batch_size: Uint256::from_u128(25u128), - }; - required_fee = Uint128::from(750000000000000000000u128); - // required_fee = Uint128::from(100000000000000000000u128); - } else { - return Err(ContractError::NoMatchedSizeCircuit {}); - } + + let max_option = Uint256::from_u128(vote_option_map.len() as u128); + let (required_fee, maci_parameters) = + crate::utils::calculate_round_fee_and_params(max_voter, max_option)?; let denom = "peaka".to_string(); let mut amount: Uint128 = Uint128::new(0); @@ -188,12 +167,19 @@ pub fn execute_create_round( } }); - // check user's payment - if amount < required_fee { - return Err(ContractError::InsufficientFee { - required: required_fee, - provided: amount, - }); + // check user's payment - require exact fee amount + if amount != required_fee { + if amount < required_fee { + return Err(ContractError::InsufficientFee { + required: required_fee, + provided: amount, + }); + } else { + return Err(ContractError::ExactFeeRequired { + required: required_fee, + provided: amount, + }); + } } if !MACI_OPERATOR_PUBKEY.has(deps.storage, &operator) { @@ -203,7 +189,7 @@ pub fn execute_create_round( let total_fee = required_fee; let admin = ADMIN.load(deps.storage)?.admin; - + // No longer send admin_fee directly to admin, instead send all fees to amaci contract // Add admin_fee information in the instantiate message for potential refunds in the future @@ -213,14 +199,16 @@ pub fn execute_create_round( operator, admin: info.sender.clone(), fee_recipient: admin.clone(), - max_vote_options: max_option, voice_credit_amount, + vote_option_map, round_info, voting_time, whitelist, pre_deactivate_root, circuit_type, certification_system, + oracle_whitelist_pubkey, + pre_deactivate_coordinator, }; let amaci_code_id = AMACI_CODE_ID.load(deps.storage)?; let instantiate_msg = SubMsg::reply_on_success( @@ -252,7 +240,7 @@ pub fn execute_set_maci_operator( operator: Addr, ) -> Result { validate_dora_address(operator.as_str())?; - + if !is_validator(deps.as_ref(), &info.sender)? { return Err(ContractError::Unauthorized {}); } @@ -430,7 +418,7 @@ pub fn execute_change_operator( address: Addr, ) -> Result { validate_dora_address(address.as_str())?; - + if !is_admin(deps.as_ref(), info.sender.as_ref())? { Err(ContractError::Unauthorized {}) } else { @@ -581,8 +569,8 @@ pub fn reply_created_round( &amaci_return_data.coordinator.y.to_string(), ), attr( - "max_vote_options", - &amaci_return_data.max_vote_options.to_string(), + "vote_option_map", + format!("{:?}", amaci_return_data.vote_option_map), ), attr( "voice_credit_amount", diff --git a/contracts/registry/src/error.rs b/contracts/registry/src/error.rs index 4b5e1fc..9db9328 100644 --- a/contracts/registry/src/error.rs +++ b/contracts/registry/src/error.rs @@ -1,4 +1,4 @@ -use cosmwasm_std::{StdError, Uint128, OverflowError}; +use cosmwasm_std::{OverflowError, StdError, Uint128}; use thiserror::Error; use cw_controllers::{AdminError, HookError}; @@ -72,20 +72,32 @@ pub enum ContractError { NotSetOperatorPubkey, #[error("Insufficient fee provided. Required: {required}, provided: {provided}")] - InsufficientFee { required: Uint128, provided: Uint128 }, + InsufficientFee { + required: Uint128, + provided: Uint128, + }, #[error("No claimable rewards")] NoClaimableRewards {}, #[error("Insufficient stake amount. Required: {required}, provided: {provided}")] - InsufficientStake { required: Uint128, provided: Uint128 }, + InsufficientStake { + required: Uint128, + provided: Uint128, + }, #[error("Operator {operator} is not healthy")] UnhealthyOperator { operator: String }, - + #[error("Invalid address: {address}")] InvalidAddress { address: String }, - + #[error("Invalid address prefix. Expected: {expected}, Actual: {actual}")] InvalidAddressPrefix { expected: String, actual: String }, + + #[error("Exact fee required. Expected: {required}, provided: {provided}")] + ExactFeeRequired { + required: Uint128, + provided: Uint128, + }, } diff --git a/contracts/registry/src/lib.rs b/contracts/registry/src/lib.rs index 2fba7d8..78399d8 100644 --- a/contracts/registry/src/lib.rs +++ b/contracts/registry/src/lib.rs @@ -1,8 +1,9 @@ pub mod contract; mod error; +mod migrates; pub mod msg; pub mod state; -mod migrates; +pub mod utils; #[cfg(any(feature = "mt", test))] pub mod multitest; diff --git a/contracts/registry/src/msg.rs b/contracts/registry/src/msg.rs index dcebbb0..9465ee4 100644 --- a/contracts/registry/src/msg.rs +++ b/contracts/registry/src/msg.rs @@ -40,14 +40,16 @@ pub enum ExecuteMsg { CreateRound { operator: Addr, max_voter: Uint256, - max_option: Uint256, voice_credit_amount: Uint256, + vote_option_map: Vec, round_info: RoundInfo, voting_time: VotingTime, whitelist: Option, pre_deactivate_root: Uint256, circuit_type: Uint256, certification_system: Uint256, + oracle_whitelist_pubkey: Option, + pre_deactivate_coordinator: Option, }, SetValidators { addresses: ValidatorSet, diff --git a/contracts/registry/src/multitest/certificate_generator.rs b/contracts/registry/src/multitest/certificate_generator.rs new file mode 100644 index 0000000..8ee11e0 --- /dev/null +++ b/contracts/registry/src/multitest/certificate_generator.rs @@ -0,0 +1,171 @@ +use base64::{engine::general_purpose, Engine as _}; +use cosmwasm_std::{Addr, Uint256}; +use secp256k1::{Message, PublicKey, Secp256k1, SecretKey}; +use serde_json; +use sha2::{Digest, Sha256}; + +// Private key (hex format) - Keep consistent with api-maci +const PRIVATE_KEY_HEX: &str = "84d85037a14db4a7a1424084cca70211685ad65f7325c4d26aca93edfb2995df"; + +// Pubkey (base64) - Keep consistent with api-maci +const PUBKEY_B64: &str = "A9ekxvWjYNpnHTasS008PG+EuF2ssIkUPaDdnn8ZdzTb"; + +/// Convert a contract address to Uint256 format +/// This function takes the address bytes and converts them to a Uint256 +fn address_to_uint256(address: &Addr) -> Uint256 { + let address_bytes = address.as_bytes(); + + // Use SHA256 hash to convert the address to a fixed-length 32-byte format + let mut hasher = Sha256::new(); + hasher.update(address_bytes); + let hash_result = hasher.finalize(); + + // Convert the hash bytes to Uint256 + let mut bytes = [0u8; 32]; + bytes.copy_from_slice(&hash_result[..]); + + // Convert bytes to Uint256 (big-endian) + let mut uint256_bytes = [0u8; 32]; + for (i, &byte) in bytes.iter().enumerate() { + uint256_bytes[31 - i] = byte; // Reverse for little-endian to big-endian conversion + } + + Uint256::from_be_bytes(uint256_bytes) +} + +/// Generate certificate for given user pubkey and amount (for registry oracle mode) +pub fn generate_certificate_for_pubkey( + contract_address: &str, + pubkey_x: &str, + pubkey_y: &str, + amount: u128, +) -> String { + // Convert contract address to Uint256 format to match amaci logic + let addr = Addr::unchecked(contract_address); + let contract_address_uint256 = address_to_uint256(&addr); + + // Create payload matching the amaci oracle format + let payload = serde_json::json!({ + "amount": amount.to_string(), + "contract_address": contract_address_uint256.to_string(), + "pubkey_x": pubkey_x, + "pubkey_y": pubkey_y, + }); + + let msg = payload.to_string().into_bytes(); + let hash = Sha256::digest(&msg); + + // Parse private key + let private_key_bytes = hex::decode(PRIVATE_KEY_HEX).expect("Invalid private key hex"); + let secret_key = SecretKey::from_slice(&private_key_bytes).expect("Invalid private key"); + + // Create secp256k1 context + let secp = Secp256k1::new(); + + // Create message object + let message = Message::from_slice(&hash).expect("32 bytes"); + + // Sign + let signature = secp.sign_ecdsa(&message, &secret_key); + + // Serialize signature and convert to base64 + let signature_bytes = signature.serialize_compact(); + general_purpose::STANDARD.encode(&signature_bytes) +} + +/// Get backend public key for oracle verification +pub fn get_backend_pubkey() -> String { + PUBKEY_B64.to_string() +} + +/// Verify if public key matches private key +pub fn verify_keypair() -> bool { + let private_key_bytes = hex::decode(PRIVATE_KEY_HEX).expect("Invalid private key hex"); + let secret_key = SecretKey::from_slice(&private_key_bytes).expect("Invalid private key"); + + let secp = Secp256k1::new(); + let public_key = PublicKey::from_secret_key(&secp, &secret_key); + + // Expected public key (base64) + let expected_pubkey_b64 = PUBKEY_B64; + let expected_pubkey_bytes = general_purpose::STANDARD + .decode(expected_pubkey_b64) + .expect("Invalid base64"); + + // Compare public keys + public_key.serialize().to_vec() == expected_pubkey_bytes +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_keypair_match() { + assert!(verify_keypair(), "Public key and private key do not match"); + } + + #[test] + fn test_certificate_generation_for_pubkey() { + let pubkey_x = + "3557592161792765812904087712812111121909518311142005886657252371904276697771"; + let pubkey_y = + "4363822302427519764561660537570341277214758164895027920046745209970137856681"; + let certificate = generate_certificate_for_pubkey("contract0", pubkey_x, pubkey_y, 100u128); + + // Ensure certificate is not empty + assert!(!certificate.is_empty()); + + // Ensure certificate is valid base64 + assert!(general_purpose::STANDARD.decode(&certificate).is_ok()); + + println!("Generated certificate for pubkey: {}", certificate); + } + + #[test] + fn test_different_pubkeys() { + let pubkey0_x = + "3557592161792765812904087712812111121909518311142005886657252371904276697771"; + let pubkey0_y = + "4363822302427519764561660537570341277214758164895027920046745209970137856681"; + let pubkey1_x = + "1234567890123456789012345678901234567890123456789012345678901234567890123456"; + let pubkey1_y = + "9876543210987654321098765432109876543210987654321098765432109876543210987654"; + + let cert0 = generate_certificate_for_pubkey("contract0", pubkey0_x, pubkey0_y, 100u128); + let cert1 = generate_certificate_for_pubkey("contract0", pubkey1_x, pubkey1_y, 100u128); + + // Different pubkeys should have different certificates + assert_ne!(cert0, cert1); + + println!("Pubkey 0 certificate: {}", cert0); + println!("Pubkey 1 certificate: {}", cert1); + } + + #[test] + fn test_registry_specific_functionality() { + // Test registry-specific use cases + let registry_contract = "registry-contract-addr"; + let pubkey_x = + "3557592161792765812904087712812111121909518311142005886657252371904276697771"; + let pubkey_y = + "4363822302427519764561660537570341277214758164895027920046745209970137856681"; + + let certificate = + generate_certificate_for_pubkey(registry_contract, pubkey_x, pubkey_y, 50u128); + + // Ensure certificate is not empty + assert!(!certificate.is_empty()); + + // Ensure certificate is valid base64 + assert!(general_purpose::STANDARD.decode(&certificate).is_ok()); + + // Test that get_backend_pubkey returns consistent value + let backend_pubkey = get_backend_pubkey(); + assert_eq!(backend_pubkey, PUBKEY_B64); + + println!("Registry certificate: {}", certificate); + println!("Backend pubkey: {}", backend_pubkey); + } +} diff --git a/contracts/registry/src/multitest/mod.rs b/contracts/registry/src/multitest/mod.rs index 8c7edf2..a7e2358 100644 --- a/contracts/registry/src/multitest/mod.rs +++ b/contracts/registry/src/multitest/mod.rs @@ -1,6 +1,8 @@ #[cfg(test)] mod tests; +pub mod certificate_generator; + use anyhow::Result as AnyResult; use crate::{ @@ -188,8 +190,14 @@ impl AmaciRegistryContract { operator, round_info, max_voter: Uint256::from_u128(5u128), - max_option: Uint256::from_u128(5u128), voice_credit_amount: Uint256::from_u128(30u128), + vote_option_map: vec![ + "".to_string(), + "".to_string(), + "".to_string(), + "".to_string(), + "".to_string(), + ], voting_time: VotingTime { start_time, end_time, @@ -198,6 +206,8 @@ impl AmaciRegistryContract { pre_deactivate_root: Uint256::from_u128(0u128), circuit_type, certification_system, + oracle_whitelist_pubkey: None, + pre_deactivate_coordinator: None, }; app.execute_contract(sender, self.addr(), &msg, send_funds) @@ -234,8 +244,14 @@ impl AmaciRegistryContract { operator, round_info, max_voter: Uint256::from_u128(3u128), - max_option: Uint256::from_u128(5u128), voice_credit_amount: Uint256::from_u128(100u128), + vote_option_map: vec![ + "".to_string(), + "".to_string(), + "".to_string(), + "".to_string(), + "".to_string(), + ], voting_time: VotingTime { start_time, end_time, @@ -244,6 +260,55 @@ impl AmaciRegistryContract { pre_deactivate_root: Uint256::from_u128(0u128), circuit_type, certification_system, + oracle_whitelist_pubkey: None, + pre_deactivate_coordinator: None, + }; + + app.execute_contract(sender, self.addr(), &msg, send_funds) + } + + #[track_caller] + pub fn create_round_with_oracle( + &self, + app: &mut App, + sender: Addr, + operator: Addr, + circuit_type: Uint256, + certification_system: Uint256, + oracle_whitelist_pubkey: String, + send_funds: &[Coin], + ) -> AnyResult { + let round_info = RoundInfo { + title: String::from("Oracle MACI Test"), + description: String::from("Testing Oracle MACI mode"), + link: String::from("https://test.com"), + }; + + let start_time = Timestamp::from_nanos(1571797424879000000); + let end_time = start_time.plus_minutes(21); + + let msg = ExecuteMsg::CreateRound { + operator, + round_info, + max_voter: Uint256::from_u128(5u128), + voice_credit_amount: Uint256::from_u128(100u128), + vote_option_map: vec![ + "".to_string(), + "".to_string(), + "".to_string(), + "".to_string(), + "".to_string(), + ], + voting_time: VotingTime { + start_time, + end_time, + }, + whitelist: None, + pre_deactivate_root: Uint256::from_u128(0u128), + circuit_type, + certification_system, + oracle_whitelist_pubkey: Some(oracle_whitelist_pubkey), + pre_deactivate_coordinator: None, }; app.execute_contract(sender, self.addr(), &msg, send_funds) diff --git a/contracts/registry/src/multitest/tests.rs b/contracts/registry/src/multitest/tests.rs index 786fed0..e7baaad 100644 --- a/contracts/registry/src/multitest/tests.rs +++ b/contracts/registry/src/multitest/tests.rs @@ -3,14 +3,18 @@ use cw_multi_test::App; // use crate::error::ContractError; // use crate::msg::ClaimsResponse; +use crate::multitest::certificate_generator::generate_certificate_for_pubkey; use crate::{ multitest::{ - operator, operator2, operator3, operator_pubkey1, operator_pubkey2, operator_pubkey3, - admin, creator, user1, user2, user3, user4, AmaciRegistryCodeId, InstantiationData, DORA_DEMON, + admin, creator, operator, operator2, operator3, operator_pubkey1, operator_pubkey2, + operator_pubkey3, user1, user2, user3, user4, AmaciRegistryCodeId, InstantiationData, + DORA_DEMON, }, state::ValidatorSet, }; use cw_amaci::multitest::{fee_recipient, owner, MaciCodeId, MaciContract}; +// Oracle whitelist config no longer needed - using simple pubkey string +use cosmwasm_std::Binary; use cw_amaci::ContractError as AmaciContractError; use cw_amaci::msg::Groth16ProofType; @@ -174,14 +178,13 @@ pub fn next_block_22_minutes(block: &mut BlockInfo) { pub fn next_block_31_minutes(block: &mut BlockInfo) { block.time = block.time.plus_minutes(31); block.height += 1; -} +} pub fn next_block_3_hours(block: &mut BlockInfo) { block.time = block.time.plus_hours(3); block.height += 1; } - pub fn next_block_4_days(block: &mut BlockInfo) { block.time = block.time.plus_days(4); block.height += 1; @@ -530,23 +533,20 @@ fn create_round_with_reward_should_works() { let creator_balance_after = contract .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) .unwrap(); - + // Record admin balance after creating round let admin_balance_after = contract .balance_of(&app, admin().to_string(), DORA_DEMON.to_string()) .unwrap(); - + // Verify that creator balance decreased by small_base_payamount assert_eq!( creator_balance_before.amount - Uint128::from(small_base_payamount), creator_balance_after.amount ); - + // Verify that admin balance did not change - assert_eq!( - admin_balance_before.amount, - admin_balance_after.amount - ); + assert_eq!(admin_balance_before.amount, admin_balance_after.amount); let amaci_round_balance = contract .balance_of( @@ -648,7 +648,7 @@ fn create_round_with_voting_time_qv_amaci_should_works() { let creator_balance_before = contract .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) .unwrap(); - + let admin_balance_before = contract .balance_of(&app, admin().to_string(), DORA_DEMON.to_string()) .unwrap(); @@ -663,12 +663,12 @@ fn create_round_with_voting_time_qv_amaci_should_works() { &coins(small_base_payamount, DORA_DEMON), ) .unwrap(); - + // Record balance after creating round let creator_balance_after = contract .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) .unwrap(); - + // Verify that creator balance decreased by small_base_payamount assert_eq!( creator_balance_before.amount - Uint128::from(small_base_payamount), @@ -888,7 +888,7 @@ fn create_round_with_voting_time_qv_amaci_should_works() { let proof = Groth16ProofType { a: data.proof.pi_a.to_string(), b: data.proof.pi_b.to_string(), - c: data.proof.pi_c.to_string() + c: data.proof.pi_c.to_string(), }; println!("add_new_key proof {:?}", proof); @@ -962,7 +962,7 @@ fn create_round_with_voting_time_qv_amaci_should_works() { let proof = Groth16ProofType { a: data.proof.pi_a.to_string(), b: data.proof.pi_b.to_string(), - c: data.proof.pi_c.to_string() + c: data.proof.pi_c.to_string(), }; println!("process_message proof {:?}", proof); println!( @@ -1002,7 +1002,7 @@ fn create_round_with_voting_time_qv_amaci_should_works() { let tally_proof = Groth16ProofType { a: data.proof.pi_a.to_string(), b: data.proof.pi_b.to_string(), - c: data.proof.pi_c.to_string() + c: data.proof.pi_c.to_string(), }; _ = maci_contract @@ -1130,10 +1130,7 @@ fn create_round_with_voting_time_qv_amaci_should_works() { DORA_DEMON.to_string(), ) .unwrap(); - println!( - "round_balance_after_claim: {:?}", - round_balance_after_claim - ); + println!("round_balance_after_claim: {:?}", round_balance_after_claim); let total_amount = Uint128::from(round_balance_before_claim.amount); let admin_fee = circuit_charge_config.fee_rate * total_amount; @@ -1144,28 +1141,24 @@ fn create_round_with_voting_time_qv_amaci_should_works() { let penalty_amount = claim_amount - operator_reward; println!("operator_reward: {:?}", operator_reward); println!("penalty_amount: {:?}", penalty_amount); - + assert_eq!( operator_balance.amount, - operator_reward + operator_balance_before_claim.amount - // Uint128::from(0u128) // after 4 days, operator reward is 0, all funds are returned to creator - ); - - assert_eq!( - admin_balance.amount, - admin_fee + operator_reward + operator_balance_before_claim.amount // Uint128::from(0u128) // after 4 days, operator reward is 0, all funds are returned to creator ); - + + assert_eq!(admin_balance.amount, admin_fee); + assert_eq!( creator_balance.amount, penalty_amount + creator_balance_before_claim.amount ); - + assert_eq!( round_balance_after_claim.amount, round_balance_before_claim.amount - claim_amount - admin_fee ); - + assert_eq!(round_balance_after_claim.amount, Uint128::from(0u128)); let claim_error = maci_contract.amaci_claim(&mut app, creator()).unwrap_err(); @@ -1263,7 +1256,7 @@ fn create_round_with_voting_time_qv_amaci_after_4_days_with_no_operator_reward_s let creator_balance_before = contract .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) .unwrap(); - + let resp = contract .create_round_with_whitelist( &mut app, @@ -1274,12 +1267,12 @@ fn create_round_with_voting_time_qv_amaci_after_4_days_with_no_operator_reward_s &coins(small_base_payamount, DORA_DEMON), ) .unwrap(); - + // Record balance after creating the round let creator_balance_after = contract .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) .unwrap(); - + // Verify that the creator's balance decreased by small_base_payamount assert_eq!( creator_balance_before.amount - Uint128::from(small_base_payamount), @@ -1498,7 +1491,7 @@ fn create_round_with_voting_time_qv_amaci_after_4_days_with_no_operator_reward_s let proof = Groth16ProofType { a: data.proof.pi_a.to_string(), b: data.proof.pi_b.to_string(), - c: data.proof.pi_c.to_string() + c: data.proof.pi_c.to_string(), }; println!("add_new_key proof {:?}", proof); @@ -1572,7 +1565,7 @@ fn create_round_with_voting_time_qv_amaci_after_4_days_with_no_operator_reward_s let proof = Groth16ProofType { a: data.proof.pi_a.to_string(), b: data.proof.pi_b.to_string(), - c: data.proof.pi_c.to_string() + c: data.proof.pi_c.to_string(), }; println!("process_message proof {:?}", proof); println!( @@ -1612,7 +1605,7 @@ fn create_round_with_voting_time_qv_amaci_after_4_days_with_no_operator_reward_s let tally_proof = Groth16ProofType { a: data.proof.pi_a.to_string(), b: data.proof.pi_b.to_string(), - c: data.proof.pi_c.to_string() + c: data.proof.pi_c.to_string(), }; _ = maci_contract @@ -1740,10 +1733,7 @@ fn create_round_with_voting_time_qv_amaci_after_4_days_with_no_operator_reward_s DORA_DEMON.to_string(), ) .unwrap(); - println!( - "round_balance_after_claim: {:?}", - round_balance_after_claim - ); + println!("round_balance_after_claim: {:?}", round_balance_after_claim); let total_amount = Uint128::from(round_balance_before_claim.amount); // let admin_fee = circuit_charge_config.fee_rate * total_amount; @@ -1755,27 +1745,614 @@ fn create_round_with_voting_time_qv_amaci_after_4_days_with_no_operator_reward_s let penalty_amount = claim_amount - operator_reward; println!("operator_reward: {:?}", operator_reward); println!("penalty_amount: {:?}", penalty_amount); - + assert_eq!( operator_balance.amount, Uint128::from(0u128) // after 4 days, operator reward is 0, all funds are returned to creator ); - - assert_eq!( - admin_balance.amount, - admin_fee - ); - + + assert_eq!(admin_balance.amount, admin_fee); + assert_eq!( creator_balance.amount, penalty_amount + creator_balance_before_claim.amount ); - + assert_eq!( round_balance_after_claim.amount, round_balance_before_claim.amount - claim_amount - admin_fee ); - + + assert_eq!(round_balance_after_claim.amount, Uint128::from(0u128)); + + let claim_error = maci_contract.amaci_claim(&mut app, creator()).unwrap_err(); + assert_eq!( + AmaciContractError::AllFundsClaimed {}, + claim_error.downcast().unwrap() + ); + + let tally_delay = maci_contract.amaci_query_tally_delay(&app).unwrap(); + println!("tally_delay: {:?}", tally_delay); +} + +#[test] +fn create_round_with_qv_oracle_mode_amaci_should_works() { + let msg_file_path = "./src/test/qv_test/msg.json"; + + let mut msg_file = fs::File::open(msg_file_path).expect("Failed to open file"); + let mut msg_content = String::new(); + + msg_file + .read_to_string(&mut msg_content) + .expect("Failed to read file"); + + let data: MsgData = serde_json::from_str(&msg_content).expect("Failed to parse JSON"); + + let logs_file_path = "./src/test/amaci_test/logs.json"; + + let mut logs_file = fs::File::open(logs_file_path).expect("Failed to open file"); + let mut logs_content = String::new(); + + logs_file + .read_to_string(&mut logs_content) + .expect("Failed to read file"); + + let logs_data: Vec = + serde_json::from_str(&logs_content).expect("Failed to parse JSON"); + + let pubkey_file_path = "./src/test/user_pubkey.json"; + + let mut pubkey_file = fs::File::open(pubkey_file_path).expect("Failed to open file"); + let mut pubkey_content = String::new(); + + pubkey_file + .read_to_string(&mut pubkey_content) + .expect("Failed to read file"); + let pubkey_data: UserPubkeyData = + serde_json::from_str(&pubkey_content).expect("Failed to parse JSON"); + + let creator_coin_amount = 50000000000000000000u128; // 50 DORA + + let mut app = App::new(|router, _api, storage| { + router + .bank + .init_balance(storage, &creator(), coins(creator_coin_amount, DORA_DEMON)) + .unwrap(); + }); + + let register_code_id = AmaciRegistryCodeId::store_code(&mut app); + let amaci_code_id = MaciCodeId::store_default_code(&mut app); + + let label = "Dora AMaci Registry Oracle Test"; + let contract = register_code_id + .instantiate(&mut app, creator(), amaci_code_id.id(), label) + .unwrap(); + + _ = contract.set_validators(&mut app, admin()); + + let validator_set = contract.get_validators(&app).unwrap(); + assert_eq!( + ValidatorSet { + addresses: vec![user1(), user2(), user4()] + }, + validator_set + ); + + _ = contract.set_maci_operator(&mut app, user1(), operator()); + let user1_operator_addr = contract.get_validator_operator(&app, user1()).unwrap(); + assert_eq!(operator(), user1_operator_addr); + + let user1_check_operator = contract.is_maci_operator(&app, operator()).unwrap(); + assert_eq!(true, user1_check_operator); + + _ = contract.set_maci_operator_pubkey(&mut app, operator(), operator_pubkey1()); + + let user1_operator_pubkey = contract.get_operator_pubkey(&app, operator()).unwrap(); + assert_eq!(operator_pubkey1(), user1_operator_pubkey); + + let small_base_payamount = 20000000000000000000u128; // 20 DORA + + // Record balance before creating round + let creator_balance_before = contract + .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) + .unwrap(); + let circuit_charge_config = contract.get_circuit_charge_config(&app).unwrap(); + + // Create Oracle whitelist pubkey + let oracle_pubkey = "A9ekxvWjYNpnHTasS008PG+EuF2ssIkUPaDdnn8ZdzTb".to_string(); + + let resp = contract + .create_round_with_oracle( + &mut app, + creator(), + operator(), + Uint256::from_u128(1u128), // circuit_type: 1p1v + Uint256::from_u128(0u128), // certification_system: groth16 + oracle_pubkey, + &coins(small_base_payamount, DORA_DEMON), + ) + .unwrap(); + + // Record balance after creating round + let creator_balance_after = contract + .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) + .unwrap(); + + // Verify that creator balance decreased by small_base_payamount + assert_eq!( + creator_balance_before.amount - Uint128::from(small_base_payamount), + creator_balance_after.amount + ); + + let amaci_contract_addr: InstantiationData = from_json(&resp.data.unwrap()).unwrap(); + println!("Oracle AMACI Contract Address: {:?}", amaci_contract_addr); + let maci_contract = MaciContract::new(amaci_contract_addr.addr.clone()); + + let amaci_admin = maci_contract.amaci_query_admin(&app).unwrap(); + assert_eq!(creator(), amaci_admin); + + let amaci_operator = maci_contract.amaci_query_operator(&app).unwrap(); + assert_eq!(operator(), amaci_operator); + + let amaci_round_info = maci_contract.amaci_query_round_info(&app).unwrap(); + println!("Oracle Round Info: {:?}", amaci_round_info); + assert_eq!(amaci_round_info.title, "Oracle MACI Test"); + + // Note: Oracle whitelist config query method not available in current multitest wrapper + // The config should be set correctly in the contract instantiation + + let num_sign_up = maci_contract.amaci_num_sign_up(&app).unwrap(); + assert_eq!(num_sign_up, Uint256::from_u128(0u128)); + + let vote_option_map = maci_contract.amaci_vote_option_map(&app).unwrap(); + let max_vote_options = maci_contract.amaci_max_vote_options(&app).unwrap(); + assert_eq!(vote_option_map, vec!["", "", "", "", ""]); + assert_eq!(max_vote_options, Uint256::from_u128(5u128)); + + _ = maci_contract.amaci_set_vote_option_map(&mut app, creator()); + let new_vote_option_map = maci_contract.amaci_vote_option_map(&app).unwrap(); + assert_eq!( + new_vote_option_map, + vec![ + String::from("did_not_vote"), + String::from("yes"), + String::from("no"), + String::from("no_with_veto"), + String::from("abstain"), + ] + ); + + // Move to voting period + app.update_block(next_block); + + let pubkey0 = PubKey { + x: uint256_from_decimal_string(&pubkey_data.pubkeys[0][0]), + y: uint256_from_decimal_string(&pubkey_data.pubkeys[0][1]), + }; + + let pubkey1 = PubKey { + x: uint256_from_decimal_string(&pubkey_data.pubkeys[1][0]), + y: uint256_from_decimal_string(&pubkey_data.pubkeys[1][1]), + }; + + let test_pubkey = PubKey { + x: uint256_from_decimal_string(&data.current_state_leaves[0][0]), + y: uint256_from_decimal_string(&data.current_state_leaves[0][1]), + }; + + // Generate certificates for test users + let contract_addr = amaci_contract_addr.addr.to_string(); + let cert1 = generate_certificate_for_pubkey( + &contract_addr, + &pubkey0.x.to_string(), + &pubkey0.y.to_string(), + 100u128, // voice_credit_amount + ); + + let cert2 = generate_certificate_for_pubkey( + &contract_addr, + &pubkey1.x.to_string(), + &pubkey1.y.to_string(), + 100u128, // voice_credit_amount + ); + + // Test Oracle signup with invalid certificate + let signup_result_invalid = maci_contract + .amaci_sign_up_oracle( + &mut app, + user1(), + pubkey0.clone(), + "9N+0uBmu7b2Sr2ibC0ViOQ00z7LZwrTJDZmoGit8TScDDzbjXUmOkB4hLKSnLEORX7ITYbeG9409VL3OLCZdag==".to_string(), + ) + .unwrap_err(); + assert_eq!( + AmaciContractError::InvalidSignature {}, + signup_result_invalid.downcast().unwrap() + ); + + // Test Oracle signup for two users + let signup_result1 = + maci_contract.amaci_sign_up_oracle(&mut app, user1(), pubkey0.clone(), cert1); + assert!( + signup_result1.is_ok(), + "Oracle signup 1 should succeed: {:?}", + signup_result1.err() + ); + + let signup_result2 = + maci_contract.amaci_sign_up_oracle(&mut app, user2(), pubkey1.clone(), cert2); + assert!( + signup_result2.is_ok(), + "Oracle signup 2 should succeed: {:?}", + signup_result2.err() + ); + + // Verify signup count + let num_sign_up_after = maci_contract.amaci_num_sign_up(&app).unwrap(); + assert_eq!(num_sign_up_after, Uint256::from_u128(2u128)); + + // Verify signups + assert_eq!( + maci_contract.amaci_signuped(&app, pubkey0.x).unwrap(), + Uint256::from_u128(1u128) + ); + assert_eq!( + maci_contract.amaci_signuped(&app, pubkey1.x).unwrap(), + Uint256::from_u128(2u128) + ); + + for entry in &logs_data { + match entry.log_type.as_str() { + "publishDeactivateMessage" => { + let data: PublishDeactivateMessageData = deserialize_data(&entry.data); + + let message = MessageData { + data: [ + uint256_from_decimal_string(&data.message[0]), + uint256_from_decimal_string(&data.message[1]), + uint256_from_decimal_string(&data.message[2]), + uint256_from_decimal_string(&data.message[3]), + uint256_from_decimal_string(&data.message[4]), + uint256_from_decimal_string(&data.message[5]), + uint256_from_decimal_string(&data.message[6]), + ], + }; + + let enc_pub = PubKey { + x: uint256_from_decimal_string(&data.enc_pub_key[0]), + y: uint256_from_decimal_string(&data.enc_pub_key[1]), + }; + _ = maci_contract.amaci_publish_deactivate_message( + &mut app, + user2(), + message, + enc_pub, + ); + } + "proofDeactivate" => { + let data: ProofDeactivateData = deserialize_data(&entry.data); + assert_eq!( + maci_contract.amaci_dmsg_length(&app).unwrap(), + Uint256::from_u128(2u128) + ); + + let size = uint256_from_decimal_string(&data.size); + let new_deactivate_commitment = + uint256_from_decimal_string(&data.new_deactivate_commitment); + let new_deactivate_root = uint256_from_decimal_string(&data.new_deactivate_root); + let proof = Groth16ProofType { + a: "04c5d564a7dd1feaba7c422f429327bd5e9430cb6b67f0bf77a19788fac264a7080063a86a7f45a4893f68ce20a4ee0bc22cb085866c9387d1b822d1b1fba033".to_string(), + b: "1515ff2d529baece55d6d9f7338de646dc83fba060dce13a88a8b31114b9df8b2573959072de506962aeadc60198138bfbba84a7ed3a7a349563a1b3ed4fef67062efab826e3b0ebdbce3bf0744634ba3db1d336d7ba38cfd16b8d3d42f9bb5d2546e2f71e1bbd6f680e65696aad163f99c3baac18c27146c17086542b2da535".to_string(), + c: "2cb72b2822ff424c48e6972bdca59ee9f6b813bfb00571a286c41070a5a56de91d5e9c1310eef0653dc5c34255ebd40afaffcd65ba34f6d4799a4dca92cf12ff".to_string() + }; + println!("process_deactivate_message proof {:?}", proof); + println!( + "process_deactivate_message new state commitment {:?}", + new_deactivate_commitment + ); + app.update_block(next_block_11_minutes); + _ = maci_contract + .amaci_process_deactivate_message( + &mut app, + creator(), + size, + new_deactivate_commitment, + new_deactivate_root, + proof, + ) + .unwrap(); + } + "proofAddNewKey" => { + let data: ProofAddNewKeyData = deserialize_data(&entry.data); + + let new_key_pub = PubKey { + x: uint256_from_decimal_string(&data.pub_key[0]), + y: uint256_from_decimal_string(&data.pub_key[1]), + }; + + let d: [Uint256; 4] = [ + uint256_from_decimal_string(&data.d[0]), + uint256_from_decimal_string(&data.d[1]), + uint256_from_decimal_string(&data.d[2]), + uint256_from_decimal_string(&data.d[3]), + ]; + + let nullifier = uint256_from_decimal_string(&data.nullifier); + + let proof = Groth16ProofType { + a: data.proof.pi_a.to_string(), + b: data.proof.pi_b.to_string(), + c: data.proof.pi_c.to_string(), + }; + + println!("add_new_key proof {:?}", proof); + _ = maci_contract + .amaci_add_key(&mut app, creator(), new_key_pub, nullifier, d, proof) + .unwrap(); + } + "publishMessage" => { + let data: PublishMessageData = deserialize_data(&entry.data); + + let message = MessageData { + data: [ + uint256_from_decimal_string(&data.message[0]), + uint256_from_decimal_string(&data.message[1]), + uint256_from_decimal_string(&data.message[2]), + uint256_from_decimal_string(&data.message[3]), + uint256_from_decimal_string(&data.message[4]), + uint256_from_decimal_string(&data.message[5]), + uint256_from_decimal_string(&data.message[6]), + ], + }; + + let enc_pub = PubKey { + x: uint256_from_decimal_string(&data.enc_pub_key[0]), + y: uint256_from_decimal_string(&data.enc_pub_key[1]), + }; + + println!("------- publishMessage ------"); + _ = maci_contract.amaci_publish_message(&mut app, user2(), message, enc_pub); + } + "processMessage" => { + let data: ProcessMessageData = deserialize_data(&entry.data); + app.update_block(next_block_11_minutes); + + let sign_up_after_voting_end_error = maci_contract + .amaci_sign_up( + &mut app, + Addr::unchecked(3.to_string()), + test_pubkey.clone(), + ) + .unwrap_err(); + assert_eq!( + AmaciContractError::PeriodError {}, + sign_up_after_voting_end_error.downcast().unwrap() + ); + + _ = maci_contract.amaci_start_process(&mut app, creator()); + assert_eq!( + Period { + status: PeriodStatus::Processing + }, + maci_contract.amaci_get_period(&app).unwrap() + ); + + println!( + "after start process: {:?}", + maci_contract.amaci_get_period(&app).unwrap() + ); + + let error_stop_processing_with_not_finish_process = maci_contract + .amaci_stop_processing(&mut app, creator()) + .unwrap_err(); + assert_eq!( + AmaciContractError::MsgLeftProcess {}, + error_stop_processing_with_not_finish_process + .downcast() + .unwrap() + ); + + let new_state_commitment = uint256_from_decimal_string(&data.new_state_commitment); + let proof = Groth16ProofType { + a: data.proof.pi_a.to_string(), + b: data.proof.pi_b.to_string(), + c: data.proof.pi_c.to_string(), + }; + println!("process_message proof {:?}", proof); + println!( + "process_message new state commitment {:?}", + new_state_commitment + ); + println!("------ processMessage ------"); + _ = maci_contract + .amaci_process_message(&mut app, creator(), new_state_commitment, proof) + .unwrap(); + } + "processTally" => { + let data: ProcessTallyData = deserialize_data(&entry.data); + + _ = maci_contract.amaci_stop_processing(&mut app, creator()); + println!( + "after stop process: {:?}", + maci_contract.amaci_get_period(&app).unwrap() + ); + + let error_start_process_in_talling = maci_contract + .amaci_start_process(&mut app, creator()) + .unwrap_err(); + assert_eq!( + AmaciContractError::PeriodError {}, + error_start_process_in_talling.downcast().unwrap() + ); + assert_eq!( + Period { + status: PeriodStatus::Tallying + }, + maci_contract.amaci_get_period(&app).unwrap() + ); + + let new_tally_commitment = uint256_from_decimal_string(&data.new_tally_commitment); + + let tally_proof = Groth16ProofType { + a: data.proof.pi_a.to_string(), + b: data.proof.pi_b.to_string(), + c: data.proof.pi_c.to_string(), + }; + + _ = maci_contract + .amaci_process_tally(&mut app, creator(), new_tally_commitment, tally_proof) + .unwrap(); + } + "stopTallyingPeriod" => { + let data: StopTallyingPeriodData = deserialize_data(&entry.data); + + let results: Vec = vec![ + uint256_from_decimal_string(&data.results[0]), + uint256_from_decimal_string(&data.results[1]), + uint256_from_decimal_string(&data.results[2]), + uint256_from_decimal_string(&data.results[3]), + uint256_from_decimal_string(&data.results[4]), + ]; + + let salt = uint256_from_decimal_string(&data.salt); + + let withdraw_error = maci_contract.amaci_claim(&mut app, creator()).unwrap_err(); + assert_eq!( + AmaciContractError::PeriodError {}, + withdraw_error.downcast().unwrap() + ); + + app.update_block(next_block_3_hours); + _ = maci_contract.amaci_stop_tallying(&mut app, creator(), results, salt); + + let all_result = maci_contract.amaci_get_all_result(&app); + println!("all_result: {:?}", all_result); + let error_start_process = maci_contract + .amaci_start_process(&mut app, creator()) + .unwrap_err(); + assert_eq!( + AmaciContractError::PeriodError {}, + error_start_process.downcast().unwrap() + ); + + assert_eq!( + Period { + status: PeriodStatus::Ended + }, + maci_contract.amaci_get_period(&app).unwrap() + ); + } + _ => println!("Unknown type: {}", entry.log_type), + } + } + + let delay_records = maci_contract.amaci_query_delay_records(&app).unwrap(); + println!("delay_records: {:?}", delay_records); + assert_eq!( + delay_records, + DelayRecords { + records: vec![ + DelayRecord { + delay_timestamp: Timestamp::from_nanos(1571797424879305533), + delay_duration: 660, + delay_reason: + "Processing of 2 deactivate messages has timed out after 660 seconds" + .to_string(), + delay_process_dmsg_count: Uint256::from_u128(2), + delay_type: DelayType::DeactivateDelay, + }, + DelayRecord { + delay_timestamp: Timestamp::from_nanos(1571798684879000000), + delay_duration: 10860, + delay_reason: "Tallying has timed out after 10860 seconds (total process: 6, allowed: 3600 seconds)".to_string(), + delay_process_dmsg_count: Uint256::from_u128(0), + delay_type: DelayType::TallyDelay, + }, + ] + } + ); + + let round_balance_before_claim = contract + .balance_of( + &app, + maci_contract.addr().to_string(), + DORA_DEMON.to_string(), + ) + .unwrap(); + println!( + "round_balance_before_claim: {:?}", + round_balance_before_claim + ); + + let creator_balance_before_claim = contract + .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) + .unwrap(); + println!( + "creator_balance_before_claim: {:?}", + creator_balance_before_claim + ); + + let operator_balance_before_claim = contract + .balance_of(&app, operator().to_string(), DORA_DEMON.to_string()) + .unwrap(); + println!( + "operator_balance_before_claim: {:?}", + operator_balance_before_claim + ); + + // app.update_block(next_block_4_days); // after 4 days, operator reward is 0, all funds are returned to creator + _ = maci_contract.amaci_claim(&mut app, creator()); + let creator_balance = contract + .balance_of(&app, creator().to_string(), DORA_DEMON.to_string()) + .unwrap(); + println!("creator_balance: {:?}", creator_balance); + + let operator_balance = contract + .balance_of(&app, operator().to_string(), DORA_DEMON.to_string()) + .unwrap(); + println!("operator_balance: {:?}", operator_balance); + + let admin_balance = contract + .balance_of(&app, admin().to_string(), DORA_DEMON.to_string()) + .unwrap(); + println!("admin_balance: {:?}", admin_balance); + + let round_balance_after_claim = contract + .balance_of( + &app, + maci_contract.addr().to_string(), + DORA_DEMON.to_string(), + ) + .unwrap(); + println!("round_balance_after_claim: {:?}", round_balance_after_claim); + + let total_amount = Uint128::from(round_balance_before_claim.amount); + let admin_fee = circuit_charge_config.fee_rate * total_amount; + println!("admin_fee: {:?}", admin_fee); + let claim_amount = total_amount - admin_fee; + println!("claim_amount: {:?}", claim_amount); + let operator_reward = claim_amount.multiply_ratio(100u128 - (50u128 + 5u128 * 2), 100u128); + let penalty_amount = claim_amount - operator_reward; + println!("operator_reward: {:?}", operator_reward); + println!("penalty_amount: {:?}", penalty_amount); + + assert_eq!( + operator_balance.amount, + operator_reward + operator_balance_before_claim.amount // Uint128::from(0u128) // after 4 days, operator reward is 0, all funds are returned to creator + ); + + assert_eq!(admin_balance.amount, admin_fee); + + assert_eq!( + creator_balance.amount, + penalty_amount + creator_balance_before_claim.amount + ); + + assert_eq!( + round_balance_after_claim.amount, + round_balance_before_claim.amount - claim_amount - admin_fee + ); + assert_eq!(round_balance_after_claim.amount, Uint128::from(0u128)); let claim_error = maci_contract.amaci_claim(&mut app, creator()).unwrap_err(); diff --git a/contracts/registry/src/utils.rs b/contracts/registry/src/utils.rs new file mode 100644 index 0000000..3d21a6d --- /dev/null +++ b/contracts/registry/src/utils.rs @@ -0,0 +1,49 @@ +use cosmwasm_std::{Uint128, Uint256}; +use cw_amaci::state::MaciParameters; + +use crate::error::ContractError; + +/// Calculate the required fee and MACI parameters based on max voters and vote options +/// This function centralizes the fee calculation logic to ensure consistency across all contracts +pub fn calculate_round_fee_and_params( + max_voter: Uint256, + max_option: Uint256, +) -> Result<(Uint128, MaciParameters), ContractError> { + if max_voter <= Uint256::from_u128(25u128) && max_option <= Uint256::from_u128(5u128) { + // Small round configuration + // state_tree_depth: 2, vote_option_tree_depth: 1 + // price: 20 DORA + let maci_parameters = MaciParameters { + state_tree_depth: Uint256::from_u128(2u128), + int_state_tree_depth: Uint256::from_u128(1u128), + vote_option_tree_depth: Uint256::from_u128(1u128), + message_batch_size: Uint256::from_u128(5u128), + }; + let required_fee = Uint128::from(20000000000000000000u128); // 20 DORA + Ok((required_fee, maci_parameters)) + } else if max_voter <= Uint256::from_u128(625u128) && max_option <= Uint256::from_u128(25u128) { + // Large round configuration + // state_tree_depth: 4, vote_option_tree_depth: 2 + // price: 750 DORA + let maci_parameters = MaciParameters { + state_tree_depth: Uint256::from_u128(4u128), + int_state_tree_depth: Uint256::from_u128(2u128), + vote_option_tree_depth: Uint256::from_u128(2u128), + message_batch_size: Uint256::from_u128(25u128), + }; + let required_fee = Uint128::from(750000000000000000000u128); // 750 DORA + Ok((required_fee, maci_parameters)) + } else { + Err(ContractError::NoMatchedSizeCircuit {}) + } +} + +/// Calculate only the required fee for a given configuration +/// This is a convenience function for contracts that only need the fee amount +pub fn calculate_round_fee( + max_voter: Uint256, + max_option: Uint256, +) -> Result { + let (fee, _) = calculate_round_fee_and_params(max_voter, max_option)?; + Ok(fee) +} diff --git a/contracts/registry/ts/Registry.client.ts b/contracts/registry/ts/Registry.client.ts new file mode 100644 index 0000000..336f523 --- /dev/null +++ b/contracts/registry/ts/Registry.client.ts @@ -0,0 +1,356 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate"; +import { Coin, StdFee } from "@cosmjs/amino"; +import { Addr, InstantiateMsg, ExecuteMsg, Uint256, Timestamp, Uint64, Decimal, PubKey, RoundInfo, VotingTime, WhitelistBase, WhitelistBaseConfig, ValidatorSet, CircuitChargeConfig, QueryMsg, AdminResponse, String, Boolean } from "./Registry.types"; +export interface RegistryReadOnlyInterface { + contractAddress: string; + admin: () => Promise; + operator: () => Promise; + isMaciOperator: ({ + address + }: { + address: Addr; + }) => Promise; + isValidator: ({ + address + }: { + address: Addr; + }) => Promise; + getValidators: () => Promise; + getValidatorOperator: ({ + address + }: { + address: Addr; + }) => Promise; + getMaciOperatorPubkey: ({ + address + }: { + address: Addr; + }) => Promise; + getMaciOperatorIdentity: ({ + address + }: { + address: Addr; + }) => Promise; + getCircuitChargeConfig: () => Promise; +} +export class RegistryQueryClient implements RegistryReadOnlyInterface { + client: CosmWasmClient; + contractAddress: string; + constructor(client: CosmWasmClient, contractAddress: string) { + this.client = client; + this.contractAddress = contractAddress; + this.admin = this.admin.bind(this); + this.operator = this.operator.bind(this); + this.isMaciOperator = this.isMaciOperator.bind(this); + this.isValidator = this.isValidator.bind(this); + this.getValidators = this.getValidators.bind(this); + this.getValidatorOperator = this.getValidatorOperator.bind(this); + this.getMaciOperatorPubkey = this.getMaciOperatorPubkey.bind(this); + this.getMaciOperatorIdentity = this.getMaciOperatorIdentity.bind(this); + this.getCircuitChargeConfig = this.getCircuitChargeConfig.bind(this); + } + admin = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + admin: {} + }); + }; + operator = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + operator: {} + }); + }; + isMaciOperator = async ({ + address + }: { + address: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + is_maci_operator: { + address + } + }); + }; + isValidator = async ({ + address + }: { + address: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + is_validator: { + address + } + }); + }; + getValidators = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_validators: {} + }); + }; + getValidatorOperator = async ({ + address + }: { + address: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_validator_operator: { + address + } + }); + }; + getMaciOperatorPubkey = async ({ + address + }: { + address: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_maci_operator_pubkey: { + address + } + }); + }; + getMaciOperatorIdentity = async ({ + address + }: { + address: Addr; + }): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_maci_operator_identity: { + address + } + }); + }; + getCircuitChargeConfig = async (): Promise => { + return this.client.queryContractSmart(this.contractAddress, { + get_circuit_charge_config: {} + }); + }; +} +export interface RegistryInterface extends RegistryReadOnlyInterface { + contractAddress: string; + sender: string; + setMaciOperator: ({ + operator + }: { + operator: Addr; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + setMaciOperatorPubkey: ({ + pubkey + }: { + pubkey: PubKey; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + setMaciOperatorIdentity: ({ + identity + }: { + identity: string; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + createRound: ({ + certificationSystem, + circuitType, + maxVoter, + operator, + oracleWhitelistPubkey, + preDeactivateCoordinator, + preDeactivateRoot, + roundInfo, + voiceCreditAmount, + voteOptionMap, + votingTime, + whitelist + }: { + certificationSystem: Uint256; + circuitType: Uint256; + maxVoter: Uint256; + operator: Addr; + oracleWhitelistPubkey?: string; + preDeactivateCoordinator?: PubKey; + preDeactivateRoot: Uint256; + roundInfo: RoundInfo; + voiceCreditAmount: Uint256; + voteOptionMap: string[]; + votingTime: VotingTime; + whitelist?: WhitelistBase; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + setValidators: ({ + addresses + }: { + addresses: ValidatorSet; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + removeValidator: ({ + address + }: { + address: Addr; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + updateAmaciCodeId: ({ + amaciCodeId + }: { + amaciCodeId: number; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + changeOperator: ({ + address + }: { + address: Addr; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; + changeChargeConfig: ({ + config + }: { + config: CircuitChargeConfig; + }, fee?: number | StdFee | "auto", memo?: string, _funds?: Coin[]) => Promise; +} +export class RegistryClient extends RegistryQueryClient implements RegistryInterface { + client: SigningCosmWasmClient; + sender: string; + contractAddress: string; + constructor(client: SigningCosmWasmClient, sender: string, contractAddress: string) { + super(client, contractAddress); + this.client = client; + this.sender = sender; + this.contractAddress = contractAddress; + this.setMaciOperator = this.setMaciOperator.bind(this); + this.setMaciOperatorPubkey = this.setMaciOperatorPubkey.bind(this); + this.setMaciOperatorIdentity = this.setMaciOperatorIdentity.bind(this); + this.createRound = this.createRound.bind(this); + this.setValidators = this.setValidators.bind(this); + this.removeValidator = this.removeValidator.bind(this); + this.updateAmaciCodeId = this.updateAmaciCodeId.bind(this); + this.changeOperator = this.changeOperator.bind(this); + this.changeChargeConfig = this.changeChargeConfig.bind(this); + } + setMaciOperator = async ({ + operator + }: { + operator: Addr; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_maci_operator: { + operator + } + }, fee, memo, _funds); + }; + setMaciOperatorPubkey = async ({ + pubkey + }: { + pubkey: PubKey; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_maci_operator_pubkey: { + pubkey + } + }, fee, memo, _funds); + }; + setMaciOperatorIdentity = async ({ + identity + }: { + identity: string; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_maci_operator_identity: { + identity + } + }, fee, memo, _funds); + }; + createRound = async ({ + certificationSystem, + circuitType, + maxVoter, + operator, + oracleWhitelistPubkey, + preDeactivateCoordinator, + preDeactivateRoot, + roundInfo, + voiceCreditAmount, + voteOptionMap, + votingTime, + whitelist + }: { + certificationSystem: Uint256; + circuitType: Uint256; + maxVoter: Uint256; + operator: Addr; + oracleWhitelistPubkey?: string; + preDeactivateCoordinator?: PubKey; + preDeactivateRoot: Uint256; + roundInfo: RoundInfo; + voiceCreditAmount: Uint256; + voteOptionMap: string[]; + votingTime: VotingTime; + whitelist?: WhitelistBase; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + create_round: { + certification_system: certificationSystem, + circuit_type: circuitType, + max_voter: maxVoter, + operator, + oracle_whitelist_pubkey: oracleWhitelistPubkey, + pre_deactivate_coordinator: preDeactivateCoordinator, + pre_deactivate_root: preDeactivateRoot, + round_info: roundInfo, + voice_credit_amount: voiceCreditAmount, + vote_option_map: voteOptionMap, + voting_time: votingTime, + whitelist + } + }, fee, memo, _funds); + }; + setValidators = async ({ + addresses + }: { + addresses: ValidatorSet; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + set_validators: { + addresses + } + }, fee, memo, _funds); + }; + removeValidator = async ({ + address + }: { + address: Addr; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + remove_validator: { + address + } + }, fee, memo, _funds); + }; + updateAmaciCodeId = async ({ + amaciCodeId + }: { + amaciCodeId: number; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + update_amaci_code_id: { + amaci_code_id: amaciCodeId + } + }, fee, memo, _funds); + }; + changeOperator = async ({ + address + }: { + address: Addr; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + change_operator: { + address + } + }, fee, memo, _funds); + }; + changeChargeConfig = async ({ + config + }: { + config: CircuitChargeConfig; + }, fee: number | StdFee | "auto" = "auto", memo?: string, _funds?: Coin[]): Promise => { + return await this.client.execute(this.sender, this.contractAddress, { + change_charge_config: { + config + } + }, fee, memo, _funds); + }; +} \ No newline at end of file diff --git a/contracts/registry/ts/Registry.types.ts b/contracts/registry/ts/Registry.types.ts new file mode 100644 index 0000000..f36b241 --- /dev/null +++ b/contracts/registry/ts/Registry.types.ts @@ -0,0 +1,123 @@ +/** +* This file was automatically generated by @cosmwasm/ts-codegen@1.11.1. +* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, +* and run the @cosmwasm/ts-codegen generate command to regenerate this file. +*/ + +export type Addr = string; +export interface InstantiateMsg { + admin: Addr; + amaci_code_id: number; + operator: Addr; +} +export type ExecuteMsg = { + set_maci_operator: { + operator: Addr; + }; +} | { + set_maci_operator_pubkey: { + pubkey: PubKey; + }; +} | { + set_maci_operator_identity: { + identity: string; + }; +} | { + create_round: { + certification_system: Uint256; + circuit_type: Uint256; + max_voter: Uint256; + operator: Addr; + oracle_whitelist_pubkey?: string | null; + pre_deactivate_coordinator?: PubKey | null; + pre_deactivate_root: Uint256; + round_info: RoundInfo; + voice_credit_amount: Uint256; + vote_option_map: string[]; + voting_time: VotingTime; + whitelist?: WhitelistBase | null; + }; +} | { + set_validators: { + addresses: ValidatorSet; + }; +} | { + remove_validator: { + address: Addr; + }; +} | { + update_amaci_code_id: { + amaci_code_id: number; + }; +} | { + change_operator: { + address: Addr; + }; +} | { + change_charge_config: { + config: CircuitChargeConfig; + }; +}; +export type Uint256 = string; +export type Timestamp = Uint64; +export type Uint64 = string; +export type Decimal = string; +export interface PubKey { + x: Uint256; + y: Uint256; +} +export interface RoundInfo { + description: string; + link: string; + title: string; +} +export interface VotingTime { + end_time: Timestamp; + start_time: Timestamp; +} +export interface WhitelistBase { + users: WhitelistBaseConfig[]; +} +export interface WhitelistBaseConfig { + addr: Addr; +} +export interface ValidatorSet { + addresses: Addr[]; +} +export interface CircuitChargeConfig { + fee_rate: Decimal; +} +export type QueryMsg = { + admin: {}; +} | { + operator: {}; +} | { + is_maci_operator: { + address: Addr; + }; +} | { + is_validator: { + address: Addr; + }; +} | { + get_validators: {}; +} | { + get_validator_operator: { + address: Addr; + }; +} | { + get_maci_operator_pubkey: { + address: Addr; + }; +} | { + get_maci_operator_identity: { + address: Addr; + }; +} | { + get_circuit_charge_config: {}; +}; +export interface AdminResponse { + admin: Addr; +} +export type String = string; +export type Boolean = boolean; \ No newline at end of file diff --git a/contracts/saas/src/multitest/mod.rs b/contracts/saas/src/multitest/mod.rs index 3dba21a..d033767 100644 --- a/contracts/saas/src/multitest/mod.rs +++ b/contracts/saas/src/multitest/mod.rs @@ -278,7 +278,6 @@ impl SaasContract { .query_wasm_smart(self.addr(), &QueryMsg::OracleMaciCodeId {}) } - pub fn query_treasury_manager(&self, app: &App) -> StdResult { app.wrap() .query_wasm_smart(self.addr(), &QueryMsg::TreasuryManager {})