From 2ed2568e4b346d89da8cb61a828837d3c1b7b96e Mon Sep 17 00:00:00 2001 From: Philippe Camacho Date: Thu, 14 Dec 2023 14:32:37 -0300 Subject: [PATCH] Refactor/t775 update dependency bn254 (#797) * Use forge for testing the BLS signature implementation in solidity. * Remove BN256.G2 dependency and related code. * Remove function *verifyAggSig*. * Point to solidity-bn254 v0.2.0. * Use G2ParsedPoint in diff_test.rs. Co-authored-by: Alex Xiong --- .gitmodules | 2 +- Cargo.lock | 22 +- contract-bindings/src/bls_helper.rs | 421 -------------------- contract-bindings/src/bn256g2.rs | 119 ------ contract-bindings/src/deploy_hot_shot.rs | 259 ------------ contract-bindings/src/hot_shot.rs | 142 +------ contract-bindings/src/lib.rs | 3 - contract-bindings/src/light_client.rs | 20 +- contract-bindings/src/plonk_verifier.rs | 4 +- contract-bindings/src/stake_table.rs | 4 +- contracts/lib/bn254 | 2 +- contracts/rust/Cargo.toml | 5 +- contracts/rust/src/bin/diff_test.rs | 146 +++---- contracts/rust/src/bls_contract.rs | 125 ------ contracts/rust/src/helpers.rs | 46 +-- contracts/rust/src/hotshot_contract.rs | 183 +-------- contracts/rust/src/lib.rs | 1 - contracts/script/HotShot.s.sol | 15 - contracts/src/BLSTestHelper.sol | 24 -- contracts/src/HotShot.sol | 69 ---- contracts/src/LightClient.sol | 24 +- contracts/src/interfaces/IPlonkVerifier.sol | 20 +- contracts/src/libraries/BLSSig.sol | 13 +- contracts/src/libraries/BN256G2.sol | 340 ---------------- contracts/src/libraries/PlonkVerifier.sol | 47 ++- contracts/src/libraries/PolynomialEval.sol | 33 +- contracts/src/libraries/Transcript.sol | 43 +- contracts/test/BLSSig.t.sol | 81 ++++ contracts/test/PlonkVerifier.t.sol | 13 +- contracts/test/PolynomialEval.t.sol | 12 +- contracts/test/StakeTable.t.sol | 30 +- contracts/test/Transcript.t.sol | 13 +- sequencer/Cargo.toml | 1 - 33 files changed, 318 insertions(+), 1964 deletions(-) delete mode 100644 contract-bindings/src/bls_helper.rs delete mode 100644 contract-bindings/src/bn256g2.rs delete mode 100644 contract-bindings/src/deploy_hot_shot.rs delete mode 100644 contracts/rust/src/bls_contract.rs delete mode 100644 contracts/script/HotShot.s.sol delete mode 100644 contracts/src/BLSTestHelper.sol delete mode 100644 contracts/src/libraries/BN256G2.sol create mode 100644 contracts/test/BLSSig.t.sol diff --git a/.gitmodules b/.gitmodules index 9c31863c36..52d40aa582 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,7 +9,7 @@ [submodule "lib/bn254"] path = contracts/lib/bn254 url = https://github.com/EspressoSystems/solidity-bn254 - branch = v0.1.1 + branch = v0.2.0 [submodule "contracts/lib/solmate"] path = contracts/lib/solmate url = https://github.com/transmissions11/solmate diff --git a/Cargo.lock b/Cargo.lock index 1506fe5272..e88e882fe2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2207,6 +2207,19 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[package]] +name = "diff-test-bn254" +version = "0.1.0" +source = "git+https://github.com/EspressoSystems/solidity-bn254.git?tag=v0.2.0#050a98a3b389862c50d0bbbea620d8dc278c275a" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-std 0.4.0", + "clap", + "ethers", +] + [[package]] name = "digest" version = "0.9.0" @@ -3825,15 +3838,14 @@ dependencies = [ "ark-poly", "ark-serialize 0.4.2", "ark-std 0.4.0", - "async-compatibility-layer", "async-std", "clap", "contract-bindings", "crs", + "diff-test-bn254", "digest 0.10.7", "ethers", "ethers-providers", - "ethers-solc", "hex", "itertools 0.12.0", "jf-plonk", @@ -5736,11 +5748,6 @@ dependencies = [ "libc", ] -[[package]] -name = "nll" -version = "1.0.0" -source = "git+https://github.com/EspressoSystems/nll#8e7926789f8eb464cbbbb1858ba4292a6ec6d900" - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -7461,7 +7468,6 @@ dependencies = [ "jf-primitives", "jf-utils", "lazy_static", - "nll", "portpicker", "rand 0.8.5", "sequencer-utils", diff --git a/contract-bindings/src/bls_helper.rs b/contract-bindings/src/bls_helper.rs deleted file mode 100644 index 0ef79d2707..0000000000 --- a/contract-bindings/src/bls_helper.rs +++ /dev/null @@ -1,421 +0,0 @@ -pub use bls_helper::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types -)] -pub mod bls_helper { - pub use super::super::shared_types::*; - #[allow(deprecated)] - fn __abi() -> ::ethers::core::abi::Abi { - ::ethers::core::abi::ethabi::Contract { - constructor: ::core::option::Option::None, - functions: ::core::convert::From::from([ - ( - ::std::borrow::ToOwned::to_owned("hashToCurve"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("hashToCurve"), - inputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("input"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), - ), - },], - outputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), - ), - }, - ], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - },], - ), - ( - ::std::borrow::ToOwned::to_owned("hashToField"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("hashToField"), - inputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("message"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), - ), - },], - outputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), - ), - },], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::Pure, - },], - ), - ( - ::std::borrow::ToOwned::to_owned("verifyBlsSig"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("verifyBlsSig"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("message"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("sig"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ],), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct BN254.G1Point"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("pk"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ],), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct BN254.G2Point"), - ), - }, - ], - outputs: ::std::vec![], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - },], - ), - ]), - events: ::std::collections::BTreeMap::new(), - errors: ::core::convert::From::from([( - ::std::borrow::ToOwned::to_owned("BLSSigVerificationFailed"), - ::std::vec![::ethers::core::abi::ethabi::AbiError { - name: ::std::borrow::ToOwned::to_owned("BLSSigVerificationFailed",), - inputs: ::std::vec![], - },], - )]), - receive: false, - fallback: false, - } - } - ///The parsed JSON ABI of the contract. - pub static BLSHELPER_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = - ::ethers::contract::Lazy::new(__abi); - #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa\x10\xD4\x80a\0 `\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0AW`\x005`\xE0\x1C\x80c\x10x\x13\x0E\x14a\0FW\x80c\x1CT\x90\xF2\x14a\0[W\x80c\x95\x96\x1D\xF8\x14a\0\x81W[`\0\x80\xFD[a\0Ya\0T6`\x04a\x0C\xDBV[a\0\xA9V[\0[a\0na\0i6`\x04a\r\x8FV[a\0\xB9V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\x94a\0\x8F6`\x04a\r\x8FV[a\0\xCAV[`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\0xV[a\0\xB4\x83\x83\x83a\0\xDFV[PPPV[`\0a\0\xC4\x82a\x01\x91V[\x92\x91PPV[`\0\x80a\0\xD6\x83a\x03\xA5V[\x91P\x91P\x91P\x91V[a\0\xE8\x82a\x04xV[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x10\x84`$\x919\x90P`\0\x84\x82`@Q` \x01a\x01\x1A\x92\x91\x90a\r\xFCV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x017\x83a\x03\xA5V[`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x90R\x91\x93P\x91Pa\x01k\x81\x87a\x01^\x8Aa\x05\x07V[a\x01fa\x05\x82V[a\x06SV[a\x01\x87W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[`\0\x80a\x01\x9D\x83a\x075V[\x80Q\x90\x91P`0\x81\x14a\x01\xB2Wa\x01\xB2a\x0E\x11V[`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x01\xCDWa\x01\xCDa\x0B\xECV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x01\xF7W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x02hW\x83`\x01a\x02\x12\x83\x86a\x0E=V[a\x02\x1C\x91\x90a\x0E=V[\x81Q\x81\x10a\x02,Wa\x02,a\x0EPV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x02IWa\x02Ia\x0EPV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x01\xFDV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x02\xFAW\x83\x81a\x02\xA6\x85\x88a\x0E=V[a\x02\xB0\x91\x90a\x0EfV[\x81Q\x81\x10a\x02\xC0Wa\x02\xC0a\x0EPV[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x02\xE0Wa\x02\xE0a\x0EPV[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x02\x92V[P`\0a\x03\x06\x82a\n\x89V[\x90Pa\x01\0`\0\x80Q` a\x10\xA8\x839\x81Q\x91R`\0a\x03&\x86\x89a\x0E=V[\x90P`\0[\x81\x81\x10\x15a\x03\x95W`\0\x88`\x01a\x03B\x84\x86a\x0E=V[a\x03L\x91\x90a\x0E=V[\x81Q\x81\x10a\x03\\Wa\x03\\a\x0EPV[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x03tWa\x03ta\x0EyV[\x85\x87\t\x95P\x83\x80a\x03\x87Wa\x03\x87a\x0EyV[\x81\x87\x08\x95PP`\x01\x01a\x03+V[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0a\x03\xB3\x84a\x01\x91V[\x90P`\0\x80Q` a\x10\xA8\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\x03\xDCWa\x03\xDCa\x0EyV[\x84\x82\t\x90P\x82\x80a\x03\xEFWa\x03\xEFa\x0EyV[\x82\x82\x08\x90P`\0\x80a\x04\0\x83a\n\xF1V[\x92P\x90P[\x80a\x04iW\x84\x80a\x04\x18Wa\x04\x18a\x0EyV[`\x01\x87\x08\x95P\x84\x80a\x04,Wa\x04,a\x0EyV[\x86\x87\t\x92P\x84\x80a\x04?Wa\x04?a\x0EyV[\x86\x84\t\x92P\x84\x80a\x04RWa\x04Ra\x0EyV[\x84\x84\x08\x92Pa\x04`\x83a\n\xF1V[\x92P\x90Pa\x04\x05V[P\x93\x97\x93\x96P\x92\x94PPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a\x10\xA8\x839\x81Q\x91R\x91\x82`\x03\x81\x80\x85\x80\t\x85\t\x08\x83\x82\x83\t\x14\x81\x15\x83\x15\x17\x19\x84\x83\x10\x85\x85\x10\x16\x16\x16\x93PPP\x81a\0\xB4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x05/WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a\x10\xA8\x839\x81Q\x91R\x84` \x01Qa\x05b\x91\x90a\x0E\x8FV[a\x05z\x90`\0\x80Q` a\x10\xA8\x839\x81Q\x91Ra\x0E=V[\x90R\x92\x91PPV[a\x05\xAD`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x07)W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x04\xFEV[P\x15\x15\x95\x94PPPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x07v\x92\x91\x90a\r\xFCV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x07\x9D\x92\x91\x90a\x0E\xB1V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x07\xBF\x91\x90a\x0E\xDDV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x07\xE9\x90\x83\x90\x83\x90` \x01a\x0E\xF7V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x08ZWa\x08Za\x0B\xECV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x08\x84W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x08\x9C\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\t\x07W\x81\x81\x81Q\x81\x10a\x08\xCBWa\x08\xCBa\x0EPV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x08\xE8Wa\x08\xE8a\x0EPV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x08\xB0V[P`\0\x84`@Q` \x01a\t\x1D\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\t\xB1W`\0\x83\x82\x81Q\x81\x10a\tXWa\tXa\x0EPV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\tuWa\tua\x0EPV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\t\x96\x92\x91\x90a\x0F\x1CV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\t(::ethers::contract::Contract); - impl ::core::clone::Clone for BLSHelper { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for BLSHelper { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for BLSHelper { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for BLSHelper { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(::core::stringify!(BLSHelper)) - .field(&self.address()) - .finish() - } - } - impl BLSHelper { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self(::ethers::contract::Contract::new( - address.into(), - BLSHELPER_ABI.clone(), - client, - )) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - BLSHELPER_ABI.clone(), - BLSHELPER_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `hashToCurve` (0x95961df8) function - pub fn hash_to_curve( - &self, - input: ::ethers::core::types::Bytes, - ) -> ::ethers::contract::builders::ContractCall< - M, - (::ethers::core::types::U256, ::ethers::core::types::U256), - > { - self.0 - .method_hash([149, 150, 29, 248], input) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `hashToField` (0x1c5490f2) function - pub fn hash_to_field( - &self, - message: ::ethers::core::types::Bytes, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([28, 84, 144, 242], message) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `verifyBlsSig` (0x1078130e) function - pub fn verify_bls_sig( - &self, - message: ::ethers::core::types::Bytes, - sig: G1Point, - pk: G2Point, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([16, 120, 19, 14], (message, sig, pk)) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> for BLSHelper { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Custom Error type `BLSSigVerificationFailed` with signature `BLSSigVerificationFailed()` and selector `0x0ced3e50` - #[derive( - Clone, - ::ethers::contract::EthError, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[etherror(name = "BLSSigVerificationFailed", abi = "BLSSigVerificationFailed()")] - pub struct BLSSigVerificationFailed; - ///Container type for all input parameters for the `hashToCurve` function with signature `hashToCurve(bytes)` and selector `0x95961df8` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "hashToCurve", abi = "hashToCurve(bytes)")] - pub struct HashToCurveCall { - pub input: ::ethers::core::types::Bytes, - } - ///Container type for all input parameters for the `hashToField` function with signature `hashToField(bytes)` and selector `0x1c5490f2` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "hashToField", abi = "hashToField(bytes)")] - pub struct HashToFieldCall { - pub message: ::ethers::core::types::Bytes, - } - ///Container type for all input parameters for the `verifyBlsSig` function with signature `verifyBlsSig(bytes,(uint256,uint256),(uint256,uint256,uint256,uint256))` and selector `0x1078130e` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall( - name = "verifyBlsSig", - abi = "verifyBlsSig(bytes,(uint256,uint256),(uint256,uint256,uint256,uint256))" - )] - pub struct VerifyBlsSigCall { - pub message: ::ethers::core::types::Bytes, - pub sig: G1Point, - pub pk: G2Point, - } - ///Container type for all of the contract's call - #[derive( - Clone, - ::ethers::contract::EthAbiType, - serde::Serialize, - serde::Deserialize, - Debug, - PartialEq, - Eq, - Hash, - )] - pub enum BLSHelperCalls { - HashToCurve(HashToCurveCall), - HashToField(HashToFieldCall), - VerifyBlsSig(VerifyBlsSigCall), - } - impl ::ethers::core::abi::AbiDecode for BLSHelperCalls { - fn decode( - data: impl AsRef<[u8]>, - ) -> ::core::result::Result { - let data = data.as_ref(); - if let Ok(decoded) = ::decode(data) { - return Ok(Self::HashToCurve(decoded)); - } - if let Ok(decoded) = ::decode(data) { - return Ok(Self::HashToField(decoded)); - } - if let Ok(decoded) = ::decode(data) - { - return Ok(Self::VerifyBlsSig(decoded)); - } - Err(::ethers::core::abi::Error::InvalidData.into()) - } - } - impl ::ethers::core::abi::AbiEncode for BLSHelperCalls { - fn encode(self) -> Vec { - match self { - Self::HashToCurve(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::HashToField(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::VerifyBlsSig(element) => ::ethers::core::abi::AbiEncode::encode(element), - } - } - } - impl ::core::fmt::Display for BLSHelperCalls { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - match self { - Self::HashToCurve(element) => ::core::fmt::Display::fmt(element, f), - Self::HashToField(element) => ::core::fmt::Display::fmt(element, f), - Self::VerifyBlsSig(element) => ::core::fmt::Display::fmt(element, f), - } - } - } - impl ::core::convert::From for BLSHelperCalls { - fn from(value: HashToCurveCall) -> Self { - Self::HashToCurve(value) - } - } - impl ::core::convert::From for BLSHelperCalls { - fn from(value: HashToFieldCall) -> Self { - Self::HashToField(value) - } - } - impl ::core::convert::From for BLSHelperCalls { - fn from(value: VerifyBlsSigCall) -> Self { - Self::VerifyBlsSig(value) - } - } - ///Container type for all return fields from the `hashToCurve` function with signature `hashToCurve(bytes)` and selector `0x95961df8` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct HashToCurveReturn( - pub ::ethers::core::types::U256, - pub ::ethers::core::types::U256, - ); - ///Container type for all return fields from the `hashToField` function with signature `hashToField(bytes)` and selector `0x1c5490f2` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct HashToFieldReturn(pub ::ethers::core::types::U256); -} diff --git a/contract-bindings/src/bn256g2.rs b/contract-bindings/src/bn256g2.rs deleted file mode 100644 index 5d081b9539..0000000000 --- a/contract-bindings/src/bn256g2.rs +++ /dev/null @@ -1,119 +0,0 @@ -pub use bn256g2::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types -)] -pub mod bn256g2 { - #[allow(deprecated)] - fn __abi() -> ::ethers::core::abi::Abi { - ::ethers::core::abi::ethabi::Contract { - constructor: ::core::option::Option::None, - functions: ::std::collections::BTreeMap::new(), - events: ::std::collections::BTreeMap::new(), - errors: ::std::collections::BTreeMap::new(), - receive: false, - fallback: false, - } - } - ///The parsed JSON ABI of the contract. - pub static BN256G2_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = - ::ethers::contract::Lazy::new(__abi); - #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`-`7`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14`*WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA1dsolcC\0\x08\x17\0\n"; - /// The bytecode of the contract. - pub static BN256G2_BYTECODE: ::ethers::core::types::Bytes = - ::ethers::core::types::Bytes::from_static(__BYTECODE); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\0\x80\xFD\xFE\xA1dsolcC\0\x08\x17\0\n"; - /// The deployed bytecode of the contract. - pub static BN256G2_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = - ::ethers::core::types::Bytes::from_static(__DEPLOYED_BYTECODE); - pub struct BN256G2(::ethers::contract::Contract); - impl ::core::clone::Clone for BN256G2 { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for BN256G2 { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for BN256G2 { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for BN256G2 { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(::core::stringify!(BN256G2)) - .field(&self.address()) - .finish() - } - } - impl BN256G2 { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self(::ethers::contract::Contract::new( - address.into(), - BN256G2_ABI.clone(), - client, - )) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - BN256G2_ABI.clone(), - BN256G2_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - } - impl From<::ethers::contract::Contract> for BN256G2 { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } -} diff --git a/contract-bindings/src/deploy_hot_shot.rs b/contract-bindings/src/deploy_hot_shot.rs deleted file mode 100644 index 9697c28e78..0000000000 --- a/contract-bindings/src/deploy_hot_shot.rs +++ /dev/null @@ -1,259 +0,0 @@ -pub use deploy_hot_shot::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types -)] -pub mod deploy_hot_shot { - #[allow(deprecated)] - fn __abi() -> ::ethers::core::abi::Abi { - ::ethers::core::abi::ethabi::Contract { - constructor: ::core::option::Option::None, - functions: ::core::convert::From::from([ - ( - ::std::borrow::ToOwned::to_owned("IS_SCRIPT"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("IS_SCRIPT"), - inputs: ::std::vec![], - outputs: ::std::vec![::ethers::core::abi::ethabi::Param { - name: ::std::string::String::new(), - kind: ::ethers::core::abi::ethabi::ParamType::Bool, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bool"), - ), - },], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - },], - ), - ( - ::std::borrow::ToOwned::to_owned("run"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("run"), - inputs: ::std::vec![], - outputs: ::std::vec![], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, - },], - ), - ]), - events: ::std::collections::BTreeMap::new(), - errors: ::std::collections::BTreeMap::new(), - receive: false, - fallback: false, - } - } - ///The parsed JSON ABI of the contract. - pub static DEPLOYHOTSHOT_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = - ::ethers::contract::Lazy::new(__abi); - #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R`\x04\x80T`\x01`\xFF\x19\x91\x82\x16\x81\x17\x90\x92U`\x0C\x80T\x90\x91\x16\x90\x91\x17\x90U4\x80\x15a\0-W`\0\x80\xFD[Pa$z\x80a\0=`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x006W`\x005`\xE0\x1C\x80c\xC0@b&\x14a\0;W\x80c\xF8\xCC\xBFG\x14a\0EW[`\0\x80\xFD[a\0Ca\0fV[\0[`\x0CTa\0R\x90`\xFF\x16\x81V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[`@Qc\xF8w\xCB\x19`\xE0\x1B\x81R` `\x04\x82\x01R`\x08`$\x82\x01RgMNEMONIC`\xC0\x1B`D\x82\x01R`\0\x90sq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90c\xF8w\xCB\x19\x90`d\x01`\0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\0\xD1W=`\0\x80>=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\0\xF9\x91\x90\x81\x01\x90a\x02\xCCV[`@Qcb)I\x8B`\xE0\x1B\x81R\x90\x91P`\0\x90sq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90cb)I\x8B\x90a\x018\x90\x85\x90\x85\x90`\x04\x01a\x03yV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x01UW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x01y\x91\x90a\x03\xBAV[`@Qc\xCE\x81}G`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R\x90\x91Psq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90c\xCE\x81}G\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x01\xC9W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x01\xDDW=`\0\x80>=`\0\xFD[PPPP`@Qa\x01\xED\x90a\x02\x85V[`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x02\tW=`\0\x80>=`\0\xFD[PP\x7F\x88\\\xB6\x92@\xA95\xD62\xD7\x9C1q\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-`\0\x1C`\x01`\x01`\xA0\x1B\x03\x16cv\xEA\xDD6`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x02iW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x02}W=`\0\x80>=`\0\xFD[PPPPPPV[a \x9A\x80a\x03\xD4\x839\x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0[\x83\x81\x10\x15a\x02\xC3W\x81\x81\x01Q\x83\x82\x01R` \x01a\x02\xABV[PP`\0\x91\x01RV[`\0` \x82\x84\x03\x12\x15a\x02\xDEW`\0\x80\xFD[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x02\xF6W`\0\x80\xFD[\x81\x84\x01\x91P\x84`\x1F\x83\x01\x12a\x03\nW`\0\x80\xFD[\x81Q\x81\x81\x11\x15a\x03\x1CWa\x03\x1Ca\x02\x92V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x03DWa\x03Da\x02\x92V[\x81`@R\x82\x81R\x87` \x84\x87\x01\x01\x11\x15a\x03]W`\0\x80\xFD[a\x03n\x83` \x83\x01` \x88\x01a\x02\xA8V[\x97\x96PPPPPPPV[`@\x81R`\0\x83Q\x80`@\x84\x01Ra\x03\x98\x81``\x85\x01` \x88\x01a\x02\xA8V[c\xFF\xFF\xFF\xFF\x93\x90\x93\x16` \x83\x01RP`\x1F\x91\x90\x91\x01`\x1F\x19\x16\x01``\x01\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x03\xCCW`\0\x80\xFD[PQ\x91\x90PV\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa z\x80a\0 `\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0}W`\x005`\xE0\x1C\x80cI\xCE\x89\x97\x11a\0[W\x80cI\xCE\x89\x97\x14a\0\xC6W\x80cg\xA2\x1Ep\x14a\0\xE6W\x80c\xF1\xF4]\x99\x14a\x010W\x80c\xF4O\xF7\x12\x14a\x01CW`\0\x80\xFD[\x80c\x03@\x96\x1E\x14a\0\x82W\x80c\n2\x1C\xFF\x14a\0\x97W\x80c&\x83=\xCC\x14a\0\xAAW[`\0\x80\xFD[a\0\x95a\0\x906`\x04a\x1BuV[a\x01LV[\0[a\0\x95a\0\xA56`\x04a\x1CEV[a\x03\xD7V[a\0\xB3a\x01\xF4\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xB3a\0\xD46`\x04a\x1C\xBAV[`\0` \x81\x90R\x90\x81R`@\x90 T\x81V[a\0\xF9a\0\xF46`\x04a\x1C\xBAV[a\x05FV[`@\x80Q\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R\x83\x82\x01Q\x91\x81\x01\x91\x90\x91R``\x92\x83\x01Q\x92\x81\x01\x92\x90\x92R`\x80\x82\x01R`\xA0\x01a\0\xBDV[a\0\x95a\x01>6`\x04a\x1C\xD3V[a\x05\xDAV[a\0\xB3`\x01T\x81V[`\x03T\x82Q\x11\x15a\x01\x99W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x12`$\x82\x01Rqbitmap is too long`p\x1B`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`\0[\x82\x81\x81Q\x81\x10a\x01\xAEWa\x01\xAEa\x1DKV[` \x02` \x01\x01Q\x15\x80\x15a\x01\xC3WP\x82Q\x81\x10[\x15a\x01\xDAW\x80a\x01\xD2\x81a\x1DwV[\x91PPa\x01\x9CV[\x82Q\x81\x10a\x01\xFBW`@QcKe\x82-`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x81[\x84Q\x81\x10\x15a\x02KW\x84\x81\x81Q\x81\x10a\x02\x1AWa\x02\x1Aa\x1DKV[` \x02` \x01\x01Q\x15a\x02CW`\0\x81\x81R`\x02` R`@\x90 Ta\x02@\x90\x83a\x1D\x90V[\x91P[`\x01\x01a\x01\xFFV[P\x82\x81\x10\x15a\x02mW`@Qc<)\x0BS`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0`\x03\x83\x81T\x81\x10a\x02\x82Wa\x02\x82a\x1DKV[\x90`\0R` `\0 \x90`\x04\x02\x01`@Q\x80`\x80\x01`@R\x90\x81`\0\x82\x01T\x81R` \x01`\x01\x82\x01T\x81R` \x01`\x02\x82\x01T\x81R` \x01`\x03\x82\x01T\x81RPP\x90P`\0\x83`\x01a\x02\xD4\x91\x90a\x1D\x90V[\x90P[\x85Q\x81\x10\x15a\x03\xC2W\x85\x81\x81Q\x81\x10a\x02\xF2Wa\x02\xF2a\x1DKV[` \x02` \x01\x01Q\x15a\x03\xBAW`\0`\x03\x82\x81T\x81\x10a\x03\x14Wa\x03\x14a\x1DKV[`\0\x91\x82R` \x80\x83 `@\x80Q`\x80\x81\x01\x82R`\x04\x90\x94\x02\x90\x91\x01\x80T\x80\x85R`\x01\x82\x01T\x85\x85\x01\x81\x90R`\x02\x83\x01T\x86\x85\x01\x81\x90R`\x03\x90\x93\x01T``\x80\x88\x01\x82\x90R\x8BQ\x96\x8C\x01Q\x95\x8C\x01Q\x90\x8C\x01Q\x97\x99P\x95\x97\x94\x96\x94\x92\x93\x91\x92\x80\x80\x80a\x03\x86\x8B\x8D\x8B\x8D\x8B\x8D\x8B\x8Da\x07\x02V[`@\x80Q`\x80\x81\x01\x82R\x93\x84R` \x84\x01\x94\x90\x94R\x92\x82\x01\x92\x90\x92R``\x81\x01\x91\x90\x91R\x9EPPPPPPPPPPPPPP[`\x01\x01a\x02\xD7V[Pa\x03\xCE\x87\x87\x83a\x08OV[PPPPPPPV[a\x01\xF4\x81\x11\x15a\x03\xFDW`@Qc\xE0\x82\x84\x0B`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x01\x90V[`\x01T`\0[\x82\x81\x10\x15a\x05\x06W`\x01T\x84\x84\x83\x81\x81\x10a\x04 Wa\x04 a\x1DKV[\x90P`\x80\x02\x01`\0\x015\x14a\x04rW\x83\x83\x82\x81\x81\x10a\x04AWa\x04Aa\x1DKV[\x90P`\x80\x02\x01`\0\x015`\x01T`@Qc4\xE4#\xFF`\xE0\x1B\x81R`\x04\x01a\x01\x90\x92\x91\x90\x91\x82R` \x82\x01R`@\x01\x90V[a\x04\x90\x84\x84\x83\x81\x81\x10a\x04\x87Wa\x04\x87a\x1DKV[\x90PPP`\x01\x90V[a\x04\xB3W`\x01T`@Qcx\x18g\x19`\xE0\x1B\x81R`\x04\x01a\x01\x90\x91\x81R` \x01\x90V[\x83\x83\x82\x81\x81\x10a\x04\xC5Wa\x04\xC5a\x1DKV[\x90P`\x80\x02\x01` \x015`\0\x80`\x01T\x81R` \x01\x90\x81R` \x01`\0 \x81\x90UP`\x01\x80`\0\x82\x82Ta\x04\xF9\x91\x90a\x1D\x90V[\x90\x91UPP`\x01\x01a\x04\x03V[P`@\x80Q\x82\x81R` \x81\x01\x84\x90R\x7F\x82\x03\xA2\x1EO\x95\xF7.P\x81\xD5\xE0\x92\x9B\x1A\x8CR\x14\x1E\x12?\x9A\x14\xE1\xE7K\x02`\xFA_R\xF1\x91\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x05q`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`\0`\x03\x83\x81T\x81\x10a\x05\x86Wa\x05\x86a\x1DKV[`\0\x91\x82R` \x80\x83 \x95\x83R`\x02\x80\x82R`@\x93\x84\x90 T\x84Q`\x80\x81\x01\x86R`\x04\x90\x94\x02\x90\x97\x01\x80T\x84R`\x01\x81\x01T\x92\x84\x01\x92\x90\x92R\x81\x01T\x92\x82\x01\x92\x90\x92R`\x03\x90\x91\x01T``\x82\x01R\x93\x91PPV[`\x03\x80T`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x86\x90U\x84T`\x01\x81\x01\x86U\x94\x90\x92R\x85Q`\x04\x90\x94\x02\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[\x81\x01\x85\x90U\x86\x82\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8\\\x83\x01U\x87\x84\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8]\x84\x01U``\x80\x8A\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8^\x90\x95\x01\x94\x90\x94U\x85Q\x97\x88R\x91Q\x93\x87\x01\x93\x90\x93R\x91Q\x92\x85\x01\x92\x90\x92R\x90Q\x90\x83\x01R`\x80\x82\x01\x83\x90R`\xA0\x82\x01\x81\x90R\x90\x7F\xD7/\xE1\xACW\xD3\xE6\xD5\x1C\x92*\xE4\xD8\x11\xCCP\xAA:\xD7\x02b\x83\xAE\xA67IJ\x072RVZ\x90`\xC0\x01a\x059V[`\0\x80\x80\x80\x8B\x15\x80\x15a\x07\x13WP\x8A\x15[\x80\x15a\x07\x1DWP\x89\x15[\x80\x15a\x07'WP\x88\x15[\x15a\x07xW\x87\x15\x80\x15a\x078WP\x86\x15[\x80\x15a\x07BWP\x85\x15[\x80\x15a\x07LWP\x84\x15[a\x07hWa\x07\\\x88\x88\x88\x88a\t\x01V[a\x07hWa\x07ha\x1D\xA9V[P\x86\x92P\x85\x91P\x84\x90P\x83a\x08@V[\x87\x15\x80\x15a\x07\x84WP\x86\x15[\x80\x15a\x07\x8EWP\x85\x15[\x80\x15a\x07\x98WP\x84\x15[\x15a\x07\xC5Wa\x07\xA9\x8C\x8C\x8C\x8Ca\t\x01V[a\x07\xB5Wa\x07\xB5a\x1D\xA9V[P\x8A\x92P\x89\x91P\x88\x90P\x87a\x08@V[a\x07\xD1\x8C\x8C\x8C\x8Ca\t\x01V[a\x07\xDDWa\x07\xDDa\x1D\xA9V[a\x07\xE9\x88\x88\x88\x88a\t\x01V[a\x07\xF5Wa\x07\xF5a\x1D\xA9V[`\0a\x08\x0F\x8D\x8D\x8D\x8D`\x01`\0\x8F\x8F\x8F\x8F`\x01`\0a\t\xB6V[\x80Q` \x82\x01Q`@\x83\x01Q``\x84\x01Q`\x80\x85\x01Q`\xA0\x86\x01Q\x95\x96Pa\x086\x95a\x0C?V[\x94P\x94P\x94P\x94PP[\x98P\x98P\x98P\x98\x94PPPPPV[a\x08X\x82a\x0C\x89V[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a *`$\x919\x90P`\0\x84\x82`@Q` \x01a\x08\x8A\x92\x91\x90a\x1D\xEFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x08\xA7\x83a\r\x18V[`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x90R\x91\x93P\x91Pa\x08\xDB\x81\x87a\x08\xCE\x8Aa\r\xEBV[a\x08\xD6a\x0EfV[a\x0F7V[a\x08\xF7W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[`\0\x80`\0\x80`\0a\t\x15\x87\x87\x89\x89a\x10\x19V[\x90\x94P\x92Pa\t&\x89\x89\x81\x81a\x10\x19V[\x90\x92P\x90Pa\t7\x82\x82\x8B\x8Ba\x10\x19V[\x90\x92P\x90Pa\tH\x84\x84\x84\x84a\x10\x8AV[\x90\x94P\x92Pa\t\x98\x84\x84\x7F+\x14\x9D@\xCE\xB8\xAA\xAE\x81\xBE\x18\x99\x1B\xE0j\xC3\xB5\xB4\xC5\xE5Y\xDB\xEF\xA32g\xE6\xDC$\xA18\xE5~\x97\x13\xB0:\xF0\xFE\xD4\xCD,\xAF\xAD\xEE\xD8\xFD\xF4\xA7O\xA0\x84\xE5-\x18R\xE4\xA2\xBD\x06\x85\xC3\x15\xD2a\x10\x8AV[\x90\x94P\x92P\x83\x15\x80\x15a\t\xA9WP\x82\x15[\x99\x98PPPPPPPPPV[a\t\xBEa\x1A2V[\x88\x15\x80\x15a\t\xCAWP\x87\x15[\x15a\n\x0CW\x86\x86\x86\x86\x86\x86\x86`\0[`\xA0\x89\x01\x92\x90\x92R`\x80\x88\x01\x92\x90\x92R``\x87\x01\x92\x90\x92R`@\x86\x01\x92\x90\x92R` \x85\x81\x01\x93\x90\x93R\x90\x91\x02\x01Ra\x0C/V[\x82\x15\x80\x15a\n\x18WP\x81\x15[\x15a\n+W\x8C\x8C\x8C\x8C\x8C\x8C\x86`\0a\t\xD9V[a\n7\x85\x85\x8B\x8Ba\x10\x19V[\x90\x95P\x93Pa\nH\x8B\x8B\x85\x85a\x10\x19V[``\x83\x01R`@\x82\x01Ra\n^\x87\x87\x8B\x8Ba\x10\x19V[\x90\x97P\x95Pa\no\x8D\x8D\x85\x85a\x10\x19V[`\xA0\x83\x01R`\x80\x82\x01\x81\x90R\x87\x14\x80\x15a\n\x8CWP`\xA0\x81\x01Q\x86\x14[\x15a\n\xD1W`@\x81\x01Q\x85\x14\x80\x15a\n\xA7WP``\x81\x01Q\x84\x14[\x15a\n\xC2Wa\n\xBA\x8D\x8D\x8D\x8D\x8D\x8Da\x10\xCCV[\x86`\0a\t\xD9V[`\x01`\0\x81\x81\x80\x80\x86\x81a\t\xD9V[a\n\xDD\x89\x89\x85\x85a\x10\x19V[\x90\x93P\x91Pa\n\xFD\x85\x85\x83`\x02` \x02\x01Q\x84`\x03[` \x02\x01Qa\x10\x8AV[\x90\x9DP\x9BPa\x0B\x17\x87\x87\x83`\x04` \x02\x01Q\x84`\x05a\n\xF3V[\x90\x9BP\x99Pa\x0B(\x8B\x8B\x81\x81a\x10\x19V[\x90\x99P\x97Pa\x0BH\x89\x89\x83`\x04` \x02\x01Q\x84`\x05[` \x02\x01Qa\x10\x19V[\x90\x95P\x93Pa\x0BY\x89\x89\x8D\x8Da\x10\x19V[\x90\x99P\x97Pa\x0Bj\x89\x89\x85\x85a\x10\x19V[`\xA0\x83\x01R`\x80\x82\x01Ra\x0B\x80\x8D\x8D\x81\x81a\x10\x19V[\x90\x97P\x95Pa\x0B\x91\x87\x87\x85\x85a\x10\x19V[\x90\x97P\x95Pa\x0B\xA2\x87\x87\x8B\x8Ba\x10\x8AV[\x90\x97P\x95Pa\x0B\xB3\x85\x85`\x02a\x12;V[\x90\x93P\x91Pa\x0B\xC4\x87\x87\x85\x85a\x10\x8AV[\x90\x97P\x95Pa\x0B\xD5\x8B\x8B\x89\x89a\x10\x19V[` \x83\x01R\x81Ra\x0B\xE8\x85\x85\x89\x89a\x10\x8AV[\x90\x9BP\x99Pa\x0B\xF9\x8D\x8D\x8D\x8Da\x10\x19V[\x90\x9BP\x99Pa\x0C\x13\x89\x89\x83`\x02` \x02\x01Q\x84`\x03a\x0B>V[\x90\x9DP\x9BPa\x0C$\x8B\x8B\x8F\x8Fa\x10\x8AV[``\x83\x01R`@\x82\x01R[\x9C\x9BPPPPPPPPPPPPV[`\0\x80`\0\x80`\0\x80a\x0CR\x88\x88a\x12nV[\x90\x92P\x90Pa\x0Cc\x8C\x8C\x84\x84a\x10\x19V[\x90\x96P\x94Pa\x0Ct\x8A\x8A\x84\x84a\x10\x19V[\x96\x9D\x95\x9CP\x9AP\x94\x98P\x92\x96PPPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a N\x839\x81Q\x91R\x91\x82`\x03\x81\x80\x85\x80\t\x85\t\x08\x83\x82\x83\t\x14\x81\x15\x83\x15\x17\x19\x84\x83\x10\x85\x85\x10\x16\x16\x16\x93PPP\x81a\r\x13W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[PPPV[`\0\x80`\0a\r&\x84a\x12\xF9V[\x90P`\0\x80Q` a N\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\rOWa\rOa\x1E\x0CV[\x84\x82\t\x90P\x82\x80a\rbWa\rba\x1E\x0CV[\x82\x82\x08\x90P`\0\x80a\rs\x83a\x15\rV[\x92P\x90P[\x80a\r\xDCW\x84\x80a\r\x8BWa\r\x8Ba\x1E\x0CV[`\x01\x87\x08\x95P\x84\x80a\r\x9FWa\r\x9Fa\x1E\x0CV[\x86\x87\t\x92P\x84\x80a\r\xB2Wa\r\xB2a\x1E\x0CV[\x86\x84\t\x92P\x84\x80a\r\xC5Wa\r\xC5a\x1E\x0CV[\x84\x84\x08\x92Pa\r\xD3\x83a\x15\rV[\x92P\x90Pa\rxV[P\x93\x97\x93\x96P\x92\x94PPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x0E\x13WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a N\x839\x81Q\x91R\x84` \x01Qa\x0EF\x91\x90a\x1E\"V[a\x0E^\x90`\0\x80Q` a N\x839\x81Q\x91Ra\x1EDV[\x90R\x92\x91PPV[a\x0E\x91`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x10\rW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[P\x15\x15\x95\x94PPPPPV[`\0\x80a\x10W`\0\x80Q` a N\x839\x81Q\x91R\x85\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x85\x88\t`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[`\0\x80Q` a N\x839\x81Q\x91R\x80\x86\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x86\x8A\t\x08\x91P\x91P\x94P\x94\x92PPPV[`\0\x80a\x10\xA6\x86\x85`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[a\x10\xBF\x86\x85`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[\x91P\x91P\x94P\x94\x92PPPV[`\0\x80`\0\x80`\0\x80a\x10\xE1\x8C\x8C`\x03a\x12;V[\x90\x96P\x94Pa\x10\xF2\x86\x86\x8E\x8Ea\x10\x19V[\x90\x96P\x94Pa\x11\x03\x8A\x8A\x8A\x8Aa\x10\x19V[\x90\x98P\x96Pa\x11\x14\x8C\x8C\x8C\x8Ca\x10\x19V[\x90\x94P\x92Pa\x11%\x84\x84\x8A\x8Aa\x10\x19V[\x90\x94P\x92Pa\x116\x86\x86\x81\x81a\x10\x19V[\x90\x9CP\x9APa\x11G\x84\x84`\x08a\x12;V[\x90\x92P\x90Pa\x11X\x8C\x8C\x84\x84a\x10\x8AV[\x90\x9CP\x9APa\x11i\x88\x88\x81\x81a\x10\x19V[\x90\x92P\x90Pa\x11z\x84\x84`\x04a\x12;V[\x90\x94P\x92Pa\x11\x8B\x84\x84\x8E\x8Ea\x10\x8AV[\x90\x94P\x92Pa\x11\x9C\x84\x84\x88\x88a\x10\x19V[\x90\x94P\x92Pa\x11\xAD\x8A\x8A`\x08a\x12;V[\x90\x96P\x94Pa\x11\xBE\x86\x86\x8C\x8Ca\x10\x19V[\x90\x96P\x94Pa\x11\xCF\x86\x86\x84\x84a\x10\x19V[\x90\x96P\x94Pa\x11\xE0\x84\x84\x88\x88a\x10\x8AV[\x90\x94P\x92Pa\x11\xF1\x8C\x8C`\x02a\x12;V[\x90\x96P\x94Pa\x12\x02\x86\x86\x8A\x8Aa\x10\x19V[\x90\x96P\x94Pa\x12\x13\x88\x88\x84\x84a\x10\x19V[\x90\x92P\x90Pa\x12$\x82\x82`\x08a\x12;V[\x80\x92P\x81\x93PPP\x96P\x96P\x96P\x96P\x96P\x96\x90PV[`\0\x80`\0\x80Q` a N\x839\x81Q\x91R\x83\x86\t`\0\x80Q` a N\x839\x81Q\x91R\x84\x86\t\x91P\x91P\x93P\x93\x91PPV[`\0\x80\x80a\x12\xAF`\0\x80Q` a N\x839\x81Q\x91R\x80\x87\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x87\x88\t\x08`\0\x80Q` a N\x839\x81Q\x91Ra\x16,V[\x90P`\0\x80Q` a N\x839\x81Q\x91R\x81\x86\t`\0\x80Q` a N\x839\x81Q\x91R\x82\x86\ta\x12\xED\x90`\0\x80Q` a N\x839\x81Q\x91Ra\x1EDV[\x92P\x92PP\x92P\x92\x90PV[`\0\x80a\x13\x05\x83a\x16}V[\x80Q\x90\x91P`0\x81\x14a\x13\x1AWa\x13\x1Aa\x1D\xA9V[`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x135Wa\x135a\x1APV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13_W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x13\xD0W\x83`\x01a\x13z\x83\x86a\x1EDV[a\x13\x84\x91\x90a\x1EDV[\x81Q\x81\x10a\x13\x94Wa\x13\x94a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x13\xB1Wa\x13\xB1a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x13eV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x14bW\x83\x81a\x14\x0E\x85\x88a\x1EDV[a\x14\x18\x91\x90a\x1D\x90V[\x81Q\x81\x10a\x14(Wa\x14(a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14HWa\x14Ha\x1DKV[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x13\xFAV[P`\0a\x14n\x82a\x19\xD1V[\x90Pa\x01\0`\0\x80Q` a N\x839\x81Q\x91R`\0a\x14\x8E\x86\x89a\x1EDV[\x90P`\0[\x81\x81\x10\x15a\x14\xFDW`\0\x88`\x01a\x14\xAA\x84\x86a\x1EDV[a\x14\xB4\x91\x90a\x1EDV[\x81Q\x81\x10a\x14\xC4Wa\x14\xC4a\x1DKV[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x14\xDCWa\x14\xDCa\x1E\x0CV[\x85\x87\t\x95P\x83\x80a\x14\xEFWa\x14\xEFa\x1E\x0CV[\x81\x87\x08\x95PP`\x01\x01a\x14\x93V[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0\x80\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P`\0`\0\x80Q` a N\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x86``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` `\0`\xC0\x83`\x05Z\xFA\x93PP`\0Q\x93P\x82a\x15\xCFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[\x80`\x01\x85\x90\x1B\x11\x15a\x15\xE8Wa\x15\xE5\x84\x82a\x1EDV[\x93P[\x80\x80a\x15\xF6Wa\x15\xF6a\x1E\x0CV[\x84\x85\t\x91P\x85\x82\x14\x94PPPP\x91P\x91V[`\0\x81\x80a\x16\x18Wa\x16\x18a\x1E\x0CV[a\x16\"\x84\x84a\x1EDV[\x85\x08\x94\x93PPPPV[`\0\x80`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x84\x03`\x80\x82\x01R\x83`\xA0\x82\x01R` \x81`\xC0\x83`\x05a\x07\xD0Z\x03\xFA\x90Q\x92P\x90P\x80a\x16vW`\0\x80\xFD[P\x92\x91PPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x16\xBE\x92\x91\x90a\x1D\xEFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16\xE5\x92\x91\x90a\x1EWV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x17\x07\x91\x90a\x1E\x83V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x171\x90\x83\x90\x83\x90` \x01a\x1E\x9DV[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\xA2Wa\x17\xA2a\x1APV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\xCCW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x17\xE4\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\x18OW\x81\x81\x81Q\x81\x10a\x18\x13Wa\x18\x13a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x180Wa\x180a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x17\xF8V[P`\0\x84`@Q` \x01a\x18e\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18\xF9W`\0\x83\x82\x81Q\x81\x10a\x18\xA0Wa\x18\xA0a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x18\xBDWa\x18\xBDa\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18\xDE\x92\x91\x90a\x1E\xC2V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x18\x84V[P\x86\x88\x87`@Q` \x01a\x19\x0F\x93\x92\x91\x90a\x1E\xE7V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x19=\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P`\0[a\x19^\x8A`\xFF\x8D\x16a\x1EDV[\x81\x10\x15a\x19\xC0W\x82\x81\x81Q\x81\x10a\x19wWa\x19wa\x1DKV[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19\x91\x83\x8Da\x1D\x90V[\x81Q\x81\x10a\x19\xA1Wa\x19\xA1a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x19QV[P\x91\x9B\x9APPPPPPPPPPPV[`\0\x80\x80[\x83Q\x81\x10\x15a\x16vW\x83\x81\x81Q\x81\x10a\x19\xF1Wa\x19\xF1a\x1DKV[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x1A\t\x91\x90a\x1F\x1BV[a\x1A\x14\x90`\x02a \x16V[a\x1A\x1E\x91\x90a\x1F\x1BV[a\x1A(\x90\x83a\x1D\x90V[\x91P`\x01\x01a\x19\xD6V[`@Q\x80`\xC0\x01`@R\x80`\x06\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1A\x8FWa\x1A\x8Fa\x1APV[`@R\x91\x90PV[`\0`@\x82\x84\x03\x12\x15a\x1A\xA9W`\0\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\xCCWa\x1A\xCCa\x1APV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x1A\xF7W`\0\x80\xFD[\x815` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1B\x13Wa\x1B\x13a\x1APV[\x81`\x05\x1Ba\x1B\"\x82\x82\x01a\x1AfV[\x92\x83R\x84\x81\x01\x82\x01\x92\x82\x81\x01\x90\x87\x85\x11\x15a\x1B=`\0\xFD[PPPP`@Q=`\0\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\0\xF9\x91\x90\x81\x01\x90a\x02\xCCV[`@Qcb)I\x8B`\xE0\x1B\x81R\x90\x91P`\0\x90sq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90cb)I\x8B\x90a\x018\x90\x85\x90\x85\x90`\x04\x01a\x03yV[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x01UW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x01y\x91\x90a\x03\xBAV[`@Qc\xCE\x81}G`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R\x90\x91Psq\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-\x90c\xCE\x81}G\x90`$\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x01\xC9W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x01\xDDW=`\0\x80>=`\0\xFD[PPPP`@Qa\x01\xED\x90a\x02\x85V[`@Q\x80\x91\x03\x90`\0\xF0\x80\x15\x80\x15a\x02\tW=`\0\x80>=`\0\xFD[PP\x7F\x88\\\xB6\x92@\xA95\xD62\xD7\x9C1q\tp\x9E\xCF\xA9\x1A\x80bo\xF3\x98\x9Dh\xF6\x7F[\x1D\xD1-`\0\x1C`\x01`\x01`\xA0\x1B\x03\x16cv\xEA\xDD6`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x02iW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x02}W=`\0\x80>=`\0\xFD[PPPPPPV[a \x9A\x80a\x03\xD4\x839\x01\x90V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0[\x83\x81\x10\x15a\x02\xC3W\x81\x81\x01Q\x83\x82\x01R` \x01a\x02\xABV[PP`\0\x91\x01RV[`\0` \x82\x84\x03\x12\x15a\x02\xDEW`\0\x80\xFD[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x02\xF6W`\0\x80\xFD[\x81\x84\x01\x91P\x84`\x1F\x83\x01\x12a\x03\nW`\0\x80\xFD[\x81Q\x81\x81\x11\x15a\x03\x1CWa\x03\x1Ca\x02\x92V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x03DWa\x03Da\x02\x92V[\x81`@R\x82\x81R\x87` \x84\x87\x01\x01\x11\x15a\x03]W`\0\x80\xFD[a\x03n\x83` \x83\x01` \x88\x01a\x02\xA8V[\x97\x96PPPPPPPV[`@\x81R`\0\x83Q\x80`@\x84\x01Ra\x03\x98\x81``\x85\x01` \x88\x01a\x02\xA8V[c\xFF\xFF\xFF\xFF\x93\x90\x93\x16` \x83\x01RP`\x1F\x91\x90\x91\x01`\x1F\x19\x16\x01``\x01\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x03\xCCW`\0\x80\xFD[PQ\x91\x90PV\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa z\x80a\0 `\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0}W`\x005`\xE0\x1C\x80cI\xCE\x89\x97\x11a\0[W\x80cI\xCE\x89\x97\x14a\0\xC6W\x80cg\xA2\x1Ep\x14a\0\xE6W\x80c\xF1\xF4]\x99\x14a\x010W\x80c\xF4O\xF7\x12\x14a\x01CW`\0\x80\xFD[\x80c\x03@\x96\x1E\x14a\0\x82W\x80c\n2\x1C\xFF\x14a\0\x97W\x80c&\x83=\xCC\x14a\0\xAAW[`\0\x80\xFD[a\0\x95a\0\x906`\x04a\x1BuV[a\x01LV[\0[a\0\x95a\0\xA56`\x04a\x1CEV[a\x03\xD7V[a\0\xB3a\x01\xF4\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xB3a\0\xD46`\x04a\x1C\xBAV[`\0` \x81\x90R\x90\x81R`@\x90 T\x81V[a\0\xF9a\0\xF46`\x04a\x1C\xBAV[a\x05FV[`@\x80Q\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R\x83\x82\x01Q\x91\x81\x01\x91\x90\x91R``\x92\x83\x01Q\x92\x81\x01\x92\x90\x92R`\x80\x82\x01R`\xA0\x01a\0\xBDV[a\0\x95a\x01>6`\x04a\x1C\xD3V[a\x05\xDAV[a\0\xB3`\x01T\x81V[`\x03T\x82Q\x11\x15a\x01\x99W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x12`$\x82\x01Rqbitmap is too long`p\x1B`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`\0[\x82\x81\x81Q\x81\x10a\x01\xAEWa\x01\xAEa\x1DKV[` \x02` \x01\x01Q\x15\x80\x15a\x01\xC3WP\x82Q\x81\x10[\x15a\x01\xDAW\x80a\x01\xD2\x81a\x1DwV[\x91PPa\x01\x9CV[\x82Q\x81\x10a\x01\xFBW`@QcKe\x82-`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x81[\x84Q\x81\x10\x15a\x02KW\x84\x81\x81Q\x81\x10a\x02\x1AWa\x02\x1Aa\x1DKV[` \x02` \x01\x01Q\x15a\x02CW`\0\x81\x81R`\x02` R`@\x90 Ta\x02@\x90\x83a\x1D\x90V[\x91P[`\x01\x01a\x01\xFFV[P\x82\x81\x10\x15a\x02mW`@Qc<)\x0BS`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0`\x03\x83\x81T\x81\x10a\x02\x82Wa\x02\x82a\x1DKV[\x90`\0R` `\0 \x90`\x04\x02\x01`@Q\x80`\x80\x01`@R\x90\x81`\0\x82\x01T\x81R` \x01`\x01\x82\x01T\x81R` \x01`\x02\x82\x01T\x81R` \x01`\x03\x82\x01T\x81RPP\x90P`\0\x83`\x01a\x02\xD4\x91\x90a\x1D\x90V[\x90P[\x85Q\x81\x10\x15a\x03\xC2W\x85\x81\x81Q\x81\x10a\x02\xF2Wa\x02\xF2a\x1DKV[` \x02` \x01\x01Q\x15a\x03\xBAW`\0`\x03\x82\x81T\x81\x10a\x03\x14Wa\x03\x14a\x1DKV[`\0\x91\x82R` \x80\x83 `@\x80Q`\x80\x81\x01\x82R`\x04\x90\x94\x02\x90\x91\x01\x80T\x80\x85R`\x01\x82\x01T\x85\x85\x01\x81\x90R`\x02\x83\x01T\x86\x85\x01\x81\x90R`\x03\x90\x93\x01T``\x80\x88\x01\x82\x90R\x8BQ\x96\x8C\x01Q\x95\x8C\x01Q\x90\x8C\x01Q\x97\x99P\x95\x97\x94\x96\x94\x92\x93\x91\x92\x80\x80\x80a\x03\x86\x8B\x8D\x8B\x8D\x8B\x8D\x8B\x8Da\x07\x02V[`@\x80Q`\x80\x81\x01\x82R\x93\x84R` \x84\x01\x94\x90\x94R\x92\x82\x01\x92\x90\x92R``\x81\x01\x91\x90\x91R\x9EPPPPPPPPPPPPPP[`\x01\x01a\x02\xD7V[Pa\x03\xCE\x87\x87\x83a\x08OV[PPPPPPPV[a\x01\xF4\x81\x11\x15a\x03\xFDW`@Qc\xE0\x82\x84\x0B`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x01\x90V[`\x01T`\0[\x82\x81\x10\x15a\x05\x06W`\x01T\x84\x84\x83\x81\x81\x10a\x04 Wa\x04 a\x1DKV[\x90P`\x80\x02\x01`\0\x015\x14a\x04rW\x83\x83\x82\x81\x81\x10a\x04AWa\x04Aa\x1DKV[\x90P`\x80\x02\x01`\0\x015`\x01T`@Qc4\xE4#\xFF`\xE0\x1B\x81R`\x04\x01a\x01\x90\x92\x91\x90\x91\x82R` \x82\x01R`@\x01\x90V[a\x04\x90\x84\x84\x83\x81\x81\x10a\x04\x87Wa\x04\x87a\x1DKV[\x90PPP`\x01\x90V[a\x04\xB3W`\x01T`@Qcx\x18g\x19`\xE0\x1B\x81R`\x04\x01a\x01\x90\x91\x81R` \x01\x90V[\x83\x83\x82\x81\x81\x10a\x04\xC5Wa\x04\xC5a\x1DKV[\x90P`\x80\x02\x01` \x015`\0\x80`\x01T\x81R` \x01\x90\x81R` \x01`\0 \x81\x90UP`\x01\x80`\0\x82\x82Ta\x04\xF9\x91\x90a\x1D\x90V[\x90\x91UPP`\x01\x01a\x04\x03V[P`@\x80Q\x82\x81R` \x81\x01\x84\x90R\x7F\x82\x03\xA2\x1EO\x95\xF7.P\x81\xD5\xE0\x92\x9B\x1A\x8CR\x14\x1E\x12?\x9A\x14\xE1\xE7K\x02`\xFA_R\xF1\x91\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x05q`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`\0`\x03\x83\x81T\x81\x10a\x05\x86Wa\x05\x86a\x1DKV[`\0\x91\x82R` \x80\x83 \x95\x83R`\x02\x80\x82R`@\x93\x84\x90 T\x84Q`\x80\x81\x01\x86R`\x04\x90\x94\x02\x90\x97\x01\x80T\x84R`\x01\x81\x01T\x92\x84\x01\x92\x90\x92R\x81\x01T\x92\x82\x01\x92\x90\x92R`\x03\x90\x91\x01T``\x82\x01R\x93\x91PPV[`\x03\x80T`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x86\x90U\x84T`\x01\x81\x01\x86U\x94\x90\x92R\x85Q`\x04\x90\x94\x02\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[\x81\x01\x85\x90U\x86\x82\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8\\\x83\x01U\x87\x84\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8]\x84\x01U``\x80\x8A\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8^\x90\x95\x01\x94\x90\x94U\x85Q\x97\x88R\x91Q\x93\x87\x01\x93\x90\x93R\x91Q\x92\x85\x01\x92\x90\x92R\x90Q\x90\x83\x01R`\x80\x82\x01\x83\x90R`\xA0\x82\x01\x81\x90R\x90\x7F\xD7/\xE1\xACW\xD3\xE6\xD5\x1C\x92*\xE4\xD8\x11\xCCP\xAA:\xD7\x02b\x83\xAE\xA67IJ\x072RVZ\x90`\xC0\x01a\x059V[`\0\x80\x80\x80\x8B\x15\x80\x15a\x07\x13WP\x8A\x15[\x80\x15a\x07\x1DWP\x89\x15[\x80\x15a\x07'WP\x88\x15[\x15a\x07xW\x87\x15\x80\x15a\x078WP\x86\x15[\x80\x15a\x07BWP\x85\x15[\x80\x15a\x07LWP\x84\x15[a\x07hWa\x07\\\x88\x88\x88\x88a\t\x01V[a\x07hWa\x07ha\x1D\xA9V[P\x86\x92P\x85\x91P\x84\x90P\x83a\x08@V[\x87\x15\x80\x15a\x07\x84WP\x86\x15[\x80\x15a\x07\x8EWP\x85\x15[\x80\x15a\x07\x98WP\x84\x15[\x15a\x07\xC5Wa\x07\xA9\x8C\x8C\x8C\x8Ca\t\x01V[a\x07\xB5Wa\x07\xB5a\x1D\xA9V[P\x8A\x92P\x89\x91P\x88\x90P\x87a\x08@V[a\x07\xD1\x8C\x8C\x8C\x8Ca\t\x01V[a\x07\xDDWa\x07\xDDa\x1D\xA9V[a\x07\xE9\x88\x88\x88\x88a\t\x01V[a\x07\xF5Wa\x07\xF5a\x1D\xA9V[`\0a\x08\x0F\x8D\x8D\x8D\x8D`\x01`\0\x8F\x8F\x8F\x8F`\x01`\0a\t\xB6V[\x80Q` \x82\x01Q`@\x83\x01Q``\x84\x01Q`\x80\x85\x01Q`\xA0\x86\x01Q\x95\x96Pa\x086\x95a\x0C?V[\x94P\x94P\x94P\x94PP[\x98P\x98P\x98P\x98\x94PPPPPV[a\x08X\x82a\x0C\x89V[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a *`$\x919\x90P`\0\x84\x82`@Q` \x01a\x08\x8A\x92\x91\x90a\x1D\xEFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x08\xA7\x83a\r\x18V[`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x90R\x91\x93P\x91Pa\x08\xDB\x81\x87a\x08\xCE\x8Aa\r\xEBV[a\x08\xD6a\x0EfV[a\x0F7V[a\x08\xF7W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[`\0\x80`\0\x80`\0a\t\x15\x87\x87\x89\x89a\x10\x19V[\x90\x94P\x92Pa\t&\x89\x89\x81\x81a\x10\x19V[\x90\x92P\x90Pa\t7\x82\x82\x8B\x8Ba\x10\x19V[\x90\x92P\x90Pa\tH\x84\x84\x84\x84a\x10\x8AV[\x90\x94P\x92Pa\t\x98\x84\x84\x7F+\x14\x9D@\xCE\xB8\xAA\xAE\x81\xBE\x18\x99\x1B\xE0j\xC3\xB5\xB4\xC5\xE5Y\xDB\xEF\xA32g\xE6\xDC$\xA18\xE5~\x97\x13\xB0:\xF0\xFE\xD4\xCD,\xAF\xAD\xEE\xD8\xFD\xF4\xA7O\xA0\x84\xE5-\x18R\xE4\xA2\xBD\x06\x85\xC3\x15\xD2a\x10\x8AV[\x90\x94P\x92P\x83\x15\x80\x15a\t\xA9WP\x82\x15[\x99\x98PPPPPPPPPV[a\t\xBEa\x1A2V[\x88\x15\x80\x15a\t\xCAWP\x87\x15[\x15a\n\x0CW\x86\x86\x86\x86\x86\x86\x86`\0[`\xA0\x89\x01\x92\x90\x92R`\x80\x88\x01\x92\x90\x92R``\x87\x01\x92\x90\x92R`@\x86\x01\x92\x90\x92R` \x85\x81\x01\x93\x90\x93R\x90\x91\x02\x01Ra\x0C/V[\x82\x15\x80\x15a\n\x18WP\x81\x15[\x15a\n+W\x8C\x8C\x8C\x8C\x8C\x8C\x86`\0a\t\xD9V[a\n7\x85\x85\x8B\x8Ba\x10\x19V[\x90\x95P\x93Pa\nH\x8B\x8B\x85\x85a\x10\x19V[``\x83\x01R`@\x82\x01Ra\n^\x87\x87\x8B\x8Ba\x10\x19V[\x90\x97P\x95Pa\no\x8D\x8D\x85\x85a\x10\x19V[`\xA0\x83\x01R`\x80\x82\x01\x81\x90R\x87\x14\x80\x15a\n\x8CWP`\xA0\x81\x01Q\x86\x14[\x15a\n\xD1W`@\x81\x01Q\x85\x14\x80\x15a\n\xA7WP``\x81\x01Q\x84\x14[\x15a\n\xC2Wa\n\xBA\x8D\x8D\x8D\x8D\x8D\x8Da\x10\xCCV[\x86`\0a\t\xD9V[`\x01`\0\x81\x81\x80\x80\x86\x81a\t\xD9V[a\n\xDD\x89\x89\x85\x85a\x10\x19V[\x90\x93P\x91Pa\n\xFD\x85\x85\x83`\x02` \x02\x01Q\x84`\x03[` \x02\x01Qa\x10\x8AV[\x90\x9DP\x9BPa\x0B\x17\x87\x87\x83`\x04` \x02\x01Q\x84`\x05a\n\xF3V[\x90\x9BP\x99Pa\x0B(\x8B\x8B\x81\x81a\x10\x19V[\x90\x99P\x97Pa\x0BH\x89\x89\x83`\x04` \x02\x01Q\x84`\x05[` \x02\x01Qa\x10\x19V[\x90\x95P\x93Pa\x0BY\x89\x89\x8D\x8Da\x10\x19V[\x90\x99P\x97Pa\x0Bj\x89\x89\x85\x85a\x10\x19V[`\xA0\x83\x01R`\x80\x82\x01Ra\x0B\x80\x8D\x8D\x81\x81a\x10\x19V[\x90\x97P\x95Pa\x0B\x91\x87\x87\x85\x85a\x10\x19V[\x90\x97P\x95Pa\x0B\xA2\x87\x87\x8B\x8Ba\x10\x8AV[\x90\x97P\x95Pa\x0B\xB3\x85\x85`\x02a\x12;V[\x90\x93P\x91Pa\x0B\xC4\x87\x87\x85\x85a\x10\x8AV[\x90\x97P\x95Pa\x0B\xD5\x8B\x8B\x89\x89a\x10\x19V[` \x83\x01R\x81Ra\x0B\xE8\x85\x85\x89\x89a\x10\x8AV[\x90\x9BP\x99Pa\x0B\xF9\x8D\x8D\x8D\x8Da\x10\x19V[\x90\x9BP\x99Pa\x0C\x13\x89\x89\x83`\x02` \x02\x01Q\x84`\x03a\x0B>V[\x90\x9DP\x9BPa\x0C$\x8B\x8B\x8F\x8Fa\x10\x8AV[``\x83\x01R`@\x82\x01R[\x9C\x9BPPPPPPPPPPPPV[`\0\x80`\0\x80`\0\x80a\x0CR\x88\x88a\x12nV[\x90\x92P\x90Pa\x0Cc\x8C\x8C\x84\x84a\x10\x19V[\x90\x96P\x94Pa\x0Ct\x8A\x8A\x84\x84a\x10\x19V[\x96\x9D\x95\x9CP\x9AP\x94\x98P\x92\x96PPPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a N\x839\x81Q\x91R\x91\x82`\x03\x81\x80\x85\x80\t\x85\t\x08\x83\x82\x83\t\x14\x81\x15\x83\x15\x17\x19\x84\x83\x10\x85\x85\x10\x16\x16\x16\x93PPP\x81a\r\x13W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[PPPV[`\0\x80`\0a\r&\x84a\x12\xF9V[\x90P`\0\x80Q` a N\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\rOWa\rOa\x1E\x0CV[\x84\x82\t\x90P\x82\x80a\rbWa\rba\x1E\x0CV[\x82\x82\x08\x90P`\0\x80a\rs\x83a\x15\rV[\x92P\x90P[\x80a\r\xDCW\x84\x80a\r\x8BWa\r\x8Ba\x1E\x0CV[`\x01\x87\x08\x95P\x84\x80a\r\x9FWa\r\x9Fa\x1E\x0CV[\x86\x87\t\x92P\x84\x80a\r\xB2Wa\r\xB2a\x1E\x0CV[\x86\x84\t\x92P\x84\x80a\r\xC5Wa\r\xC5a\x1E\x0CV[\x84\x84\x08\x92Pa\r\xD3\x83a\x15\rV[\x92P\x90Pa\rxV[P\x93\x97\x93\x96P\x92\x94PPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x0E\x13WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a N\x839\x81Q\x91R\x84` \x01Qa\x0EF\x91\x90a\x1E\"V[a\x0E^\x90`\0\x80Q` a N\x839\x81Q\x91Ra\x1EDV[\x90R\x92\x91PPV[a\x0E\x91`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x10\rW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[P\x15\x15\x95\x94PPPPPV[`\0\x80a\x10W`\0\x80Q` a N\x839\x81Q\x91R\x85\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x85\x88\t`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[`\0\x80Q` a N\x839\x81Q\x91R\x80\x86\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x86\x8A\t\x08\x91P\x91P\x94P\x94\x92PPPV[`\0\x80a\x10\xA6\x86\x85`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[a\x10\xBF\x86\x85`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[\x91P\x91P\x94P\x94\x92PPPV[`\0\x80`\0\x80`\0\x80a\x10\xE1\x8C\x8C`\x03a\x12;V[\x90\x96P\x94Pa\x10\xF2\x86\x86\x8E\x8Ea\x10\x19V[\x90\x96P\x94Pa\x11\x03\x8A\x8A\x8A\x8Aa\x10\x19V[\x90\x98P\x96Pa\x11\x14\x8C\x8C\x8C\x8Ca\x10\x19V[\x90\x94P\x92Pa\x11%\x84\x84\x8A\x8Aa\x10\x19V[\x90\x94P\x92Pa\x116\x86\x86\x81\x81a\x10\x19V[\x90\x9CP\x9APa\x11G\x84\x84`\x08a\x12;V[\x90\x92P\x90Pa\x11X\x8C\x8C\x84\x84a\x10\x8AV[\x90\x9CP\x9APa\x11i\x88\x88\x81\x81a\x10\x19V[\x90\x92P\x90Pa\x11z\x84\x84`\x04a\x12;V[\x90\x94P\x92Pa\x11\x8B\x84\x84\x8E\x8Ea\x10\x8AV[\x90\x94P\x92Pa\x11\x9C\x84\x84\x88\x88a\x10\x19V[\x90\x94P\x92Pa\x11\xAD\x8A\x8A`\x08a\x12;V[\x90\x96P\x94Pa\x11\xBE\x86\x86\x8C\x8Ca\x10\x19V[\x90\x96P\x94Pa\x11\xCF\x86\x86\x84\x84a\x10\x19V[\x90\x96P\x94Pa\x11\xE0\x84\x84\x88\x88a\x10\x8AV[\x90\x94P\x92Pa\x11\xF1\x8C\x8C`\x02a\x12;V[\x90\x96P\x94Pa\x12\x02\x86\x86\x8A\x8Aa\x10\x19V[\x90\x96P\x94Pa\x12\x13\x88\x88\x84\x84a\x10\x19V[\x90\x92P\x90Pa\x12$\x82\x82`\x08a\x12;V[\x80\x92P\x81\x93PPP\x96P\x96P\x96P\x96P\x96P\x96\x90PV[`\0\x80`\0\x80Q` a N\x839\x81Q\x91R\x83\x86\t`\0\x80Q` a N\x839\x81Q\x91R\x84\x86\t\x91P\x91P\x93P\x93\x91PPV[`\0\x80\x80a\x12\xAF`\0\x80Q` a N\x839\x81Q\x91R\x80\x87\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x87\x88\t\x08`\0\x80Q` a N\x839\x81Q\x91Ra\x16,V[\x90P`\0\x80Q` a N\x839\x81Q\x91R\x81\x86\t`\0\x80Q` a N\x839\x81Q\x91R\x82\x86\ta\x12\xED\x90`\0\x80Q` a N\x839\x81Q\x91Ra\x1EDV[\x92P\x92PP\x92P\x92\x90PV[`\0\x80a\x13\x05\x83a\x16}V[\x80Q\x90\x91P`0\x81\x14a\x13\x1AWa\x13\x1Aa\x1D\xA9V[`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x135Wa\x135a\x1APV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13_W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x13\xD0W\x83`\x01a\x13z\x83\x86a\x1EDV[a\x13\x84\x91\x90a\x1EDV[\x81Q\x81\x10a\x13\x94Wa\x13\x94a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x13\xB1Wa\x13\xB1a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x13eV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x14bW\x83\x81a\x14\x0E\x85\x88a\x1EDV[a\x14\x18\x91\x90a\x1D\x90V[\x81Q\x81\x10a\x14(Wa\x14(a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14HWa\x14Ha\x1DKV[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x13\xFAV[P`\0a\x14n\x82a\x19\xD1V[\x90Pa\x01\0`\0\x80Q` a N\x839\x81Q\x91R`\0a\x14\x8E\x86\x89a\x1EDV[\x90P`\0[\x81\x81\x10\x15a\x14\xFDW`\0\x88`\x01a\x14\xAA\x84\x86a\x1EDV[a\x14\xB4\x91\x90a\x1EDV[\x81Q\x81\x10a\x14\xC4Wa\x14\xC4a\x1DKV[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x14\xDCWa\x14\xDCa\x1E\x0CV[\x85\x87\t\x95P\x83\x80a\x14\xEFWa\x14\xEFa\x1E\x0CV[\x81\x87\x08\x95PP`\x01\x01a\x14\x93V[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0\x80\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P`\0`\0\x80Q` a N\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x86``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` `\0`\xC0\x83`\x05Z\xFA\x93PP`\0Q\x93P\x82a\x15\xCFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[\x80`\x01\x85\x90\x1B\x11\x15a\x15\xE8Wa\x15\xE5\x84\x82a\x1EDV[\x93P[\x80\x80a\x15\xF6Wa\x15\xF6a\x1E\x0CV[\x84\x85\t\x91P\x85\x82\x14\x94PPPP\x91P\x91V[`\0\x81\x80a\x16\x18Wa\x16\x18a\x1E\x0CV[a\x16\"\x84\x84a\x1EDV[\x85\x08\x94\x93PPPPV[`\0\x80`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x84\x03`\x80\x82\x01R\x83`\xA0\x82\x01R` \x81`\xC0\x83`\x05a\x07\xD0Z\x03\xFA\x90Q\x92P\x90P\x80a\x16vW`\0\x80\xFD[P\x92\x91PPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x16\xBE\x92\x91\x90a\x1D\xEFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16\xE5\x92\x91\x90a\x1EWV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x17\x07\x91\x90a\x1E\x83V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x171\x90\x83\x90\x83\x90` \x01a\x1E\x9DV[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\xA2Wa\x17\xA2a\x1APV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\xCCW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x17\xE4\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\x18OW\x81\x81\x81Q\x81\x10a\x18\x13Wa\x18\x13a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x180Wa\x180a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x17\xF8V[P`\0\x84`@Q` \x01a\x18e\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18\xF9W`\0\x83\x82\x81Q\x81\x10a\x18\xA0Wa\x18\xA0a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x18\xBDWa\x18\xBDa\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18\xDE\x92\x91\x90a\x1E\xC2V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x18\x84V[P\x86\x88\x87`@Q` \x01a\x19\x0F\x93\x92\x91\x90a\x1E\xE7V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x19=\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P`\0[a\x19^\x8A`\xFF\x8D\x16a\x1EDV[\x81\x10\x15a\x19\xC0W\x82\x81\x81Q\x81\x10a\x19wWa\x19wa\x1DKV[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19\x91\x83\x8Da\x1D\x90V[\x81Q\x81\x10a\x19\xA1Wa\x19\xA1a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x19QV[P\x91\x9B\x9APPPPPPPPPPPV[`\0\x80\x80[\x83Q\x81\x10\x15a\x16vW\x83\x81\x81Q\x81\x10a\x19\xF1Wa\x19\xF1a\x1DKV[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x1A\t\x91\x90a\x1F\x1BV[a\x1A\x14\x90`\x02a \x16V[a\x1A\x1E\x91\x90a\x1F\x1BV[a\x1A(\x90\x83a\x1D\x90V[\x91P`\x01\x01a\x19\xD6V[`@Q\x80`\xC0\x01`@R\x80`\x06\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1A\x8FWa\x1A\x8Fa\x1APV[`@R\x91\x90PV[`\0`@\x82\x84\x03\x12\x15a\x1A\xA9W`\0\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\xCCWa\x1A\xCCa\x1APV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x1A\xF7W`\0\x80\xFD[\x815` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1B\x13Wa\x1B\x13a\x1APV[\x81`\x05\x1Ba\x1B\"\x82\x82\x01a\x1AfV[\x92\x83R\x84\x81\x01\x82\x01\x92\x82\x81\x01\x90\x87\x85\x11\x15a\x1B(::ethers::contract::Contract); - impl ::core::clone::Clone for DeployHotShot { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for DeployHotShot { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for DeployHotShot { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for DeployHotShot { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(::core::stringify!(DeployHotShot)) - .field(&self.address()) - .finish() - } - } - impl DeployHotShot { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self(::ethers::contract::Contract::new( - address.into(), - DEPLOYHOTSHOT_ABI.clone(), - client, - )) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - DEPLOYHOTSHOT_ABI.clone(), - DEPLOYHOTSHOT_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `IS_SCRIPT` (0xf8ccbf47) function - pub fn is_script(&self) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([248, 204, 191, 71], ()) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `run` (0xc0406226) function - pub fn run(&self) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([192, 64, 98, 38], ()) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> - for DeployHotShot - { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Container type for all input parameters for the `IS_SCRIPT` function with signature `IS_SCRIPT()` and selector `0xf8ccbf47` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "IS_SCRIPT", abi = "IS_SCRIPT()")] - pub struct IsScriptCall; - ///Container type for all input parameters for the `run` function with signature `run()` and selector `0xc0406226` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall(name = "run", abi = "run()")] - pub struct RunCall; - ///Container type for all of the contract's call - #[derive( - Clone, - ::ethers::contract::EthAbiType, - serde::Serialize, - serde::Deserialize, - Debug, - PartialEq, - Eq, - Hash, - )] - pub enum DeployHotShotCalls { - IsScript(IsScriptCall), - Run(RunCall), - } - impl ::ethers::core::abi::AbiDecode for DeployHotShotCalls { - fn decode( - data: impl AsRef<[u8]>, - ) -> ::core::result::Result { - let data = data.as_ref(); - if let Ok(decoded) = ::decode(data) { - return Ok(Self::IsScript(decoded)); - } - if let Ok(decoded) = ::decode(data) { - return Ok(Self::Run(decoded)); - } - Err(::ethers::core::abi::Error::InvalidData.into()) - } - } - impl ::ethers::core::abi::AbiEncode for DeployHotShotCalls { - fn encode(self) -> Vec { - match self { - Self::IsScript(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::Run(element) => ::ethers::core::abi::AbiEncode::encode(element), - } - } - } - impl ::core::fmt::Display for DeployHotShotCalls { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - match self { - Self::IsScript(element) => ::core::fmt::Display::fmt(element, f), - Self::Run(element) => ::core::fmt::Display::fmt(element, f), - } - } - } - impl ::core::convert::From for DeployHotShotCalls { - fn from(value: IsScriptCall) -> Self { - Self::IsScript(value) - } - } - impl ::core::convert::From for DeployHotShotCalls { - fn from(value: RunCall) -> Self { - Self::Run(value) - } - } - ///Container type for all return fields from the `IS_SCRIPT` function with signature `IS_SCRIPT()` and selector `0xf8ccbf47` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - pub struct IsScriptReturn(pub bool); -} diff --git a/contract-bindings/src/hot_shot.rs b/contract-bindings/src/hot_shot.rs index dd8672d955..8ec362dbb3 100644 --- a/contract-bindings/src/hot_shot.rs +++ b/contract-bindings/src/hot_shot.rs @@ -161,52 +161,6 @@ pub mod hot_shot { state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, },], ), - ( - ::std::borrow::ToOwned::to_owned("verifyAggSig"), - ::std::vec![::ethers::core::abi::ethabi::Function { - name: ::std::borrow::ToOwned::to_owned("verifyAggSig"), - inputs: ::std::vec![ - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("message"), - kind: ::ethers::core::abi::ethabi::ParamType::Bytes, - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bytes"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("sig"), - kind: ::ethers::core::abi::ethabi::ParamType::Tuple(::std::vec![ - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ::ethers::core::abi::ethabi::ParamType::Uint(256usize), - ],), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("struct BN254.G1Point"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("bitmap"), - kind: ::ethers::core::abi::ethabi::ParamType::Array( - ::std::boxed::Box::new( - ::ethers::core::abi::ethabi::ParamType::Bool, - ), - ), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("bool[]"), - ), - }, - ::ethers::core::abi::ethabi::Param { - name: ::std::borrow::ToOwned::to_owned("minStakeThreshold"), - kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), - internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), - ), - }, - ], - outputs: ::std::vec![], - constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, - },], - ), ]), events: ::core::convert::From::from([ ( @@ -259,13 +213,6 @@ pub mod hot_shot { ), ]), errors: ::core::convert::From::from([ - ( - ::std::borrow::ToOwned::to_owned("BLSSigVerificationFailed"), - ::std::vec![::ethers::core::abi::ethabi::AbiError { - name: ::std::borrow::ToOwned::to_owned("BLSSigVerificationFailed",), - inputs: ::std::vec![], - },], - ), ( ::std::borrow::ToOwned::to_owned("IncorrectBlockNumber"), ::std::vec![::ethers::core::abi::ethabi::AbiError { @@ -337,12 +284,12 @@ pub mod hot_shot { pub static HOTSHOT_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[Pa z\x80a\0 `\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\0}W`\x005`\xE0\x1C\x80cI\xCE\x89\x97\x11a\0[W\x80cI\xCE\x89\x97\x14a\0\xC6W\x80cg\xA2\x1Ep\x14a\0\xE6W\x80c\xF1\xF4]\x99\x14a\x010W\x80c\xF4O\xF7\x12\x14a\x01CW`\0\x80\xFD[\x80c\x03@\x96\x1E\x14a\0\x82W\x80c\n2\x1C\xFF\x14a\0\x97W\x80c&\x83=\xCC\x14a\0\xAAW[`\0\x80\xFD[a\0\x95a\0\x906`\x04a\x1BuV[a\x01LV[\0[a\0\x95a\0\xA56`\x04a\x1CEV[a\x03\xD7V[a\0\xB3a\x01\xF4\x81V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\0\xB3a\0\xD46`\x04a\x1C\xBAV[`\0` \x81\x90R\x90\x81R`@\x90 T\x81V[a\0\xF9a\0\xF46`\x04a\x1C\xBAV[a\x05FV[`@\x80Q\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R\x83\x82\x01Q\x91\x81\x01\x91\x90\x91R``\x92\x83\x01Q\x92\x81\x01\x92\x90\x92R`\x80\x82\x01R`\xA0\x01a\0\xBDV[a\0\x95a\x01>6`\x04a\x1C\xD3V[a\x05\xDAV[a\0\xB3`\x01T\x81V[`\x03T\x82Q\x11\x15a\x01\x99W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x12`$\x82\x01Rqbitmap is too long`p\x1B`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`\0[\x82\x81\x81Q\x81\x10a\x01\xAEWa\x01\xAEa\x1DKV[` \x02` \x01\x01Q\x15\x80\x15a\x01\xC3WP\x82Q\x81\x10[\x15a\x01\xDAW\x80a\x01\xD2\x81a\x1DwV[\x91PPa\x01\x9CV[\x82Q\x81\x10a\x01\xFBW`@QcKe\x82-`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x81[\x84Q\x81\x10\x15a\x02KW\x84\x81\x81Q\x81\x10a\x02\x1AWa\x02\x1Aa\x1DKV[` \x02` \x01\x01Q\x15a\x02CW`\0\x81\x81R`\x02` R`@\x90 Ta\x02@\x90\x83a\x1D\x90V[\x91P[`\x01\x01a\x01\xFFV[P\x82\x81\x10\x15a\x02mW`@Qc<)\x0BS`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0`\x03\x83\x81T\x81\x10a\x02\x82Wa\x02\x82a\x1DKV[\x90`\0R` `\0 \x90`\x04\x02\x01`@Q\x80`\x80\x01`@R\x90\x81`\0\x82\x01T\x81R` \x01`\x01\x82\x01T\x81R` \x01`\x02\x82\x01T\x81R` \x01`\x03\x82\x01T\x81RPP\x90P`\0\x83`\x01a\x02\xD4\x91\x90a\x1D\x90V[\x90P[\x85Q\x81\x10\x15a\x03\xC2W\x85\x81\x81Q\x81\x10a\x02\xF2Wa\x02\xF2a\x1DKV[` \x02` \x01\x01Q\x15a\x03\xBAW`\0`\x03\x82\x81T\x81\x10a\x03\x14Wa\x03\x14a\x1DKV[`\0\x91\x82R` \x80\x83 `@\x80Q`\x80\x81\x01\x82R`\x04\x90\x94\x02\x90\x91\x01\x80T\x80\x85R`\x01\x82\x01T\x85\x85\x01\x81\x90R`\x02\x83\x01T\x86\x85\x01\x81\x90R`\x03\x90\x93\x01T``\x80\x88\x01\x82\x90R\x8BQ\x96\x8C\x01Q\x95\x8C\x01Q\x90\x8C\x01Q\x97\x99P\x95\x97\x94\x96\x94\x92\x93\x91\x92\x80\x80\x80a\x03\x86\x8B\x8D\x8B\x8D\x8B\x8D\x8B\x8Da\x07\x02V[`@\x80Q`\x80\x81\x01\x82R\x93\x84R` \x84\x01\x94\x90\x94R\x92\x82\x01\x92\x90\x92R``\x81\x01\x91\x90\x91R\x9EPPPPPPPPPPPPPP[`\x01\x01a\x02\xD7V[Pa\x03\xCE\x87\x87\x83a\x08OV[PPPPPPPV[a\x01\xF4\x81\x11\x15a\x03\xFDW`@Qc\xE0\x82\x84\x0B`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x01\x90V[`\x01T`\0[\x82\x81\x10\x15a\x05\x06W`\x01T\x84\x84\x83\x81\x81\x10a\x04 Wa\x04 a\x1DKV[\x90P`\x80\x02\x01`\0\x015\x14a\x04rW\x83\x83\x82\x81\x81\x10a\x04AWa\x04Aa\x1DKV[\x90P`\x80\x02\x01`\0\x015`\x01T`@Qc4\xE4#\xFF`\xE0\x1B\x81R`\x04\x01a\x01\x90\x92\x91\x90\x91\x82R` \x82\x01R`@\x01\x90V[a\x04\x90\x84\x84\x83\x81\x81\x10a\x04\x87Wa\x04\x87a\x1DKV[\x90PPP`\x01\x90V[a\x04\xB3W`\x01T`@Qcx\x18g\x19`\xE0\x1B\x81R`\x04\x01a\x01\x90\x91\x81R` \x01\x90V[\x83\x83\x82\x81\x81\x10a\x04\xC5Wa\x04\xC5a\x1DKV[\x90P`\x80\x02\x01` \x015`\0\x80`\x01T\x81R` \x01\x90\x81R` \x01`\0 \x81\x90UP`\x01\x80`\0\x82\x82Ta\x04\xF9\x91\x90a\x1D\x90V[\x90\x91UPP`\x01\x01a\x04\x03V[P`@\x80Q\x82\x81R` \x81\x01\x84\x90R\x7F\x82\x03\xA2\x1EO\x95\xF7.P\x81\xD5\xE0\x92\x9B\x1A\x8CR\x14\x1E\x12?\x9A\x14\xE1\xE7K\x02`\xFA_R\xF1\x91\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x05q`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`\0`\x03\x83\x81T\x81\x10a\x05\x86Wa\x05\x86a\x1DKV[`\0\x91\x82R` \x80\x83 \x95\x83R`\x02\x80\x82R`@\x93\x84\x90 T\x84Q`\x80\x81\x01\x86R`\x04\x90\x94\x02\x90\x97\x01\x80T\x84R`\x01\x81\x01T\x92\x84\x01\x92\x90\x92R\x81\x01T\x92\x82\x01\x92\x90\x92R`\x03\x90\x91\x01T``\x82\x01R\x93\x91PPV[`\x03\x80T`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x86\x90U\x84T`\x01\x81\x01\x86U\x94\x90\x92R\x85Q`\x04\x90\x94\x02\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[\x81\x01\x85\x90U\x86\x82\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8\\\x83\x01U\x87\x84\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8]\x84\x01U``\x80\x8A\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8^\x90\x95\x01\x94\x90\x94U\x85Q\x97\x88R\x91Q\x93\x87\x01\x93\x90\x93R\x91Q\x92\x85\x01\x92\x90\x92R\x90Q\x90\x83\x01R`\x80\x82\x01\x83\x90R`\xA0\x82\x01\x81\x90R\x90\x7F\xD7/\xE1\xACW\xD3\xE6\xD5\x1C\x92*\xE4\xD8\x11\xCCP\xAA:\xD7\x02b\x83\xAE\xA67IJ\x072RVZ\x90`\xC0\x01a\x059V[`\0\x80\x80\x80\x8B\x15\x80\x15a\x07\x13WP\x8A\x15[\x80\x15a\x07\x1DWP\x89\x15[\x80\x15a\x07'WP\x88\x15[\x15a\x07xW\x87\x15\x80\x15a\x078WP\x86\x15[\x80\x15a\x07BWP\x85\x15[\x80\x15a\x07LWP\x84\x15[a\x07hWa\x07\\\x88\x88\x88\x88a\t\x01V[a\x07hWa\x07ha\x1D\xA9V[P\x86\x92P\x85\x91P\x84\x90P\x83a\x08@V[\x87\x15\x80\x15a\x07\x84WP\x86\x15[\x80\x15a\x07\x8EWP\x85\x15[\x80\x15a\x07\x98WP\x84\x15[\x15a\x07\xC5Wa\x07\xA9\x8C\x8C\x8C\x8Ca\t\x01V[a\x07\xB5Wa\x07\xB5a\x1D\xA9V[P\x8A\x92P\x89\x91P\x88\x90P\x87a\x08@V[a\x07\xD1\x8C\x8C\x8C\x8Ca\t\x01V[a\x07\xDDWa\x07\xDDa\x1D\xA9V[a\x07\xE9\x88\x88\x88\x88a\t\x01V[a\x07\xF5Wa\x07\xF5a\x1D\xA9V[`\0a\x08\x0F\x8D\x8D\x8D\x8D`\x01`\0\x8F\x8F\x8F\x8F`\x01`\0a\t\xB6V[\x80Q` \x82\x01Q`@\x83\x01Q``\x84\x01Q`\x80\x85\x01Q`\xA0\x86\x01Q\x95\x96Pa\x086\x95a\x0C?V[\x94P\x94P\x94P\x94PP[\x98P\x98P\x98P\x98\x94PPPPPV[a\x08X\x82a\x0C\x89V[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a *`$\x919\x90P`\0\x84\x82`@Q` \x01a\x08\x8A\x92\x91\x90a\x1D\xEFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x08\xA7\x83a\r\x18V[`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x90R\x91\x93P\x91Pa\x08\xDB\x81\x87a\x08\xCE\x8Aa\r\xEBV[a\x08\xD6a\x0EfV[a\x0F7V[a\x08\xF7W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[`\0\x80`\0\x80`\0a\t\x15\x87\x87\x89\x89a\x10\x19V[\x90\x94P\x92Pa\t&\x89\x89\x81\x81a\x10\x19V[\x90\x92P\x90Pa\t7\x82\x82\x8B\x8Ba\x10\x19V[\x90\x92P\x90Pa\tH\x84\x84\x84\x84a\x10\x8AV[\x90\x94P\x92Pa\t\x98\x84\x84\x7F+\x14\x9D@\xCE\xB8\xAA\xAE\x81\xBE\x18\x99\x1B\xE0j\xC3\xB5\xB4\xC5\xE5Y\xDB\xEF\xA32g\xE6\xDC$\xA18\xE5~\x97\x13\xB0:\xF0\xFE\xD4\xCD,\xAF\xAD\xEE\xD8\xFD\xF4\xA7O\xA0\x84\xE5-\x18R\xE4\xA2\xBD\x06\x85\xC3\x15\xD2a\x10\x8AV[\x90\x94P\x92P\x83\x15\x80\x15a\t\xA9WP\x82\x15[\x99\x98PPPPPPPPPV[a\t\xBEa\x1A2V[\x88\x15\x80\x15a\t\xCAWP\x87\x15[\x15a\n\x0CW\x86\x86\x86\x86\x86\x86\x86`\0[`\xA0\x89\x01\x92\x90\x92R`\x80\x88\x01\x92\x90\x92R``\x87\x01\x92\x90\x92R`@\x86\x01\x92\x90\x92R` \x85\x81\x01\x93\x90\x93R\x90\x91\x02\x01Ra\x0C/V[\x82\x15\x80\x15a\n\x18WP\x81\x15[\x15a\n+W\x8C\x8C\x8C\x8C\x8C\x8C\x86`\0a\t\xD9V[a\n7\x85\x85\x8B\x8Ba\x10\x19V[\x90\x95P\x93Pa\nH\x8B\x8B\x85\x85a\x10\x19V[``\x83\x01R`@\x82\x01Ra\n^\x87\x87\x8B\x8Ba\x10\x19V[\x90\x97P\x95Pa\no\x8D\x8D\x85\x85a\x10\x19V[`\xA0\x83\x01R`\x80\x82\x01\x81\x90R\x87\x14\x80\x15a\n\x8CWP`\xA0\x81\x01Q\x86\x14[\x15a\n\xD1W`@\x81\x01Q\x85\x14\x80\x15a\n\xA7WP``\x81\x01Q\x84\x14[\x15a\n\xC2Wa\n\xBA\x8D\x8D\x8D\x8D\x8D\x8Da\x10\xCCV[\x86`\0a\t\xD9V[`\x01`\0\x81\x81\x80\x80\x86\x81a\t\xD9V[a\n\xDD\x89\x89\x85\x85a\x10\x19V[\x90\x93P\x91Pa\n\xFD\x85\x85\x83`\x02` \x02\x01Q\x84`\x03[` \x02\x01Qa\x10\x8AV[\x90\x9DP\x9BPa\x0B\x17\x87\x87\x83`\x04` \x02\x01Q\x84`\x05a\n\xF3V[\x90\x9BP\x99Pa\x0B(\x8B\x8B\x81\x81a\x10\x19V[\x90\x99P\x97Pa\x0BH\x89\x89\x83`\x04` \x02\x01Q\x84`\x05[` \x02\x01Qa\x10\x19V[\x90\x95P\x93Pa\x0BY\x89\x89\x8D\x8Da\x10\x19V[\x90\x99P\x97Pa\x0Bj\x89\x89\x85\x85a\x10\x19V[`\xA0\x83\x01R`\x80\x82\x01Ra\x0B\x80\x8D\x8D\x81\x81a\x10\x19V[\x90\x97P\x95Pa\x0B\x91\x87\x87\x85\x85a\x10\x19V[\x90\x97P\x95Pa\x0B\xA2\x87\x87\x8B\x8Ba\x10\x8AV[\x90\x97P\x95Pa\x0B\xB3\x85\x85`\x02a\x12;V[\x90\x93P\x91Pa\x0B\xC4\x87\x87\x85\x85a\x10\x8AV[\x90\x97P\x95Pa\x0B\xD5\x8B\x8B\x89\x89a\x10\x19V[` \x83\x01R\x81Ra\x0B\xE8\x85\x85\x89\x89a\x10\x8AV[\x90\x9BP\x99Pa\x0B\xF9\x8D\x8D\x8D\x8Da\x10\x19V[\x90\x9BP\x99Pa\x0C\x13\x89\x89\x83`\x02` \x02\x01Q\x84`\x03a\x0B>V[\x90\x9DP\x9BPa\x0C$\x8B\x8B\x8F\x8Fa\x10\x8AV[``\x83\x01R`@\x82\x01R[\x9C\x9BPPPPPPPPPPPPV[`\0\x80`\0\x80`\0\x80a\x0CR\x88\x88a\x12nV[\x90\x92P\x90Pa\x0Cc\x8C\x8C\x84\x84a\x10\x19V[\x90\x96P\x94Pa\x0Ct\x8A\x8A\x84\x84a\x10\x19V[\x96\x9D\x95\x9CP\x9AP\x94\x98P\x92\x96PPPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a N\x839\x81Q\x91R\x91\x82`\x03\x81\x80\x85\x80\t\x85\t\x08\x83\x82\x83\t\x14\x81\x15\x83\x15\x17\x19\x84\x83\x10\x85\x85\x10\x16\x16\x16\x93PPP\x81a\r\x13W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[PPPV[`\0\x80`\0a\r&\x84a\x12\xF9V[\x90P`\0\x80Q` a N\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\rOWa\rOa\x1E\x0CV[\x84\x82\t\x90P\x82\x80a\rbWa\rba\x1E\x0CV[\x82\x82\x08\x90P`\0\x80a\rs\x83a\x15\rV[\x92P\x90P[\x80a\r\xDCW\x84\x80a\r\x8BWa\r\x8Ba\x1E\x0CV[`\x01\x87\x08\x95P\x84\x80a\r\x9FWa\r\x9Fa\x1E\x0CV[\x86\x87\t\x92P\x84\x80a\r\xB2Wa\r\xB2a\x1E\x0CV[\x86\x84\t\x92P\x84\x80a\r\xC5Wa\r\xC5a\x1E\x0CV[\x84\x84\x08\x92Pa\r\xD3\x83a\x15\rV[\x92P\x90Pa\rxV[P\x93\x97\x93\x96P\x92\x94PPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x0E\x13WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a N\x839\x81Q\x91R\x84` \x01Qa\x0EF\x91\x90a\x1E\"V[a\x0E^\x90`\0\x80Q` a N\x839\x81Q\x91Ra\x1EDV[\x90R\x92\x91PPV[a\x0E\x91`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x10\rW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[P\x15\x15\x95\x94PPPPPV[`\0\x80a\x10W`\0\x80Q` a N\x839\x81Q\x91R\x85\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x85\x88\t`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[`\0\x80Q` a N\x839\x81Q\x91R\x80\x86\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x86\x8A\t\x08\x91P\x91P\x94P\x94\x92PPPV[`\0\x80a\x10\xA6\x86\x85`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[a\x10\xBF\x86\x85`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[\x91P\x91P\x94P\x94\x92PPPV[`\0\x80`\0\x80`\0\x80a\x10\xE1\x8C\x8C`\x03a\x12;V[\x90\x96P\x94Pa\x10\xF2\x86\x86\x8E\x8Ea\x10\x19V[\x90\x96P\x94Pa\x11\x03\x8A\x8A\x8A\x8Aa\x10\x19V[\x90\x98P\x96Pa\x11\x14\x8C\x8C\x8C\x8Ca\x10\x19V[\x90\x94P\x92Pa\x11%\x84\x84\x8A\x8Aa\x10\x19V[\x90\x94P\x92Pa\x116\x86\x86\x81\x81a\x10\x19V[\x90\x9CP\x9APa\x11G\x84\x84`\x08a\x12;V[\x90\x92P\x90Pa\x11X\x8C\x8C\x84\x84a\x10\x8AV[\x90\x9CP\x9APa\x11i\x88\x88\x81\x81a\x10\x19V[\x90\x92P\x90Pa\x11z\x84\x84`\x04a\x12;V[\x90\x94P\x92Pa\x11\x8B\x84\x84\x8E\x8Ea\x10\x8AV[\x90\x94P\x92Pa\x11\x9C\x84\x84\x88\x88a\x10\x19V[\x90\x94P\x92Pa\x11\xAD\x8A\x8A`\x08a\x12;V[\x90\x96P\x94Pa\x11\xBE\x86\x86\x8C\x8Ca\x10\x19V[\x90\x96P\x94Pa\x11\xCF\x86\x86\x84\x84a\x10\x19V[\x90\x96P\x94Pa\x11\xE0\x84\x84\x88\x88a\x10\x8AV[\x90\x94P\x92Pa\x11\xF1\x8C\x8C`\x02a\x12;V[\x90\x96P\x94Pa\x12\x02\x86\x86\x8A\x8Aa\x10\x19V[\x90\x96P\x94Pa\x12\x13\x88\x88\x84\x84a\x10\x19V[\x90\x92P\x90Pa\x12$\x82\x82`\x08a\x12;V[\x80\x92P\x81\x93PPP\x96P\x96P\x96P\x96P\x96P\x96\x90PV[`\0\x80`\0\x80Q` a N\x839\x81Q\x91R\x83\x86\t`\0\x80Q` a N\x839\x81Q\x91R\x84\x86\t\x91P\x91P\x93P\x93\x91PPV[`\0\x80\x80a\x12\xAF`\0\x80Q` a N\x839\x81Q\x91R\x80\x87\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x87\x88\t\x08`\0\x80Q` a N\x839\x81Q\x91Ra\x16,V[\x90P`\0\x80Q` a N\x839\x81Q\x91R\x81\x86\t`\0\x80Q` a N\x839\x81Q\x91R\x82\x86\ta\x12\xED\x90`\0\x80Q` a N\x839\x81Q\x91Ra\x1EDV[\x92P\x92PP\x92P\x92\x90PV[`\0\x80a\x13\x05\x83a\x16}V[\x80Q\x90\x91P`0\x81\x14a\x13\x1AWa\x13\x1Aa\x1D\xA9V[`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x135Wa\x135a\x1APV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13_W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x13\xD0W\x83`\x01a\x13z\x83\x86a\x1EDV[a\x13\x84\x91\x90a\x1EDV[\x81Q\x81\x10a\x13\x94Wa\x13\x94a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x13\xB1Wa\x13\xB1a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x13eV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x14bW\x83\x81a\x14\x0E\x85\x88a\x1EDV[a\x14\x18\x91\x90a\x1D\x90V[\x81Q\x81\x10a\x14(Wa\x14(a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14HWa\x14Ha\x1DKV[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x13\xFAV[P`\0a\x14n\x82a\x19\xD1V[\x90Pa\x01\0`\0\x80Q` a N\x839\x81Q\x91R`\0a\x14\x8E\x86\x89a\x1EDV[\x90P`\0[\x81\x81\x10\x15a\x14\xFDW`\0\x88`\x01a\x14\xAA\x84\x86a\x1EDV[a\x14\xB4\x91\x90a\x1EDV[\x81Q\x81\x10a\x14\xC4Wa\x14\xC4a\x1DKV[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x14\xDCWa\x14\xDCa\x1E\x0CV[\x85\x87\t\x95P\x83\x80a\x14\xEFWa\x14\xEFa\x1E\x0CV[\x81\x87\x08\x95PP`\x01\x01a\x14\x93V[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0\x80\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P`\0`\0\x80Q` a N\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x86``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` `\0`\xC0\x83`\x05Z\xFA\x93PP`\0Q\x93P\x82a\x15\xCFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[\x80`\x01\x85\x90\x1B\x11\x15a\x15\xE8Wa\x15\xE5\x84\x82a\x1EDV[\x93P[\x80\x80a\x15\xF6Wa\x15\xF6a\x1E\x0CV[\x84\x85\t\x91P\x85\x82\x14\x94PPPP\x91P\x91V[`\0\x81\x80a\x16\x18Wa\x16\x18a\x1E\x0CV[a\x16\"\x84\x84a\x1EDV[\x85\x08\x94\x93PPPPV[`\0\x80`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x84\x03`\x80\x82\x01R\x83`\xA0\x82\x01R` \x81`\xC0\x83`\x05a\x07\xD0Z\x03\xFA\x90Q\x92P\x90P\x80a\x16vW`\0\x80\xFD[P\x92\x91PPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x16\xBE\x92\x91\x90a\x1D\xEFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16\xE5\x92\x91\x90a\x1EWV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x17\x07\x91\x90a\x1E\x83V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x171\x90\x83\x90\x83\x90` \x01a\x1E\x9DV[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\xA2Wa\x17\xA2a\x1APV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\xCCW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x17\xE4\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\x18OW\x81\x81\x81Q\x81\x10a\x18\x13Wa\x18\x13a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x180Wa\x180a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x17\xF8V[P`\0\x84`@Q` \x01a\x18e\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18\xF9W`\0\x83\x82\x81Q\x81\x10a\x18\xA0Wa\x18\xA0a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x18\xBDWa\x18\xBDa\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18\xDE\x92\x91\x90a\x1E\xC2V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x18\x84V[P\x86\x88\x87`@Q` \x01a\x19\x0F\x93\x92\x91\x90a\x1E\xE7V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x19=\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P`\0[a\x19^\x8A`\xFF\x8D\x16a\x1EDV[\x81\x10\x15a\x19\xC0W\x82\x81\x81Q\x81\x10a\x19wWa\x19wa\x1DKV[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19\x91\x83\x8Da\x1D\x90V[\x81Q\x81\x10a\x19\xA1Wa\x19\xA1a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x19QV[P\x91\x9B\x9APPPPPPPPPPPV[`\0\x80\x80[\x83Q\x81\x10\x15a\x16vW\x83\x81\x81Q\x81\x10a\x19\xF1Wa\x19\xF1a\x1DKV[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x1A\t\x91\x90a\x1F\x1BV[a\x1A\x14\x90`\x02a \x16V[a\x1A\x1E\x91\x90a\x1F\x1BV[a\x1A(\x90\x83a\x1D\x90V[\x91P`\x01\x01a\x19\xD6V[`@Q\x80`\xC0\x01`@R\x80`\x06\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1A\x8FWa\x1A\x8Fa\x1APV[`@R\x91\x90PV[`\0`@\x82\x84\x03\x12\x15a\x1A\xA9W`\0\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\xCCWa\x1A\xCCa\x1APV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x1A\xF7W`\0\x80\xFD[\x815` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1B\x13Wa\x1B\x13a\x1APV[\x81`\x05\x1Ba\x1B\"\x82\x82\x01a\x1AfV[\x92\x83R\x84\x81\x01\x82\x01\x92\x82\x81\x01\x90\x87\x85\x11\x15a\x1B6`\x04a\x1C\xD3V[a\x05\xDAV[a\0\xB3`\x01T\x81V[`\x03T\x82Q\x11\x15a\x01\x99W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x12`$\x82\x01Rqbitmap is too long`p\x1B`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`\0[\x82\x81\x81Q\x81\x10a\x01\xAEWa\x01\xAEa\x1DKV[` \x02` \x01\x01Q\x15\x80\x15a\x01\xC3WP\x82Q\x81\x10[\x15a\x01\xDAW\x80a\x01\xD2\x81a\x1DwV[\x91PPa\x01\x9CV[\x82Q\x81\x10a\x01\xFBW`@QcKe\x82-`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x81[\x84Q\x81\x10\x15a\x02KW\x84\x81\x81Q\x81\x10a\x02\x1AWa\x02\x1Aa\x1DKV[` \x02` \x01\x01Q\x15a\x02CW`\0\x81\x81R`\x02` R`@\x90 Ta\x02@\x90\x83a\x1D\x90V[\x91P[`\x01\x01a\x01\xFFV[P\x82\x81\x10\x15a\x02mW`@Qc<)\x0BS`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0`\x03\x83\x81T\x81\x10a\x02\x82Wa\x02\x82a\x1DKV[\x90`\0R` `\0 \x90`\x04\x02\x01`@Q\x80`\x80\x01`@R\x90\x81`\0\x82\x01T\x81R` \x01`\x01\x82\x01T\x81R` \x01`\x02\x82\x01T\x81R` \x01`\x03\x82\x01T\x81RPP\x90P`\0\x83`\x01a\x02\xD4\x91\x90a\x1D\x90V[\x90P[\x85Q\x81\x10\x15a\x03\xC2W\x85\x81\x81Q\x81\x10a\x02\xF2Wa\x02\xF2a\x1DKV[` \x02` \x01\x01Q\x15a\x03\xBAW`\0`\x03\x82\x81T\x81\x10a\x03\x14Wa\x03\x14a\x1DKV[`\0\x91\x82R` \x80\x83 `@\x80Q`\x80\x81\x01\x82R`\x04\x90\x94\x02\x90\x91\x01\x80T\x80\x85R`\x01\x82\x01T\x85\x85\x01\x81\x90R`\x02\x83\x01T\x86\x85\x01\x81\x90R`\x03\x90\x93\x01T``\x80\x88\x01\x82\x90R\x8BQ\x96\x8C\x01Q\x95\x8C\x01Q\x90\x8C\x01Q\x97\x99P\x95\x97\x94\x96\x94\x92\x93\x91\x92\x80\x80\x80a\x03\x86\x8B\x8D\x8B\x8D\x8B\x8D\x8B\x8Da\x07\x02V[`@\x80Q`\x80\x81\x01\x82R\x93\x84R` \x84\x01\x94\x90\x94R\x92\x82\x01\x92\x90\x92R``\x81\x01\x91\x90\x91R\x9EPPPPPPPPPPPPPP[`\x01\x01a\x02\xD7V[Pa\x03\xCE\x87\x87\x83a\x08OV[PPPPPPPV[a\x01\xF4\x81\x11\x15a\x03\xFDW`@Qc\xE0\x82\x84\x0B`\xE0\x1B\x81R`\x04\x81\x01\x82\x90R`$\x01a\x01\x90V[`\x01T`\0[\x82\x81\x10\x15a\x05\x06W`\x01T\x84\x84\x83\x81\x81\x10a\x04 Wa\x04 a\x1DKV[\x90P`\x80\x02\x01`\0\x015\x14a\x04rW\x83\x83\x82\x81\x81\x10a\x04AWa\x04Aa\x1DKV[\x90P`\x80\x02\x01`\0\x015`\x01T`@Qc4\xE4#\xFF`\xE0\x1B\x81R`\x04\x01a\x01\x90\x92\x91\x90\x91\x82R` \x82\x01R`@\x01\x90V[a\x04\x90\x84\x84\x83\x81\x81\x10a\x04\x87Wa\x04\x87a\x1DKV[\x90PPP`\x01\x90V[a\x04\xB3W`\x01T`@Qcx\x18g\x19`\xE0\x1B\x81R`\x04\x01a\x01\x90\x91\x81R` \x01\x90V[\x83\x83\x82\x81\x81\x10a\x04\xC5Wa\x04\xC5a\x1DKV[\x90P`\x80\x02\x01` \x015`\0\x80`\x01T\x81R` \x01\x90\x81R` \x01`\0 \x81\x90UP`\x01\x80`\0\x82\x82Ta\x04\xF9\x91\x90a\x1D\x90V[\x90\x91UPP`\x01\x01a\x04\x03V[P`@\x80Q\x82\x81R` \x81\x01\x84\x90R\x7F\x82\x03\xA2\x1EO\x95\xF7.P\x81\xD5\xE0\x92\x9B\x1A\x8CR\x14\x1E\x12?\x9A\x14\xE1\xE7K\x02`\xFA_R\xF1\x91\x01[`@Q\x80\x91\x03\x90\xA1PPPV[a\x05q`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`\0`\x03\x83\x81T\x81\x10a\x05\x86Wa\x05\x86a\x1DKV[`\0\x91\x82R` \x80\x83 \x95\x83R`\x02\x80\x82R`@\x93\x84\x90 T\x84Q`\x80\x81\x01\x86R`\x04\x90\x94\x02\x90\x97\x01\x80T\x84R`\x01\x81\x01T\x92\x84\x01\x92\x90\x92R\x81\x01T\x92\x82\x01\x92\x90\x92R`\x03\x90\x91\x01T``\x82\x01R\x93\x91PPV[`\x03\x80T`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x86\x90U\x84T`\x01\x81\x01\x86U\x94\x90\x92R\x85Q`\x04\x90\x94\x02\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[\x81\x01\x85\x90U\x86\x82\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8\\\x83\x01U\x87\x84\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8]\x84\x01U``\x80\x8A\x01\x80Q\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8^\x90\x95\x01\x94\x90\x94U\x85Q\x97\x88R\x91Q\x93\x87\x01\x93\x90\x93R\x91Q\x92\x85\x01\x92\x90\x92R\x90Q\x90\x83\x01R`\x80\x82\x01\x83\x90R`\xA0\x82\x01\x81\x90R\x90\x7F\xD7/\xE1\xACW\xD3\xE6\xD5\x1C\x92*\xE4\xD8\x11\xCCP\xAA:\xD7\x02b\x83\xAE\xA67IJ\x072RVZ\x90`\xC0\x01a\x059V[`\0\x80\x80\x80\x8B\x15\x80\x15a\x07\x13WP\x8A\x15[\x80\x15a\x07\x1DWP\x89\x15[\x80\x15a\x07'WP\x88\x15[\x15a\x07xW\x87\x15\x80\x15a\x078WP\x86\x15[\x80\x15a\x07BWP\x85\x15[\x80\x15a\x07LWP\x84\x15[a\x07hWa\x07\\\x88\x88\x88\x88a\t\x01V[a\x07hWa\x07ha\x1D\xA9V[P\x86\x92P\x85\x91P\x84\x90P\x83a\x08@V[\x87\x15\x80\x15a\x07\x84WP\x86\x15[\x80\x15a\x07\x8EWP\x85\x15[\x80\x15a\x07\x98WP\x84\x15[\x15a\x07\xC5Wa\x07\xA9\x8C\x8C\x8C\x8Ca\t\x01V[a\x07\xB5Wa\x07\xB5a\x1D\xA9V[P\x8A\x92P\x89\x91P\x88\x90P\x87a\x08@V[a\x07\xD1\x8C\x8C\x8C\x8Ca\t\x01V[a\x07\xDDWa\x07\xDDa\x1D\xA9V[a\x07\xE9\x88\x88\x88\x88a\t\x01V[a\x07\xF5Wa\x07\xF5a\x1D\xA9V[`\0a\x08\x0F\x8D\x8D\x8D\x8D`\x01`\0\x8F\x8F\x8F\x8F`\x01`\0a\t\xB6V[\x80Q` \x82\x01Q`@\x83\x01Q``\x84\x01Q`\x80\x85\x01Q`\xA0\x86\x01Q\x95\x96Pa\x086\x95a\x0C?V[\x94P\x94P\x94P\x94PP[\x98P\x98P\x98P\x98\x94PPPPPV[a\x08X\x82a\x0C\x89V[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a *`$\x919\x90P`\0\x84\x82`@Q` \x01a\x08\x8A\x92\x91\x90a\x1D\xEFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x08\xA7\x83a\r\x18V[`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x90R\x91\x93P\x91Pa\x08\xDB\x81\x87a\x08\xCE\x8Aa\r\xEBV[a\x08\xD6a\x0EfV[a\x0F7V[a\x08\xF7W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[`\0\x80`\0\x80`\0a\t\x15\x87\x87\x89\x89a\x10\x19V[\x90\x94P\x92Pa\t&\x89\x89\x81\x81a\x10\x19V[\x90\x92P\x90Pa\t7\x82\x82\x8B\x8Ba\x10\x19V[\x90\x92P\x90Pa\tH\x84\x84\x84\x84a\x10\x8AV[\x90\x94P\x92Pa\t\x98\x84\x84\x7F+\x14\x9D@\xCE\xB8\xAA\xAE\x81\xBE\x18\x99\x1B\xE0j\xC3\xB5\xB4\xC5\xE5Y\xDB\xEF\xA32g\xE6\xDC$\xA18\xE5~\x97\x13\xB0:\xF0\xFE\xD4\xCD,\xAF\xAD\xEE\xD8\xFD\xF4\xA7O\xA0\x84\xE5-\x18R\xE4\xA2\xBD\x06\x85\xC3\x15\xD2a\x10\x8AV[\x90\x94P\x92P\x83\x15\x80\x15a\t\xA9WP\x82\x15[\x99\x98PPPPPPPPPV[a\t\xBEa\x1A2V[\x88\x15\x80\x15a\t\xCAWP\x87\x15[\x15a\n\x0CW\x86\x86\x86\x86\x86\x86\x86`\0[`\xA0\x89\x01\x92\x90\x92R`\x80\x88\x01\x92\x90\x92R``\x87\x01\x92\x90\x92R`@\x86\x01\x92\x90\x92R` \x85\x81\x01\x93\x90\x93R\x90\x91\x02\x01Ra\x0C/V[\x82\x15\x80\x15a\n\x18WP\x81\x15[\x15a\n+W\x8C\x8C\x8C\x8C\x8C\x8C\x86`\0a\t\xD9V[a\n7\x85\x85\x8B\x8Ba\x10\x19V[\x90\x95P\x93Pa\nH\x8B\x8B\x85\x85a\x10\x19V[``\x83\x01R`@\x82\x01Ra\n^\x87\x87\x8B\x8Ba\x10\x19V[\x90\x97P\x95Pa\no\x8D\x8D\x85\x85a\x10\x19V[`\xA0\x83\x01R`\x80\x82\x01\x81\x90R\x87\x14\x80\x15a\n\x8CWP`\xA0\x81\x01Q\x86\x14[\x15a\n\xD1W`@\x81\x01Q\x85\x14\x80\x15a\n\xA7WP``\x81\x01Q\x84\x14[\x15a\n\xC2Wa\n\xBA\x8D\x8D\x8D\x8D\x8D\x8Da\x10\xCCV[\x86`\0a\t\xD9V[`\x01`\0\x81\x81\x80\x80\x86\x81a\t\xD9V[a\n\xDD\x89\x89\x85\x85a\x10\x19V[\x90\x93P\x91Pa\n\xFD\x85\x85\x83`\x02` \x02\x01Q\x84`\x03[` \x02\x01Qa\x10\x8AV[\x90\x9DP\x9BPa\x0B\x17\x87\x87\x83`\x04` \x02\x01Q\x84`\x05a\n\xF3V[\x90\x9BP\x99Pa\x0B(\x8B\x8B\x81\x81a\x10\x19V[\x90\x99P\x97Pa\x0BH\x89\x89\x83`\x04` \x02\x01Q\x84`\x05[` \x02\x01Qa\x10\x19V[\x90\x95P\x93Pa\x0BY\x89\x89\x8D\x8Da\x10\x19V[\x90\x99P\x97Pa\x0Bj\x89\x89\x85\x85a\x10\x19V[`\xA0\x83\x01R`\x80\x82\x01Ra\x0B\x80\x8D\x8D\x81\x81a\x10\x19V[\x90\x97P\x95Pa\x0B\x91\x87\x87\x85\x85a\x10\x19V[\x90\x97P\x95Pa\x0B\xA2\x87\x87\x8B\x8Ba\x10\x8AV[\x90\x97P\x95Pa\x0B\xB3\x85\x85`\x02a\x12;V[\x90\x93P\x91Pa\x0B\xC4\x87\x87\x85\x85a\x10\x8AV[\x90\x97P\x95Pa\x0B\xD5\x8B\x8B\x89\x89a\x10\x19V[` \x83\x01R\x81Ra\x0B\xE8\x85\x85\x89\x89a\x10\x8AV[\x90\x9BP\x99Pa\x0B\xF9\x8D\x8D\x8D\x8Da\x10\x19V[\x90\x9BP\x99Pa\x0C\x13\x89\x89\x83`\x02` \x02\x01Q\x84`\x03a\x0B>V[\x90\x9DP\x9BPa\x0C$\x8B\x8B\x8F\x8Fa\x10\x8AV[``\x83\x01R`@\x82\x01R[\x9C\x9BPPPPPPPPPPPPV[`\0\x80`\0\x80`\0\x80a\x0CR\x88\x88a\x12nV[\x90\x92P\x90Pa\x0Cc\x8C\x8C\x84\x84a\x10\x19V[\x90\x96P\x94Pa\x0Ct\x8A\x8A\x84\x84a\x10\x19V[\x96\x9D\x95\x9CP\x9AP\x94\x98P\x92\x96PPPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a N\x839\x81Q\x91R\x91\x82`\x03\x81\x80\x85\x80\t\x85\t\x08\x83\x82\x83\t\x14\x81\x15\x83\x15\x17\x19\x84\x83\x10\x85\x85\x10\x16\x16\x16\x93PPP\x81a\r\x13W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[PPPV[`\0\x80`\0a\r&\x84a\x12\xF9V[\x90P`\0\x80Q` a N\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\rOWa\rOa\x1E\x0CV[\x84\x82\t\x90P\x82\x80a\rbWa\rba\x1E\x0CV[\x82\x82\x08\x90P`\0\x80a\rs\x83a\x15\rV[\x92P\x90P[\x80a\r\xDCW\x84\x80a\r\x8BWa\r\x8Ba\x1E\x0CV[`\x01\x87\x08\x95P\x84\x80a\r\x9FWa\r\x9Fa\x1E\x0CV[\x86\x87\t\x92P\x84\x80a\r\xB2Wa\r\xB2a\x1E\x0CV[\x86\x84\t\x92P\x84\x80a\r\xC5Wa\r\xC5a\x1E\x0CV[\x84\x84\x08\x92Pa\r\xD3\x83a\x15\rV[\x92P\x90Pa\rxV[P\x93\x97\x93\x96P\x92\x94PPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x0E\x13WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a N\x839\x81Q\x91R\x84` \x01Qa\x0EF\x91\x90a\x1E\"V[a\x0E^\x90`\0\x80Q` a N\x839\x81Q\x91Ra\x1EDV[\x90R\x92\x91PPV[a\x0E\x91`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x10\rW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[P\x15\x15\x95\x94PPPPPV[`\0\x80a\x10W`\0\x80Q` a N\x839\x81Q\x91R\x85\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x85\x88\t`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[`\0\x80Q` a N\x839\x81Q\x91R\x80\x86\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x86\x8A\t\x08\x91P\x91P\x94P\x94\x92PPPV[`\0\x80a\x10\xA6\x86\x85`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[a\x10\xBF\x86\x85`\0\x80Q` a N\x839\x81Q\x91Ra\x16\x08V[\x91P\x91P\x94P\x94\x92PPPV[`\0\x80`\0\x80`\0\x80a\x10\xE1\x8C\x8C`\x03a\x12;V[\x90\x96P\x94Pa\x10\xF2\x86\x86\x8E\x8Ea\x10\x19V[\x90\x96P\x94Pa\x11\x03\x8A\x8A\x8A\x8Aa\x10\x19V[\x90\x98P\x96Pa\x11\x14\x8C\x8C\x8C\x8Ca\x10\x19V[\x90\x94P\x92Pa\x11%\x84\x84\x8A\x8Aa\x10\x19V[\x90\x94P\x92Pa\x116\x86\x86\x81\x81a\x10\x19V[\x90\x9CP\x9APa\x11G\x84\x84`\x08a\x12;V[\x90\x92P\x90Pa\x11X\x8C\x8C\x84\x84a\x10\x8AV[\x90\x9CP\x9APa\x11i\x88\x88\x81\x81a\x10\x19V[\x90\x92P\x90Pa\x11z\x84\x84`\x04a\x12;V[\x90\x94P\x92Pa\x11\x8B\x84\x84\x8E\x8Ea\x10\x8AV[\x90\x94P\x92Pa\x11\x9C\x84\x84\x88\x88a\x10\x19V[\x90\x94P\x92Pa\x11\xAD\x8A\x8A`\x08a\x12;V[\x90\x96P\x94Pa\x11\xBE\x86\x86\x8C\x8Ca\x10\x19V[\x90\x96P\x94Pa\x11\xCF\x86\x86\x84\x84a\x10\x19V[\x90\x96P\x94Pa\x11\xE0\x84\x84\x88\x88a\x10\x8AV[\x90\x94P\x92Pa\x11\xF1\x8C\x8C`\x02a\x12;V[\x90\x96P\x94Pa\x12\x02\x86\x86\x8A\x8Aa\x10\x19V[\x90\x96P\x94Pa\x12\x13\x88\x88\x84\x84a\x10\x19V[\x90\x92P\x90Pa\x12$\x82\x82`\x08a\x12;V[\x80\x92P\x81\x93PPP\x96P\x96P\x96P\x96P\x96P\x96\x90PV[`\0\x80`\0\x80Q` a N\x839\x81Q\x91R\x83\x86\t`\0\x80Q` a N\x839\x81Q\x91R\x84\x86\t\x91P\x91P\x93P\x93\x91PPV[`\0\x80\x80a\x12\xAF`\0\x80Q` a N\x839\x81Q\x91R\x80\x87\x88\t`\0\x80Q` a N\x839\x81Q\x91R\x87\x88\t\x08`\0\x80Q` a N\x839\x81Q\x91Ra\x16,V[\x90P`\0\x80Q` a N\x839\x81Q\x91R\x81\x86\t`\0\x80Q` a N\x839\x81Q\x91R\x82\x86\ta\x12\xED\x90`\0\x80Q` a N\x839\x81Q\x91Ra\x1EDV[\x92P\x92PP\x92P\x92\x90PV[`\0\x80a\x13\x05\x83a\x16}V[\x80Q\x90\x91P`0\x81\x14a\x13\x1AWa\x13\x1Aa\x1D\xA9V[`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x135Wa\x135a\x1APV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x13_W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x13\xD0W\x83`\x01a\x13z\x83\x86a\x1EDV[a\x13\x84\x91\x90a\x1EDV[\x81Q\x81\x10a\x13\x94Wa\x13\x94a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x13\xB1Wa\x13\xB1a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x13eV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x14bW\x83\x81a\x14\x0E\x85\x88a\x1EDV[a\x14\x18\x91\x90a\x1D\x90V[\x81Q\x81\x10a\x14(Wa\x14(a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x14HWa\x14Ha\x1DKV[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x13\xFAV[P`\0a\x14n\x82a\x19\xD1V[\x90Pa\x01\0`\0\x80Q` a N\x839\x81Q\x91R`\0a\x14\x8E\x86\x89a\x1EDV[\x90P`\0[\x81\x81\x10\x15a\x14\xFDW`\0\x88`\x01a\x14\xAA\x84\x86a\x1EDV[a\x14\xB4\x91\x90a\x1EDV[\x81Q\x81\x10a\x14\xC4Wa\x14\xC4a\x1DKV[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x14\xDCWa\x14\xDCa\x1E\x0CV[\x85\x87\t\x95P\x83\x80a\x14\xEFWa\x14\xEFa\x1E\x0CV[\x81\x87\x08\x95PP`\x01\x01a\x14\x93V[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0\x80\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P`\0`\0\x80Q` a N\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x86``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` `\0`\xC0\x83`\x05Z\xFA\x93PP`\0Q\x93P\x82a\x15\xCFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\x01\x90V[\x80`\x01\x85\x90\x1B\x11\x15a\x15\xE8Wa\x15\xE5\x84\x82a\x1EDV[\x93P[\x80\x80a\x15\xF6Wa\x15\xF6a\x1E\x0CV[\x84\x85\t\x91P\x85\x82\x14\x94PPPP\x91P\x91V[`\0\x81\x80a\x16\x18Wa\x16\x18a\x1E\x0CV[a\x16\"\x84\x84a\x1EDV[\x85\x08\x94\x93PPPPV[`\0\x80`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x84\x03`\x80\x82\x01R\x83`\xA0\x82\x01R` \x81`\xC0\x83`\x05a\x07\xD0Z\x03\xFA\x90Q\x92P\x90P\x80a\x16vW`\0\x80\xFD[P\x92\x91PPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x16\xBE\x92\x91\x90a\x1D\xEFV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x16\xE5\x92\x91\x90a\x1EWV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x17\x07\x91\x90a\x1E\x83V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x171\x90\x83\x90\x83\x90` \x01a\x1E\x9DV[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x17\xA2Wa\x17\xA2a\x1APV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x17\xCCW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x17\xE4\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\x18OW\x81\x81\x81Q\x81\x10a\x18\x13Wa\x18\x13a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x180Wa\x180a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x17\xF8V[P`\0\x84`@Q` \x01a\x18e\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x18\xF9W`\0\x83\x82\x81Q\x81\x10a\x18\xA0Wa\x18\xA0a\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x18\xBDWa\x18\xBDa\x1DKV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x18\xDE\x92\x91\x90a\x1E\xC2V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x18\x84V[P\x86\x88\x87`@Q` \x01a\x19\x0F\x93\x92\x91\x90a\x1E\xE7V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x19=\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P`\0[a\x19^\x8A`\xFF\x8D\x16a\x1EDV[\x81\x10\x15a\x19\xC0W\x82\x81\x81Q\x81\x10a\x19wWa\x19wa\x1DKV[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x19\x91\x83\x8Da\x1D\x90V[\x81Q\x81\x10a\x19\xA1Wa\x19\xA1a\x1DKV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x19QV[P\x91\x9B\x9APPPPPPPPPPPV[`\0\x80\x80[\x83Q\x81\x10\x15a\x16vW\x83\x81\x81Q\x81\x10a\x19\xF1Wa\x19\xF1a\x1DKV[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x1A\t\x91\x90a\x1F\x1BV[a\x1A\x14\x90`\x02a \x16V[a\x1A\x1E\x91\x90a\x1F\x1BV[a\x1A(\x90\x83a\x1D\x90V[\x91P`\x01\x01a\x19\xD6V[`@Q\x80`\xC0\x01`@R\x80`\x06\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1A\x8FWa\x1A\x8Fa\x1APV[`@R\x91\x90PV[`\0`@\x82\x84\x03\x12\x15a\x1A\xA9W`\0\x80\xFD[`@Q`@\x81\x01\x81\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17\x15a\x1A\xCCWa\x1A\xCCa\x1APV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[`\0\x82`\x1F\x83\x01\x12a\x1A\xF7W`\0\x80\xFD[\x815` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x1B\x13Wa\x1B\x13a\x1APV[\x81`\x05\x1Ba\x1B\"\x82\x82\x01a\x1AfV[\x92\x83R\x84\x81\x01\x82\x01\x92\x82\x81\x01\x90\x87\x85\x11\x15a\x1B, - min_stake_threshold: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash( - [3, 64, 150, 30], - (message, sig, bitmap, min_stake_threshold), - ) - .expect("method not found (this should never happen)") - } ///Gets the contract's `NewBlocks` event pub fn new_blocks_filter( &self, @@ -517,21 +449,6 @@ pub mod hot_shot { Self::new(contract.address(), contract.client()) } } - ///Custom Error type `BLSSigVerificationFailed` with signature `BLSSigVerificationFailed()` and selector `0x0ced3e50` - #[derive( - Clone, - ::ethers::contract::EthError, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[etherror(name = "BLSSigVerificationFailed", abi = "BLSSigVerificationFailed()")] - pub struct BLSSigVerificationFailed; ///Custom Error type `IncorrectBlockNumber` with signature `IncorrectBlockNumber(uint256,uint256)` and selector `0x34e423ff` #[derive( Clone, @@ -629,7 +546,6 @@ pub mod hot_shot { Hash, )] pub enum HotShotErrors { - BLSSigVerificationFailed(BLSSigVerificationFailed), IncorrectBlockNumber(IncorrectBlockNumber), InvalidQC(InvalidQC), NoKeySelected(NoKeySelected), @@ -649,11 +565,6 @@ pub mod hot_shot { { return Ok(Self::RevertString(decoded)); } - if let Ok(decoded) = - ::decode(data) - { - return Ok(Self::BLSSigVerificationFailed(decoded)); - } if let Ok(decoded) = ::decode(data) { @@ -677,9 +588,6 @@ pub mod hot_shot { impl ::ethers::core::abi::AbiEncode for HotShotErrors { fn encode(self) -> ::std::vec::Vec { match self { - Self::BLSSigVerificationFailed(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } Self::IncorrectBlockNumber(element) => { ::ethers::core::abi::AbiEncode::encode(element) } @@ -695,11 +603,6 @@ pub mod hot_shot { fn valid_selector(selector: [u8; 4]) -> bool { match selector { [0x08, 0xc3, 0x79, 0xa0] => true, - _ if selector - == ::selector() => - { - true - } _ if selector == ::selector() => { @@ -722,7 +625,6 @@ pub mod hot_shot { impl ::core::fmt::Display for HotShotErrors { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { match self { - Self::BLSSigVerificationFailed(element) => ::core::fmt::Display::fmt(element, f), Self::IncorrectBlockNumber(element) => ::core::fmt::Display::fmt(element, f), Self::InvalidQC(element) => ::core::fmt::Display::fmt(element, f), Self::NoKeySelected(element) => ::core::fmt::Display::fmt(element, f), @@ -737,11 +639,6 @@ pub mod hot_shot { Self::RevertString(value) } } - impl ::core::convert::From for HotShotErrors { - fn from(value: BLSSigVerificationFailed) -> Self { - Self::BLSSigVerificationFailed(value) - } - } impl ::core::convert::From for HotShotErrors { fn from(value: IncorrectBlockNumber) -> Self { Self::IncorrectBlockNumber(value) @@ -956,29 +853,6 @@ pub mod hot_shot { pub struct NewBlocksCall { pub qcs: ::std::vec::Vec, } - ///Container type for all input parameters for the `verifyAggSig` function with signature `verifyAggSig(bytes,(uint256,uint256),bool[],uint256)` and selector `0x0340961e` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - serde::Serialize, - serde::Deserialize, - Default, - Debug, - PartialEq, - Eq, - Hash, - )] - #[ethcall( - name = "verifyAggSig", - abi = "verifyAggSig(bytes,(uint256,uint256),bool[],uint256)" - )] - pub struct VerifyAggSigCall { - pub message: ::ethers::core::types::Bytes, - pub sig: G1Point, - pub bitmap: ::std::vec::Vec, - pub min_stake_threshold: ::ethers::core::types::U256, - } ///Container type for all of the contract's call #[derive( Clone, @@ -997,7 +871,6 @@ pub mod hot_shot { Commitments(CommitmentsCall), GetStakingKey(GetStakingKeyCall), NewBlocks(NewBlocksCall), - VerifyAggSig(VerifyAggSigCall), } impl ::ethers::core::abi::AbiDecode for HotShotCalls { fn decode( @@ -1025,10 +898,6 @@ pub mod hot_shot { if let Ok(decoded) = ::decode(data) { return Ok(Self::NewBlocks(decoded)); } - if let Ok(decoded) = ::decode(data) - { - return Ok(Self::VerifyAggSig(decoded)); - } Err(::ethers::core::abi::Error::InvalidData.into()) } } @@ -1041,7 +910,6 @@ pub mod hot_shot { Self::Commitments(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::GetStakingKey(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::NewBlocks(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::VerifyAggSig(element) => ::ethers::core::abi::AbiEncode::encode(element), } } } @@ -1054,7 +922,6 @@ pub mod hot_shot { Self::Commitments(element) => ::core::fmt::Display::fmt(element, f), Self::GetStakingKey(element) => ::core::fmt::Display::fmt(element, f), Self::NewBlocks(element) => ::core::fmt::Display::fmt(element, f), - Self::VerifyAggSig(element) => ::core::fmt::Display::fmt(element, f), } } } @@ -1088,11 +955,6 @@ pub mod hot_shot { Self::NewBlocks(value) } } - impl ::core::convert::From for HotShotCalls { - fn from(value: VerifyAggSigCall) -> Self { - Self::VerifyAggSig(value) - } - } ///Container type for all return fields from the `MAX_BLOCKS` function with signature `MAX_BLOCKS()` and selector `0x26833dcc` #[derive( Clone, diff --git a/contract-bindings/src/lib.rs b/contract-bindings/src/lib.rs index 85c17a5f61..36184706a9 100644 --- a/contract-bindings/src/lib.rs +++ b/contract-bindings/src/lib.rs @@ -4,12 +4,9 @@ //! Do not manually edit these files. //! These files may be overwritten by the codegen system at any time. pub mod abstract_stake_table; -pub mod bls_helper; pub mod bls_sig; pub mod bn254; -pub mod bn256g2; pub mod bytes_lib; -pub mod deploy_hot_shot; pub mod ed_on_bn254; pub mod erc20; pub mod example_token; diff --git a/contract-bindings/src/light_client.rs b/contract-bindings/src/light_client.rs index 15fa8655e6..b6224b166d 100644 --- a/contract-bindings/src/light_client.rs +++ b/contract-bindings/src/light_client.rs @@ -98,35 +98,35 @@ pub mod light_client { name: ::std::borrow::ToOwned::to_owned("blockCommRoot"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("feeLedgerComm"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("stakeTableBlsKeyComm",), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("stakeTableSchnorrKeyComm",), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("stakeTableAmountComm",), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { @@ -181,35 +181,35 @@ pub mod light_client { name: ::std::borrow::ToOwned::to_owned("blockCommRoot"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("feeLedgerComm"), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("stakeTableBlsKeyComm",), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("stakeTableSchnorrKeyComm",), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { name: ::std::borrow::ToOwned::to_owned("stakeTableAmountComm",), kind: ::ethers::core::abi::ethabi::ParamType::Uint(256usize,), internal_type: ::core::option::Option::Some( - ::std::borrow::ToOwned::to_owned("uint256"), + ::std::borrow::ToOwned::to_owned("BN254.ScalarField"), ), }, ::ethers::core::abi::ethabi::Param { diff --git a/contract-bindings/src/plonk_verifier.rs b/contract-bindings/src/plonk_verifier.rs index 6a5862ff8c..6bc680163d 100644 --- a/contract-bindings/src/plonk_verifier.rs +++ b/contract-bindings/src/plonk_verifier.rs @@ -642,12 +642,12 @@ pub mod plonk_verifier { pub static PLONKVERIFIER_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"a;\x01a\0:`\x0B\x82\x82\x829\x80Q`\0\x1A`s\x14a\0-WcNH{q`\xE0\x1B`\0R`\0`\x04R`$`\0\xFD[0`\0R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\0@W`\x005`\xE0\x1C\x80c6\xD8\xD6\xEB\x14a\0EW\x80cl\xC7\xF7/\x14a\0lW[`\0\x80\xFD[a\0Xa\0S6`\x04a8\x1CV[a\0\x7FV[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[a\0Xa\0z6`\x04a90V[a\x02bV[`\0\x82Q\x85Q\x14\x15\x80a\0\x94WP\x82Q\x84Q\x14\x15[\x80a\0\xA1WP\x82Q\x82Q\x14\x15[\x80a\0\xABWP\x82Q\x15[\x15a\0\xC9W`@Qc\xFD\x9A-\x1B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\0\xE4Wa\0\xE4a1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x01\x1DW\x81` \x01[a\x01\na0\xB9V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x01\x02W\x90P[P\x90P`\0[\x84Q\x81\x10\x15a\x02LWa\x01N\x85\x82\x81Q\x81\x10a\x01AWa\x01Aa9\xAEV[` \x02` \x01\x01Qa\x02\xFEV[`\0[\x86\x82\x81Q\x81\x10a\x01cWa\x01ca9\xAEV[` \x02` \x01\x01QQ\x81\x10\x15a\x01\xB6Wa\x01\xAE\x87\x83\x81Q\x81\x10a\x01\x88Wa\x01\x88a9\xAEV[` \x02` \x01\x01Q\x82\x81Q\x81\x10a\x01\xA1Wa\x01\xA1a9\xAEV[` \x02` \x01\x01Qa\x049V[`\x01\x01a\x01QV[Pa\x02'\x87\x82\x81Q\x81\x10a\x01\xCCWa\x01\xCCa9\xAEV[` \x02` \x01\x01Q\x87\x83\x81Q\x81\x10a\x01\xE6Wa\x01\xE6a9\xAEV[` \x02` \x01\x01Q\x87\x84\x81Q\x81\x10a\x02\0Wa\x02\0a9\xAEV[` \x02` \x01\x01Q\x87\x85\x81Q\x81\x10a\x02\x1AWa\x02\x1Aa9\xAEV[` \x02` \x01\x01Qa\x04\xA0V[\x82\x82\x81Q\x81\x10a\x029Wa\x029a9\xAEV[` \x90\x81\x02\x91\x90\x91\x01\x01R`\x01\x01a\x01#V[Pa\x02V\x81a\x05\xF8V[\x91PP[\x94\x93PPPPV[`\0a\x02m\x83a\x02\xFEV[`\0[\x84Q\x81\x10\x15a\x02\x96Wa\x02\x8E\x85\x82\x81Q\x81\x10a\x01\xA1Wa\x01\xA1a9\xAEV[`\x01\x01a\x02pV[P`@\x80Q`\x01\x80\x82R\x81\x83\x01\x90\x92R`\0\x91\x81` \x01[a\x02\xB6a0\xB9V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x02\xAEW\x90PP\x90Pa\x02\xD7\x86\x86\x86\x86a\x04\xA0V[\x81`\0\x81Q\x81\x10a\x02\xEAWa\x02\xEAa9\xAEV[` \x02` \x01\x01\x81\x90RPa\x02V\x81a\x05\xF8V[\x80Qa\x03\t\x90a\rrV[a\x03\x16\x81` \x01Qa\rrV[a\x03#\x81`@\x01Qa\rrV[a\x030\x81``\x01Qa\rrV[a\x03=\x81`\x80\x01Qa\rrV[a\x03J\x81`\xA0\x01Qa\rrV[a\x03W\x81`\xC0\x01Qa\rrV[a\x03d\x81`\xE0\x01Qa\rrV[a\x03r\x81a\x01\0\x01Qa\rrV[a\x03\x80\x81a\x01 \x01Qa\rrV[a\x03\x8E\x81a\x01@\x01Qa\rrV[a\x03\x9C\x81a\x01`\x01Qa\rrV[a\x03\xAA\x81a\x01\x80\x01Qa\rrV[a\x03\xB8\x81a\x01\xA0\x01Qa\x049V[a\x03\xC6\x81a\x01\xC0\x01Qa\x049V[a\x03\xD4\x81a\x01\xE0\x01Qa\x049V[a\x03\xE2\x81a\x02\0\x01Qa\x049V[a\x03\xF0\x81a\x02 \x01Qa\x049V[a\x03\xFE\x81a\x02@\x01Qa\x049V[a\x04\x0C\x81a\x02`\x01Qa\x049V[a\x04\x1A\x81a\x02\x80\x01Qa\x049V[a\x04(\x81a\x02\xA0\x01Qa\x049V[a\x046\x81a\x02\xC0\x01Qa\x049V[PV[`\0\x80Q` a:\xD5\x839\x81Q\x91R\x81\x10\x80a\x04\x9CW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7FBn254: invalid scalar field\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[PPV[a\x04\xA8a0\xB9V[\x84` \x01Q\x84Q\x14a\x04\xCDW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x04\xDB\x86\x86\x86\x86a\x0E\x01V[\x90P`\0a\x04\xEC\x87`\0\x01Qa\x0F\xCFV[\x90P`\0a\x04\xFF\x82\x84`\xA0\x01Q\x89a\x12\xFEV[`@\x80Q`\x1E\x80\x82Ra\x03\xE0\x82\x01\x90\x92R\x91\x92P`\0\x91\x90` \x82\x01a\x03\xC0\x806\x837PP`@\x80Q`\x1E\x80\x82Ra\x03\xE0\x82\x01\x90\x92R\x92\x93P`\0\x92\x91P` \x82\x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05BW\x90PP\x90P`\0a\x05{\x8B\x85\x8B\x89\x87\x87a\x13^V[`\xA0\x87\x01Q``\x87\x01Q\x91\x92P\x90`\0\x80Q` a:\xD5\x839\x81Q\x91R`\0\x81\x83\x85\t`@\x80Qa\x01\0\x81\x01\x82R`\xE0\x9C\x8D\x01Q\x81R` \x81\x01\x96\x90\x96R\x85\x01RPPP``\x81\x01\x91\x90\x91R`\x80\x81\x01\x92\x90\x92R`\xA0\x82\x01Ra\x01`\x87\x01Q`\xC0\x82\x01Ra\x01\x80\x90\x96\x01Q\x92\x86\x01\x92\x90\x92RP\x92\x95\x94PPPPPV[\x80Q`\0\x90`\0\x80Q` a:\xD5\x839\x81Q\x91R`\x01\x80\x83\x11\x15a\x06oWa\x06\x1Ea13V[`\0[\x84\x81\x10\x15a\x06aWa\x06Y\x87\x82\x81Q\x81\x10a\x06>Wa\x06>a9\xAEV[` \x02` \x01\x01Q`\0\x01Q\x83a\x13\x87\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[`\x01\x01a\x06!V[Pa\x06k\x81a\x13\x91V[\x91PP[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0a\x06\xA4\x86`\x02a9\xDAV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x06\xBBWa\x06\xBBa1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x06\xE4W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0a\x06\xF4\x87`\x02a9\xDAV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x07\x0BWa\x07\x0Ba1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x07PW\x81` \x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x07)W\x90P[P\x90P`\x01`\0[\x88\x81\x10\x15a\x08\x8FW\x81\x84a\x07m\x83`\x02a9\xDAV[\x81Q\x81\x10a\x07}Wa\x07}a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x8A\x81\x81Q\x81\x10a\x07\x9BWa\x07\x9Ba9\xAEV[` \x02` \x01\x01Q`\xC0\x01Q\x83\x82`\x02a\x07\xB5\x91\x90a9\xDAV[\x81Q\x81\x10a\x07\xC5Wa\x07\xC5a9\xAEV[` \x02` \x01\x01\x81\x90RP`\0\x80\x8C\x83\x81Q\x81\x10a\x07\xE5Wa\x07\xE5a9\xAEV[` \x02` \x01\x01Q`\0\x01Q\x90P\x89\x81\x85\t\x91P\x81\x86a\x08\x06\x85`\x02a9\xDAV[a\x08\x11\x90`\x01a9\xF1V[\x81Q\x81\x10a\x08!Wa\x08!a9\xAEV[` \x02` \x01\x01\x81\x81RPPPP\x8A\x81\x81Q\x81\x10a\x08AWa\x08Aa9\xAEV[` \x02` \x01\x01Q`\xE0\x01Q\x83\x82`\x02a\x08[\x91\x90a9\xDAV[a\x08f\x90`\x01a9\xF1V[\x81Q\x81\x10a\x08vWa\x08va9\xAEV[` \x02` \x01\x01\x81\x90RP\x87\x87\x83\t\x91P`\x01\x01a\x07XV[Pa\x08\x9A\x82\x84a\x14\xBEV[\x94PPPP``\x80`\0\x89`\0\x81Q\x81\x10a\x08\xB7Wa\x08\xB7a9\xAEV[` \x02` \x01\x01Q`\x80\x01QQ\x90P`\0\x8AQ\x82`\x02a\x08\xD7\x91\x90a9\xF1V[a\x08\xE1\x91\x90a9\xDAV[a\x08\xEC\x90`\x01a9\xF1V[\x90P\x80`\x01`\x01`@\x1B\x03\x81\x11\x15a\t\x06Wa\t\x06a1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\t/W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x93P\x80`\x01`\x01`@\x1B\x03\x81\x11\x15a\tJWa\tJa1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\t\x8FW\x81` \x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\thW\x90P[P\x92P`\0\x91P\x81\x90P`\x01\x81[\x8CQ\x81\x10\x15a\x0C$W`\0[\x8D`\0\x81Q\x81\x10a\t\xBCWa\t\xBCa9\xAEV[` \x02` \x01\x01Q`\x80\x01QQ\x81\x10\x15a\n\x9DW`\0\x8E\x83\x81Q\x81\x10a\t\xE4Wa\t\xE4a9\xAEV[` \x02` \x01\x01Q`\x80\x01Q\x82\x81Q\x81\x10a\n\x01Wa\n\x01a9\xAEV[` \x02` \x01\x01Q\x90P`\0\x8C\x82\x86\t\x90P\x80\x89\x87\x81Q\x81\x10a\n&Wa\n&a9\xAEV[` \x02` \x01\x01\x81\x81RPPPP\x8D\x82\x81Q\x81\x10a\nFWa\nFa9\xAEV[` \x02` \x01\x01Q`\xA0\x01Q\x81\x81Q\x81\x10a\ncWa\nca9\xAEV[` \x02` \x01\x01Q\x86\x85\x81Q\x81\x10a\n}Wa\n}a9\xAEV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\n\x93`\x01\x85a9\xF1V[\x93P`\x01\x01a\t\xA9V[P`\0\x8D\x82\x81Q\x81\x10a\n\xB2Wa\n\xB2a9\xAEV[` \x02` \x01\x01Q` \x01Q\x90P`\0\x8B\x82\x85\t\x90P\x80\x88\x86\x81Q\x81\x10a\n\xDBWa\n\xDBa9\xAEV[` \x02` \x01\x01\x81\x81RPPPP\x8C\x81\x81Q\x81\x10a\n\xFBWa\n\xFBa9\xAEV[` \x02` \x01\x01Q`\xC0\x01Q\x85\x84\x81Q\x81\x10a\x0B\x19Wa\x0B\x19a9\xAEV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\x0B/`\x01\x84a9\xF1V[\x92P`\0\x8D\x82\x81Q\x81\x10a\x0BEWa\x0BEa9\xAEV[` \x02` \x01\x01Q`\0\x01Q\x90P`\0\x8E\x83\x81Q\x81\x10a\x0BgWa\x0Bga9\xAEV[` \x02` \x01\x01Q`@\x01Q\x90P`\0\x8C\x8D\x83\x85\t\x86\t\x90P\x80\x89\x87\x81Q\x81\x10a\x0B\x93Wa\x0B\x93a9\xAEV[` \x02` \x01\x01\x81\x81RPPPPP\x8C\x81\x81Q\x81\x10a\x0B\xB4Wa\x0B\xB4a9\xAEV[` \x02` \x01\x01Q`\xE0\x01Q\x85\x84\x81Q\x81\x10a\x0B\xD2Wa\x0B\xD2a9\xAEV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\x0B\xE8`\x01\x84a9\xF1V[\x92P`\0\x8D\x82\x81Q\x81\x10a\x0B\xFEWa\x0B\xFEa9\xAEV[` \x02` \x01\x01Q``\x01Q\x90P\x8A\x8B\x82\x85\t\x86\x08\x94P\x8A\x8A\x84\t\x92PP`\x01\x01a\t\x9DV[Pa\x0C.\x83a\x15\xB8V[\x85\x83\x81Q\x81\x10a\x0C@Wa\x0C@a9\xAEV[` \x02` \x01\x01\x81\x81RPPa\x0Cx`@\x80Q\x80\x82\x01\x82R`\0\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x84\x83\x81Q\x81\x10a\x0C\x8AWa\x0C\x8Aa9\xAEV[` \x02` \x01\x01\x81\x90RPa\x0C\xA7a\x0C\xA2\x85\x87a\x14\xBEV[a\x15\xF0V[\x95PPPPPP`\0`@Q\x80`\x80\x01`@R\x80\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81RP\x90Pa\rf\x83\x82\x84a\raa\x16kV[a\x17\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85``\x82\x01R\x7F(\x1C\x03o\x06\xE7\xE9\xE9\x11h\rBU\x8En\x8C\xF4\tv\xB0gwq\xC0\xF8\xEE\xE94d\x1C\x84\x10`\x80\x82\x01R\x90V[\x81a\x80\0\x03a\x11)WP`@\x80Q`\xA0\x81\x01\x82R`\x0F\x81R` \x81\x01\x92\x90\x92R\x7F0c\xED\xAADK\xDD\xC6w\xFC\xD5\x15\xF6\x14UZwy\x97\xE0\xA9(}\x1Eb\xBFm\xD0\x04\xD8 \x01\x90\x82\x01R\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB``\x82\x01R\x7F\x05\xD37f\xE4Y\x0B7\"p\x1Bo/\xA4=\r\xC3\xF0(BM8Nh\xC9*t/\xB2\xDB\xC0\xB4`\x80\x82\x01R\x90V[\x81b\x01\0\0\x03a\x11\xBDWP`@\x80Q`\xA0\x81\x01\x82R`\x10\x81R` \x81\x01\x92\x90\x92R\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x90\x82\x01R~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7``\x82\x01R\x7F\x0B]V\xB7\x7F\xE7\x04\xE8\xE9#8\xC0\x08/7\xE0\x91\x12d\x14\xC80\xE4\xC6\x92-Z\xC8\x02\xD8B\xD4`\x80\x82\x01R\x90V[\x81b\x02\0\0\x03a\x12RWP`@\x80Q`\xA0\x81\x01\x82R`\x11\x81R` \x81\x01\x92\x90\x92R\x7F0d6@\xB9\xF8/\x90\xE8;i\x8E^\xA6\x17\x9C|\x05T.\x85\x953\xB4\x8B\x99S\xA2\xF56\x08\x01\x90\x82\x01R\x7F\x1B\xF8-\xEB\xA7\xD7I\x02\xC3p\x8C\xC6\xE7\x0Ea\xF3\x05\x12\xEC\xA9VU!\x0E'nXX\xCE\x8FX\xE5``\x82\x01R\x7F$L\xF0\x10\xC4<\xA8r7\xD8\xB0\x0B\xF9\xDDP\xC4\xC0\x1C\x7F\x08k\xD4\xE8\xC9 \xE7RQ\xD9o\r\"`\x80\x82\x01R\x90V[\x81` \x03a\x12\xE5WP`@\x80Q`\xA0\x81\x01\x82R`\x05\x81R` \x81\x01\x92\x90\x92R\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x90\x82\x01R\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0``\x82\x01R\x7F'$q6\x03\xBF\xBDy\n\xEA\xF3\xE7\xDF%\xD8\xE7\xEF\x8F1\x134\x90[M\x8C\x99\x98\x0C\xF2\x10\x97\x9D`\x80\x82\x01R\x90V[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x13\"`@Q\x80``\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[a\x13,\x84\x84a\x1B\x81V[\x80\x82Ra\x13<\x90\x85\x90\x85\x90a\x1B\xD5V[` \x82\x01R\x80Qa\x13R\x90\x85\x90\x84\x90\x86\x90a\x1C;V[`@\x82\x01R\x93\x92PPPV[`\0\x80a\x13l\x85\x87\x89a\x1D\x91V[\x90Pa\x13|\x88\x86\x89\x89\x88\x88a\x1E}V[a\rf\x81\x87\x86a!\x89V[a\x04\x9C\x82\x82a!\xD9V[` \x81\x81\x01Q\x80Q\x90\x82\x01Q\x83Q`@Q`\0\x94\x85\x94a\x13\xB9\x94\x90\x93\x90\x92\x90\x91\x86\x91\x01a:4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\0\x83` \x01Q`\0`\x02\x81\x10a\x13\xEAWa\x13\xEAa9\xAEV[` \x02\x01Q\x84` \x01Q`\x01`\x02\x81\x10a\x14\x06Wa\x14\x06a9\xAEV[` \x02\x01Q\x85`\0\x01Q`\x01`@Q` \x01a\x14%\x94\x93\x92\x91\x90a:4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x81\x84` \x01Q`\0`\x02\x81\x10a\x14UWa\x14Ua9\xAEV[` \x02\x01\x81\x81RPP\x80\x84` \x01Q`\x01`\x02\x81\x10a\x14vWa\x14va9\xAEV[` \x02\x01\x81\x81RPPa\x02Za\x14\xB9\x83\x83`@Q` \x01a\x14\xA1\x92\x91\x90\x91\x82R` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`0a\"\x0CV[a#\x19V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x82Q\x82Q\x14a\x15#W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FMSM error: length does not match`D\x82\x01R`d\x01a\x04\x93V[a\x15a\x83`\0\x81Q\x81\x10a\x159Wa\x159a9\xAEV[` \x02` \x01\x01Q\x83`\0\x81Q\x81\x10a\x15TWa\x15Ta9\xAEV[` \x02` \x01\x01Qa#\x8FV[\x90P`\x01[\x82Q\x81\x10\x15a\x15\xB1Wa\x15\xA7\x82a\x15\xA2\x86\x84\x81Q\x81\x10a\x15\x88Wa\x15\x88a9\xAEV[` \x02` \x01\x01Q\x86\x85\x81Q\x81\x10a\x15TWa\x15Ta9\xAEV[a$3V[\x91P`\x01\x01a\x15fV[P\x92\x91PPV[`\0a\x15\xD2`\0\x80Q` a:\xD5\x839\x81Q\x91R\x83a:jV[a\x15\xEA\x90`\0\x80Q` a:\xD5\x839\x81Q\x91Ra:\x8CV[\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x16\x18WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a:\xB5\x839\x81Q\x91R\x84` \x01Qa\x16K\x91\x90a:jV[a\x16c\x90`\0\x80Q` a:\xB5\x839\x81Q\x91Ra:\x8CV[\x90R\x92\x91PPV[a\x16\x96`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x18\x12W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x04\x93V[P\x15\x15\x95\x94PPPPPV[\x81Q`@Qa\x182\x91\x90\x83\x90` \x01a:\x9FV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x90\x91RPV[`\xFEa\x18\x89\x84a\x18\x84a\x18Z\x84a$\xDAV[`@Q` \x01a\x18l\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`\x04a\"\x0CV[a\x18\x1EV[a\x18\xC7\x84a\x18\x84a\x18\x9D\x86`\0\x01Qa$\xDAV[`@Q` \x01a\x18\xAF\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`\x08a\"\x0CV[a\x18\xDB\x84a\x18\x84a\x18\x9D\x86` \x01Qa$\xDAV[a\x18\xE6\x84`\x01a!\xD9V[a\x19\x10\x84\x7F/\x8D\xD1\xF1\xA7XV[\x90P`\0\x87`\x01`\x01`@\x1B\x03\x81\x11\x15a\x1C\x94Wa\x1C\x94a1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1C\xBDW\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P\x88\x8B\x85\t\x93P`\x01\x92P`\0[\x88\x81\x10\x15a\x1D\x02W` \x81\x02` \x84\x01\x01Q\x95P\x89\x8D\x87\x8C\x03\x08\x96P\x89\x87\x85\t` \x82\x81\x02\x84\x01\x01\x88\x90R\x93P`\x01\x01a\x1C\xCDV[Pa\x1D\x0C\x83a&\x98V[\x92P`\0[\x88\x81\x10\x15a\x1D\x7FW` \x81\x02` \x84\x01\x01Q\x95P\x89\x86\x86\t\x97P\x89\x84\x89\t\x97P`\0[\x89\x81\x10\x15a\x1D^W\x80\x82\x14a\x1DVW` \x81\x02` \x84\x01\x01Q\x97P\x8A\x88\x8A\t\x98P[`\x01\x01a\x1D4V[P` \x81\x02` \x8F\x01\x01Q\x95P\x89\x86\x89\t\x97P\x89\x88\x8C\x08\x9AP`\x01\x01a\x1D\x11V[PPPPPPPPPP\x94\x93PPPPV[`\0\x80`\0\x80Q` a:\xD5\x839\x81Q\x91R\x90P`\0\x83` \x01Q\x90P`\0\x84`@\x01Q\x90P`\0`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x85\x85\x01\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x85\x85\x01\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x85\x85\x01\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x85\x85\x01\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[a\x1E\x8B\x86\x86\x86\x86\x85\x87a(\x03V[`\xC0\x85\x01Q\x82Q`\0\x80Q` a:\xD5\x839\x81Q\x91R\x91\x90\x81\x90\x81\x90\x86\x90`\x14\x90\x81\x10a\x1E\xBAWa\x1E\xBAa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85`\0\x01Q\x84`\x14\x81Q\x81\x10a\x1E\xDEWa\x1E\xDEa9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x15\x81Q\x81\x10a\x1F\x03Wa\x1F\x03a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85` \x01Q\x84`\x15\x81Q\x81\x10a\x1F'Wa\x1F'a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x16\x81Q\x81\x10a\x1FLWa\x1FLa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85`@\x01Q\x84`\x16\x81Q\x81\x10a\x1FpWa\x1Fpa9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x17\x81Q\x81\x10a\x1F\x95Wa\x1F\x95a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85``\x01Q\x84`\x17\x81Q\x81\x10a\x1F\xB9Wa\x1F\xB9a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x18\x81Q\x81\x10a\x1F\xDEWa\x1F\xDEa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85`\x80\x01Q\x84`\x18\x81Q\x81\x10a \x02Wa \x02a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x19\x81Q\x81\x10a 'Wa 'a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x88`@\x01Q\x84`\x19\x81Q\x81\x10a KWa Ka9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x1A\x81Q\x81\x10a pWa pa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x88``\x01Q\x84`\x1A\x81Q\x81\x10a \x94Wa \x94a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x1B\x81Q\x81\x10a \xB9Wa \xB9a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x88`\x80\x01Q\x84`\x1B\x81Q\x81\x10a \xDDWa \xDDa9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x1C\x81Q\x81\x10a!\x02Wa!\x02a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x88`\xA0\x01Q\x84`\x1C\x81Q\x81\x10a!&Wa!&a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x87`\xE0\x01Q\x85`\x1D\x81Q\x81\x10a!OWa!Oa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85`\xA0\x01Q\x84`\x1D\x81Q\x81\x10a!sWa!sa9\xAEV[` \x02` \x01\x01\x81\x90RPPPPPPPPPPV[`\0\x80Q` a:\xD5\x839\x81Q\x91R\x83\x81\x03\x90`\0[`\n\x81\x10\x15a!\xD0W` `\x15\x82\x01\x02\x84\x01Q` \x82\x02a\x01\xA0\x01\x86\x01Q\x83\x84\x82\x84\t\x86\x08\x94PPP`\x01\x01a!\x9FV[PP\x93\x92PPPV[a\x04\x9C\x82a!\xE6\x83a$\xDAV[`@Q` \x01a!\xF8\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x18\x1EV[``\x81a\"\x1A\x81`\x1Fa9\xF1V[\x10\x15a\"YW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0E`$\x82\x01Rmslice_overflow`\x90\x1B`D\x82\x01R`d\x01a\x04\x93V[a\"c\x82\x84a9\xF1V[\x84Q\x10\x15a\"\xA7W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x11`$\x82\x01Rpslice_outOfBounds`x\x1B`D\x82\x01R`d\x01a\x04\x93V[``\x82\x15\x80\x15a\"\xC6W`@Q\x91P`\0\x82R` \x82\x01`@Ra#\x10V[`@Q\x91P`\x1F\x84\x16\x80\x15` \x02\x81\x84\x01\x01\x85\x81\x01\x87\x83\x15` \x02\x84\x8B\x01\x01\x01[\x81\x83\x10\x15a\"\xFFW\x80Q\x83R` \x92\x83\x01\x92\x01a\"\xE7V[PP\x85\x84R`\x1F\x01`\x1F\x19\x16`@RP[P\x94\x93PPPPV[`\0\x80[\x82Q\x81\x10\x15a#\x89W`\0\x80Q` a:\xD5\x839\x81Q\x91Ra\x01\0\x83\t\x91P`\0\x80Q` a:\xD5\x839\x81Q\x91R\x83\x82`\x01\x86Qa#[\x91\x90a:\x8CV[a#e\x91\x90a:\x8CV[\x81Q\x81\x10a#uWa#ua9\xAEV[\x01` \x01Q`\xF8\x1C\x83\x08\x91P`\x01\x01a#\x1DV[P\x91\x90PV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra#\xABa1MV[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x81\x01\x83\x90R`\0``\x83`\x80\x84`\x07a\x07\xD0Z\x03\xFA\x90P\x80\x80a#\xDDW`\0\x80\xFD[P\x80a$+W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x19`$\x82\x01R\x7FBn254: scalar mul failed!\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x04\x93V[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra$Oa1kV[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x83\x01R\x83\x01Q``\x80\x83\x01\x91\x90\x91R`\0\x90\x83`\xC0\x84`\x06a\x07\xD0Z\x03\xFA\x90P\x80\x80a$\x8CW`\0\x80\xFD[P\x80a$+W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: group addition failed!\0\0\0`D\x82\x01R`d\x01a\x04\x93V[`\0\x81\x90P`\x08\x81~\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\x16\x90\x1B`\x08\x82\x7F\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\x16\x90\x1C\x17\x90P`\x10\x81}\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\x16\x90\x1B`\x10\x82\x7F\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\x16\x90\x1C\x17\x90P` \x81{\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\x16\x90\x1B` \x82\x7F\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\x16\x90\x1C\x17\x90P`@\x81w\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x1B`@\x82w\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x90\x1C\x17\x90P`\x80\x81\x90\x1B`\x80\x82\x90\x1C\x17\x90P\x91\x90PV[\x80Q` \x82\x01Q``\x91`\0\x91\x15\x90\x15\x16\x15a&V[a\x02bV[`\0\x82Q\x85Q\x14\x15\x80a\0\x94WP\x82Q\x84Q\x14\x15[\x80a\0\xA1WP\x82Q\x82Q\x14\x15[\x80a\0\xABWP\x82Q\x15[\x15a\0\xC9W`@Qc\xFD\x9A-\x1B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\0\xE4Wa\0\xE4a1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x01\x1DW\x81` \x01[a\x01\na0\xC7V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x01\x02W\x90P[P\x90P`\0[\x84Q\x81\x10\x15a\x02LWa\x01N\x85\x82\x81Q\x81\x10a\x01AWa\x01Aa9\xBCV[` \x02` \x01\x01Qa\x02\xFEV[`\0[\x86\x82\x81Q\x81\x10a\x01cWa\x01ca9\xBCV[` \x02` \x01\x01QQ\x81\x10\x15a\x01\xB6Wa\x01\xAE\x87\x83\x81Q\x81\x10a\x01\x88Wa\x01\x88a9\xBCV[` \x02` \x01\x01Q\x82\x81Q\x81\x10a\x01\xA1Wa\x01\xA1a9\xBCV[` \x02` \x01\x01Qa\x049V[`\x01\x01a\x01QV[Pa\x02'\x87\x82\x81Q\x81\x10a\x01\xCCWa\x01\xCCa9\xBCV[` \x02` \x01\x01Q\x87\x83\x81Q\x81\x10a\x01\xE6Wa\x01\xE6a9\xBCV[` \x02` \x01\x01Q\x87\x84\x81Q\x81\x10a\x02\0Wa\x02\0a9\xBCV[` \x02` \x01\x01Q\x87\x85\x81Q\x81\x10a\x02\x1AWa\x02\x1Aa9\xBCV[` \x02` \x01\x01Qa\x04\xA0V[\x82\x82\x81Q\x81\x10a\x029Wa\x029a9\xBCV[` \x90\x81\x02\x91\x90\x91\x01\x01R`\x01\x01a\x01#V[Pa\x02V\x81a\x05\xF8V[\x91PP[\x94\x93PPPPV[`\0a\x02m\x83a\x02\xFEV[`\0[\x84Q\x81\x10\x15a\x02\x96Wa\x02\x8E\x85\x82\x81Q\x81\x10a\x01\xA1Wa\x01\xA1a9\xBCV[`\x01\x01a\x02pV[P`@\x80Q`\x01\x80\x82R\x81\x83\x01\x90\x92R`\0\x91\x81` \x01[a\x02\xB6a0\xC7V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x02\xAEW\x90PP\x90Pa\x02\xD7\x86\x86\x86\x86a\x04\xA0V[\x81`\0\x81Q\x81\x10a\x02\xEAWa\x02\xEAa9\xBCV[` \x02` \x01\x01\x81\x90RPa\x02V\x81a\x05\xF8V[\x80Qa\x03\t\x90a\rrV[a\x03\x16\x81` \x01Qa\rrV[a\x03#\x81`@\x01Qa\rrV[a\x030\x81``\x01Qa\rrV[a\x03=\x81`\x80\x01Qa\rrV[a\x03J\x81`\xA0\x01Qa\rrV[a\x03W\x81`\xC0\x01Qa\rrV[a\x03d\x81`\xE0\x01Qa\rrV[a\x03r\x81a\x01\0\x01Qa\rrV[a\x03\x80\x81a\x01 \x01Qa\rrV[a\x03\x8E\x81a\x01@\x01Qa\rrV[a\x03\x9C\x81a\x01`\x01Qa\rrV[a\x03\xAA\x81a\x01\x80\x01Qa\rrV[a\x03\xB8\x81a\x01\xA0\x01Qa\x049V[a\x03\xC6\x81a\x01\xC0\x01Qa\x049V[a\x03\xD4\x81a\x01\xE0\x01Qa\x049V[a\x03\xE2\x81a\x02\0\x01Qa\x049V[a\x03\xF0\x81a\x02 \x01Qa\x049V[a\x03\xFE\x81a\x02@\x01Qa\x049V[a\x04\x0C\x81a\x02`\x01Qa\x049V[a\x04\x1A\x81a\x02\x80\x01Qa\x049V[a\x04(\x81a\x02\xA0\x01Qa\x049V[a\x046\x81a\x02\xC0\x01Qa\x049V[PV[`\0\x80Q` a:\xE3\x839\x81Q\x91R\x81\x10\x80a\x04\x9CW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7FBn254: invalid scalar field\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[PPV[a\x04\xA8a0\xC7V[\x84` \x01Q\x84Q\x14a\x04\xCDW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x04\xDB\x86\x86\x86\x86a\x0E\x0FV[\x90P`\0a\x04\xEC\x87`\0\x01Qa\x0F\xDDV[\x90P`\0a\x04\xFF\x82\x84`\xA0\x01Q\x89a\x13\x0CV[`@\x80Q`\x1E\x80\x82Ra\x03\xE0\x82\x01\x90\x92R\x91\x92P`\0\x91\x90` \x82\x01a\x03\xC0\x806\x837PP`@\x80Q`\x1E\x80\x82Ra\x03\xE0\x82\x01\x90\x92R\x92\x93P`\0\x92\x91P` \x82\x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05BW\x90PP\x90P`\0a\x05{\x8B\x85\x8B\x89\x87\x87a\x13lV[`\xA0\x87\x01Q``\x87\x01Q\x91\x92P\x90`\0\x80Q` a:\xE3\x839\x81Q\x91R`\0\x81\x83\x85\t`@\x80Qa\x01\0\x81\x01\x82R`\xE0\x9C\x8D\x01Q\x81R` \x81\x01\x96\x90\x96R\x85\x01RPPP``\x81\x01\x91\x90\x91R`\x80\x81\x01\x92\x90\x92R`\xA0\x82\x01Ra\x01`\x87\x01Q`\xC0\x82\x01Ra\x01\x80\x90\x96\x01Q\x92\x86\x01\x92\x90\x92RP\x92\x95\x94PPPPPV[\x80Q`\0\x90`\0\x80Q` a:\xE3\x839\x81Q\x91R`\x01\x80\x83\x11\x15a\x06oWa\x06\x1Ea1AV[`\0[\x84\x81\x10\x15a\x06aWa\x06Y\x87\x82\x81Q\x81\x10a\x06>Wa\x06>a9\xBCV[` \x02` \x01\x01Q`\0\x01Q\x83a\x13\x95\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[`\x01\x01a\x06!V[Pa\x06k\x81a\x13\x9FV[\x91PP[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0a\x06\xA4\x86`\x02a9\xE8V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x06\xBBWa\x06\xBBa1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x06\xE4W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0a\x06\xF4\x87`\x02a9\xE8V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x07\x0BWa\x07\x0Ba1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x07PW\x81` \x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x07)W\x90P[P\x90P`\x01`\0[\x88\x81\x10\x15a\x08\x8FW\x81\x84a\x07m\x83`\x02a9\xE8V[\x81Q\x81\x10a\x07}Wa\x07}a9\xBCV[` \x02` \x01\x01\x81\x81RPP\x8A\x81\x81Q\x81\x10a\x07\x9BWa\x07\x9Ba9\xBCV[` \x02` \x01\x01Q`\xC0\x01Q\x83\x82`\x02a\x07\xB5\x91\x90a9\xE8V[\x81Q\x81\x10a\x07\xC5Wa\x07\xC5a9\xBCV[` \x02` \x01\x01\x81\x90RP`\0\x80\x8C\x83\x81Q\x81\x10a\x07\xE5Wa\x07\xE5a9\xBCV[` \x02` \x01\x01Q`\0\x01Q\x90P\x89\x81\x85\t\x91P\x81\x86a\x08\x06\x85`\x02a9\xE8V[a\x08\x11\x90`\x01a9\xFFV[\x81Q\x81\x10a\x08!Wa\x08!a9\xBCV[` \x02` \x01\x01\x81\x81RPPPP\x8A\x81\x81Q\x81\x10a\x08AWa\x08Aa9\xBCV[` \x02` \x01\x01Q`\xE0\x01Q\x83\x82`\x02a\x08[\x91\x90a9\xE8V[a\x08f\x90`\x01a9\xFFV[\x81Q\x81\x10a\x08vWa\x08va9\xBCV[` \x02` \x01\x01\x81\x90RP\x87\x87\x83\t\x91P`\x01\x01a\x07XV[Pa\x08\x9A\x82\x84a\x14\xCCV[\x94PPPP``\x80`\0\x89`\0\x81Q\x81\x10a\x08\xB7Wa\x08\xB7a9\xBCV[` \x02` \x01\x01Q`\x80\x01QQ\x90P`\0\x8AQ\x82`\x02a\x08\xD7\x91\x90a9\xFFV[a\x08\xE1\x91\x90a9\xE8V[a\x08\xEC\x90`\x01a9\xFFV[\x90P\x80`\x01`\x01`@\x1B\x03\x81\x11\x15a\t\x06Wa\t\x06a1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\t/W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x93P\x80`\x01`\x01`@\x1B\x03\x81\x11\x15a\tJWa\tJa1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\t\x8FW\x81` \x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\thW\x90P[P\x92P`\0\x91P\x81\x90P`\x01\x81[\x8CQ\x81\x10\x15a\x0C$W`\0[\x8D`\0\x81Q\x81\x10a\t\xBCWa\t\xBCa9\xBCV[` \x02` \x01\x01Q`\x80\x01QQ\x81\x10\x15a\n\x9DW`\0\x8E\x83\x81Q\x81\x10a\t\xE4Wa\t\xE4a9\xBCV[` \x02` \x01\x01Q`\x80\x01Q\x82\x81Q\x81\x10a\n\x01Wa\n\x01a9\xBCV[` \x02` \x01\x01Q\x90P`\0\x8C\x82\x86\t\x90P\x80\x89\x87\x81Q\x81\x10a\n&Wa\n&a9\xBCV[` \x02` \x01\x01\x81\x81RPPPP\x8D\x82\x81Q\x81\x10a\nFWa\nFa9\xBCV[` \x02` \x01\x01Q`\xA0\x01Q\x81\x81Q\x81\x10a\ncWa\nca9\xBCV[` \x02` \x01\x01Q\x86\x85\x81Q\x81\x10a\n}Wa\n}a9\xBCV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\n\x93`\x01\x85a9\xFFV[\x93P`\x01\x01a\t\xA9V[P`\0\x8D\x82\x81Q\x81\x10a\n\xB2Wa\n\xB2a9\xBCV[` \x02` \x01\x01Q` \x01Q\x90P`\0\x8B\x82\x85\t\x90P\x80\x88\x86\x81Q\x81\x10a\n\xDBWa\n\xDBa9\xBCV[` \x02` \x01\x01\x81\x81RPPPP\x8C\x81\x81Q\x81\x10a\n\xFBWa\n\xFBa9\xBCV[` \x02` \x01\x01Q`\xC0\x01Q\x85\x84\x81Q\x81\x10a\x0B\x19Wa\x0B\x19a9\xBCV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\x0B/`\x01\x84a9\xFFV[\x92P`\0\x8D\x82\x81Q\x81\x10a\x0BEWa\x0BEa9\xBCV[` \x02` \x01\x01Q`\0\x01Q\x90P`\0\x8E\x83\x81Q\x81\x10a\x0BgWa\x0Bga9\xBCV[` \x02` \x01\x01Q`@\x01Q\x90P`\0\x8C\x8D\x83\x85\t\x86\t\x90P\x80\x89\x87\x81Q\x81\x10a\x0B\x93Wa\x0B\x93a9\xBCV[` \x02` \x01\x01\x81\x81RPPPPP\x8C\x81\x81Q\x81\x10a\x0B\xB4Wa\x0B\xB4a9\xBCV[` \x02` \x01\x01Q`\xE0\x01Q\x85\x84\x81Q\x81\x10a\x0B\xD2Wa\x0B\xD2a9\xBCV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\x0B\xE8`\x01\x84a9\xFFV[\x92P`\0\x8D\x82\x81Q\x81\x10a\x0B\xFEWa\x0B\xFEa9\xBCV[` \x02` \x01\x01Q``\x01Q\x90P\x8A\x8B\x82\x85\t\x86\x08\x94P\x8A\x8A\x84\t\x92PP`\x01\x01a\t\x9DV[Pa\x0C.\x83a\x15\xC6V[\x85\x83\x81Q\x81\x10a\x0C@Wa\x0C@a9\xBCV[` \x02` \x01\x01\x81\x81RPPa\x0Cx`@\x80Q\x80\x82\x01\x82R`\0\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x84\x83\x81Q\x81\x10a\x0C\x8AWa\x0C\x8Aa9\xBCV[` \x02` \x01\x01\x81\x90RPa\x0C\xA7a\x0C\xA2\x85\x87a\x14\xCCV[a\x15\xFEV[\x95PPPPPP`\0`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\rf\x83\x82\x84a\raa\x16yV[a\x17JV[\x98\x97PPPPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a:\xC3\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\r\x9AWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x0E\nW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x04\x93V[PPPV[a\x0EW`@Q\x80a\x01\0\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[a\x0E_a1AV[`\0\x80Q` a:\xE3\x839\x81Q\x91Ra\x0Ex\x82\x85a\x18,V[a\x0E\x83\x82\x88\x88a\x18VV[\x84Qa\x0E\x90\x90\x83\x90a\x1A\xE2V[` \x85\x01Qa\x0E\xA0\x90\x83\x90a\x1A\xE2V[`@\x85\x01Qa\x0E\xB0\x90\x83\x90a\x1A\xE2V[``\x85\x01Qa\x0E\xC0\x90\x83\x90a\x1A\xE2V[`\x80\x85\x01Qa\x0E\xD0\x90\x83\x90a\x1A\xE2V[a\x0E\xD9\x82a\x13\x9FV[Pa\x0E\xE3\x82a\x13\x9FV[``\x84\x01Ra\x0E\xF1\x82a\x13\x9FV[`\x80\x84\x01R`\xA0\x85\x01Qa\x0F\x06\x90\x83\x90a\x1A\xE2V[a\x0F\x0F\x82a\x13\x9FV[\x83R`\xC0\x85\x01Qa\x0F!\x90\x83\x90a\x1A\xE2V[`\xE0\x85\x01Qa\x0F1\x90\x83\x90a\x1A\xE2V[a\x01\0\x85\x01Qa\x0FB\x90\x83\x90a\x1A\xE2V[a\x01 \x85\x01Qa\x0FS\x90\x83\x90a\x1A\xE2V[a\x01@\x85\x01Qa\x0Fd\x90\x83\x90a\x1A\xE2V[a\x0Fm\x82a\x13\x9FV[`\xA0\x84\x01Ra\x0F|\x82\x86a\x1A\xF9V[a\x0F\x85\x82a\x13\x9FV[`\xC0\x84\x01Ra\x01`\x85\x01Qa\x0F\x9B\x90\x83\x90a\x1A\xE2V[a\x01\x80\x85\x01Qa\x0F\xAC\x90\x83\x90a\x1A\xE2V[a\x0F\xB5\x82a\x13\x9FV[`\xE0\x84\x01R\x82Q\x81\x81\x80\t\x82\x82\x82\t` \x86\x01\x91\x90\x91R`@\x85\x01RP\x91\x96\x95PPPPPPV[a\x10\x0F`@Q\x80`\xA0\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[\x81a@\0\x03a\x10\xA3WP`@\x80Q`\xA0\x81\x01\x82R`\x0E\x81R` \x81\x01\x92\x90\x92R\x7F0c\x8C\xE1\xA7f\x1Bc7\xA9duj\xA7RW\xC6\xBFGx\xD8\x97\x89\xAB\x81\x9C\xE6\x0C\x19\xB0@\x01\x90\x82\x01R\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85``\x82\x01R\x7F(\x1C\x03o\x06\xE7\xE9\xE9\x11h\rBU\x8En\x8C\xF4\tv\xB0gwq\xC0\xF8\xEE\xE94d\x1C\x84\x10`\x80\x82\x01R\x90V[\x81a\x80\0\x03a\x117WP`@\x80Q`\xA0\x81\x01\x82R`\x0F\x81R` \x81\x01\x92\x90\x92R\x7F0c\xED\xAADK\xDD\xC6w\xFC\xD5\x15\xF6\x14UZwy\x97\xE0\xA9(}\x1Eb\xBFm\xD0\x04\xD8 \x01\x90\x82\x01R\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB``\x82\x01R\x7F\x05\xD37f\xE4Y\x0B7\"p\x1Bo/\xA4=\r\xC3\xF0(BM8Nh\xC9*t/\xB2\xDB\xC0\xB4`\x80\x82\x01R\x90V[\x81b\x01\0\0\x03a\x11\xCBWP`@\x80Q`\xA0\x81\x01\x82R`\x10\x81R` \x81\x01\x92\x90\x92R\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x90\x82\x01R~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7``\x82\x01R\x7F\x0B]V\xB7\x7F\xE7\x04\xE8\xE9#8\xC0\x08/7\xE0\x91\x12d\x14\xC80\xE4\xC6\x92-Z\xC8\x02\xD8B\xD4`\x80\x82\x01R\x90V[\x81b\x02\0\0\x03a\x12`WP`@\x80Q`\xA0\x81\x01\x82R`\x11\x81R` \x81\x01\x92\x90\x92R\x7F0d6@\xB9\xF8/\x90\xE8;i\x8E^\xA6\x17\x9C|\x05T.\x85\x953\xB4\x8B\x99S\xA2\xF56\x08\x01\x90\x82\x01R\x7F\x1B\xF8-\xEB\xA7\xD7I\x02\xC3p\x8C\xC6\xE7\x0Ea\xF3\x05\x12\xEC\xA9VU!\x0E'nXX\xCE\x8FX\xE5``\x82\x01R\x7F$L\xF0\x10\xC4<\xA8r7\xD8\xB0\x0B\xF9\xDDP\xC4\xC0\x1C\x7F\x08k\xD4\xE8\xC9 \xE7RQ\xD9o\r\"`\x80\x82\x01R\x90V[\x81` \x03a\x12\xF3WP`@\x80Q`\xA0\x81\x01\x82R`\x05\x81R` \x81\x01\x92\x90\x92R\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x90\x82\x01R\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0``\x82\x01R\x7F'$q6\x03\xBF\xBDy\n\xEA\xF3\xE7\xDF%\xD8\xE7\xEF\x8F1\x134\x90[M\x8C\x99\x98\x0C\xF2\x10\x97\x9D`\x80\x82\x01R\x90V[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x130`@Q\x80``\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[a\x13:\x84\x84a\x1B\x8FV[\x80\x82Ra\x13J\x90\x85\x90\x85\x90a\x1B\xE3V[` \x82\x01R\x80Qa\x13`\x90\x85\x90\x84\x90\x86\x90a\x1CIV[`@\x82\x01R\x93\x92PPPV[`\0\x80a\x13z\x85\x87\x89a\x1D\x9FV[\x90Pa\x13\x8A\x88\x86\x89\x89\x88\x88a\x1E\x8BV[a\rf\x81\x87\x86a!\x97V[a\x04\x9C\x82\x82a!\xE7V[` \x81\x81\x01Q\x80Q\x90\x82\x01Q\x83Q`@Q`\0\x94\x85\x94a\x13\xC7\x94\x90\x93\x90\x92\x90\x91\x86\x91\x01a:BV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\0\x83` \x01Q`\0`\x02\x81\x10a\x13\xF8Wa\x13\xF8a9\xBCV[` \x02\x01Q\x84` \x01Q`\x01`\x02\x81\x10a\x14\x14Wa\x14\x14a9\xBCV[` \x02\x01Q\x85`\0\x01Q`\x01`@Q` \x01a\x143\x94\x93\x92\x91\x90a:BV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x81\x84` \x01Q`\0`\x02\x81\x10a\x14cWa\x14ca9\xBCV[` \x02\x01\x81\x81RPP\x80\x84` \x01Q`\x01`\x02\x81\x10a\x14\x84Wa\x14\x84a9\xBCV[` \x02\x01\x81\x81RPPa\x02Za\x14\xC7\x83\x83`@Q` \x01a\x14\xAF\x92\x91\x90\x91\x82R` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`0a\"\x1AV[a#'V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x82Q\x82Q\x14a\x151W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FMSM error: length does not match`D\x82\x01R`d\x01a\x04\x93V[a\x15o\x83`\0\x81Q\x81\x10a\x15GWa\x15Ga9\xBCV[` \x02` \x01\x01Q\x83`\0\x81Q\x81\x10a\x15bWa\x15ba9\xBCV[` \x02` \x01\x01Qa#\x9DV[\x90P`\x01[\x82Q\x81\x10\x15a\x15\xBFWa\x15\xB5\x82a\x15\xB0\x86\x84\x81Q\x81\x10a\x15\x96Wa\x15\x96a9\xBCV[` \x02` \x01\x01Q\x86\x85\x81Q\x81\x10a\x15bWa\x15ba9\xBCV[a$AV[\x91P`\x01\x01a\x15tV[P\x92\x91PPV[`\0a\x15\xE0`\0\x80Q` a:\xE3\x839\x81Q\x91R\x83a:xV[a\x15\xF8\x90`\0\x80Q` a:\xE3\x839\x81Q\x91Ra:\x9AV[\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x16&WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a:\xC3\x839\x81Q\x91R\x84` \x01Qa\x16Y\x91\x90a:xV[a\x16q\x90`\0\x80Q` a:\xC3\x839\x81Q\x91Ra:\x9AV[\x90R\x92\x91PPV[a\x16\xA4`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x18 W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x04\x93V[P\x15\x15\x95\x94PPPPPV[\x81Q`@Qa\x18@\x91\x90\x83\x90` \x01a:\xADV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x90\x91RPV[`\xFEa\x18\x97\x84a\x18\x92a\x18h\x84a$\xE8V[`@Q` \x01a\x18z\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`\x04a\"\x1AV[a\x18,V[a\x18\xD5\x84a\x18\x92a\x18\xAB\x86`\0\x01Qa$\xE8V[`@Q` \x01a\x18\xBD\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`\x08a\"\x1AV[a\x18\xE9\x84a\x18\x92a\x18\xAB\x86` \x01Qa$\xE8V[a\x18\xF4\x84`\x01a!\xE7V[a\x19\x1E\x84\x7F/\x8D\xD1\xF1\xA7XWa\x06>a9\xAEV[` \x02` \x01\x01Q`\0\x01Q\x83a\x13\x87\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[`\x01\x01a\x06!V[Pa\x06k\x81a\x13\x91V[\x91PP[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0a\x06\xA4\x86`\x02a9\xDAV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x06\xBBWa\x06\xBBa1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x06\xE4W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0a\x06\xF4\x87`\x02a9\xDAV[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x07\x0BWa\x07\x0Ba1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x07PW\x81` \x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x07)W\x90P[P\x90P`\x01`\0[\x88\x81\x10\x15a\x08\x8FW\x81\x84a\x07m\x83`\x02a9\xDAV[\x81Q\x81\x10a\x07}Wa\x07}a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x8A\x81\x81Q\x81\x10a\x07\x9BWa\x07\x9Ba9\xAEV[` \x02` \x01\x01Q`\xC0\x01Q\x83\x82`\x02a\x07\xB5\x91\x90a9\xDAV[\x81Q\x81\x10a\x07\xC5Wa\x07\xC5a9\xAEV[` \x02` \x01\x01\x81\x90RP`\0\x80\x8C\x83\x81Q\x81\x10a\x07\xE5Wa\x07\xE5a9\xAEV[` \x02` \x01\x01Q`\0\x01Q\x90P\x89\x81\x85\t\x91P\x81\x86a\x08\x06\x85`\x02a9\xDAV[a\x08\x11\x90`\x01a9\xF1V[\x81Q\x81\x10a\x08!Wa\x08!a9\xAEV[` \x02` \x01\x01\x81\x81RPPPP\x8A\x81\x81Q\x81\x10a\x08AWa\x08Aa9\xAEV[` \x02` \x01\x01Q`\xE0\x01Q\x83\x82`\x02a\x08[\x91\x90a9\xDAV[a\x08f\x90`\x01a9\xF1V[\x81Q\x81\x10a\x08vWa\x08va9\xAEV[` \x02` \x01\x01\x81\x90RP\x87\x87\x83\t\x91P`\x01\x01a\x07XV[Pa\x08\x9A\x82\x84a\x14\xBEV[\x94PPPP``\x80`\0\x89`\0\x81Q\x81\x10a\x08\xB7Wa\x08\xB7a9\xAEV[` \x02` \x01\x01Q`\x80\x01QQ\x90P`\0\x8AQ\x82`\x02a\x08\xD7\x91\x90a9\xF1V[a\x08\xE1\x91\x90a9\xDAV[a\x08\xEC\x90`\x01a9\xF1V[\x90P\x80`\x01`\x01`@\x1B\x03\x81\x11\x15a\t\x06Wa\t\x06a1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\t/W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x93P\x80`\x01`\x01`@\x1B\x03\x81\x11\x15a\tJWa\tJa1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\t\x8FW\x81` \x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\thW\x90P[P\x92P`\0\x91P\x81\x90P`\x01\x81[\x8CQ\x81\x10\x15a\x0C$W`\0[\x8D`\0\x81Q\x81\x10a\t\xBCWa\t\xBCa9\xAEV[` \x02` \x01\x01Q`\x80\x01QQ\x81\x10\x15a\n\x9DW`\0\x8E\x83\x81Q\x81\x10a\t\xE4Wa\t\xE4a9\xAEV[` \x02` \x01\x01Q`\x80\x01Q\x82\x81Q\x81\x10a\n\x01Wa\n\x01a9\xAEV[` \x02` \x01\x01Q\x90P`\0\x8C\x82\x86\t\x90P\x80\x89\x87\x81Q\x81\x10a\n&Wa\n&a9\xAEV[` \x02` \x01\x01\x81\x81RPPPP\x8D\x82\x81Q\x81\x10a\nFWa\nFa9\xAEV[` \x02` \x01\x01Q`\xA0\x01Q\x81\x81Q\x81\x10a\ncWa\nca9\xAEV[` \x02` \x01\x01Q\x86\x85\x81Q\x81\x10a\n}Wa\n}a9\xAEV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\n\x93`\x01\x85a9\xF1V[\x93P`\x01\x01a\t\xA9V[P`\0\x8D\x82\x81Q\x81\x10a\n\xB2Wa\n\xB2a9\xAEV[` \x02` \x01\x01Q` \x01Q\x90P`\0\x8B\x82\x85\t\x90P\x80\x88\x86\x81Q\x81\x10a\n\xDBWa\n\xDBa9\xAEV[` \x02` \x01\x01\x81\x81RPPPP\x8C\x81\x81Q\x81\x10a\n\xFBWa\n\xFBa9\xAEV[` \x02` \x01\x01Q`\xC0\x01Q\x85\x84\x81Q\x81\x10a\x0B\x19Wa\x0B\x19a9\xAEV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\x0B/`\x01\x84a9\xF1V[\x92P`\0\x8D\x82\x81Q\x81\x10a\x0BEWa\x0BEa9\xAEV[` \x02` \x01\x01Q`\0\x01Q\x90P`\0\x8E\x83\x81Q\x81\x10a\x0BgWa\x0Bga9\xAEV[` \x02` \x01\x01Q`@\x01Q\x90P`\0\x8C\x8D\x83\x85\t\x86\t\x90P\x80\x89\x87\x81Q\x81\x10a\x0B\x93Wa\x0B\x93a9\xAEV[` \x02` \x01\x01\x81\x81RPPPPP\x8C\x81\x81Q\x81\x10a\x0B\xB4Wa\x0B\xB4a9\xAEV[` \x02` \x01\x01Q`\xE0\x01Q\x85\x84\x81Q\x81\x10a\x0B\xD2Wa\x0B\xD2a9\xAEV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\x0B\xE8`\x01\x84a9\xF1V[\x92P`\0\x8D\x82\x81Q\x81\x10a\x0B\xFEWa\x0B\xFEa9\xAEV[` \x02` \x01\x01Q``\x01Q\x90P\x8A\x8B\x82\x85\t\x86\x08\x94P\x8A\x8A\x84\t\x92PP`\x01\x01a\t\x9DV[Pa\x0C.\x83a\x15\xB8V[\x85\x83\x81Q\x81\x10a\x0C@Wa\x0C@a9\xAEV[` \x02` \x01\x01\x81\x81RPPa\x0Cx`@\x80Q\x80\x82\x01\x82R`\0\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x84\x83\x81Q\x81\x10a\x0C\x8AWa\x0C\x8Aa9\xAEV[` \x02` \x01\x01\x81\x90RPa\x0C\xA7a\x0C\xA2\x85\x87a\x14\xBEV[a\x15\xF0V[\x95PPPPPP`\0`@Q\x80`\x80\x01`@R\x80\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81RP\x90Pa\rf\x83\x82\x84a\raa\x16kV[a\x17\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85``\x82\x01R\x7F(\x1C\x03o\x06\xE7\xE9\xE9\x11h\rBU\x8En\x8C\xF4\tv\xB0gwq\xC0\xF8\xEE\xE94d\x1C\x84\x10`\x80\x82\x01R\x90V[\x81a\x80\0\x03a\x11)WP`@\x80Q`\xA0\x81\x01\x82R`\x0F\x81R` \x81\x01\x92\x90\x92R\x7F0c\xED\xAADK\xDD\xC6w\xFC\xD5\x15\xF6\x14UZwy\x97\xE0\xA9(}\x1Eb\xBFm\xD0\x04\xD8 \x01\x90\x82\x01R\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB``\x82\x01R\x7F\x05\xD37f\xE4Y\x0B7\"p\x1Bo/\xA4=\r\xC3\xF0(BM8Nh\xC9*t/\xB2\xDB\xC0\xB4`\x80\x82\x01R\x90V[\x81b\x01\0\0\x03a\x11\xBDWP`@\x80Q`\xA0\x81\x01\x82R`\x10\x81R` \x81\x01\x92\x90\x92R\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x90\x82\x01R~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7``\x82\x01R\x7F\x0B]V\xB7\x7F\xE7\x04\xE8\xE9#8\xC0\x08/7\xE0\x91\x12d\x14\xC80\xE4\xC6\x92-Z\xC8\x02\xD8B\xD4`\x80\x82\x01R\x90V[\x81b\x02\0\0\x03a\x12RWP`@\x80Q`\xA0\x81\x01\x82R`\x11\x81R` \x81\x01\x92\x90\x92R\x7F0d6@\xB9\xF8/\x90\xE8;i\x8E^\xA6\x17\x9C|\x05T.\x85\x953\xB4\x8B\x99S\xA2\xF56\x08\x01\x90\x82\x01R\x7F\x1B\xF8-\xEB\xA7\xD7I\x02\xC3p\x8C\xC6\xE7\x0Ea\xF3\x05\x12\xEC\xA9VU!\x0E'nXX\xCE\x8FX\xE5``\x82\x01R\x7F$L\xF0\x10\xC4<\xA8r7\xD8\xB0\x0B\xF9\xDDP\xC4\xC0\x1C\x7F\x08k\xD4\xE8\xC9 \xE7RQ\xD9o\r\"`\x80\x82\x01R\x90V[\x81` \x03a\x12\xE5WP`@\x80Q`\xA0\x81\x01\x82R`\x05\x81R` \x81\x01\x92\x90\x92R\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x90\x82\x01R\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0``\x82\x01R\x7F'$q6\x03\xBF\xBDy\n\xEA\xF3\xE7\xDF%\xD8\xE7\xEF\x8F1\x134\x90[M\x8C\x99\x98\x0C\xF2\x10\x97\x9D`\x80\x82\x01R\x90V[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x13\"`@Q\x80``\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[a\x13,\x84\x84a\x1B\x81V[\x80\x82Ra\x13<\x90\x85\x90\x85\x90a\x1B\xD5V[` \x82\x01R\x80Qa\x13R\x90\x85\x90\x84\x90\x86\x90a\x1C;V[`@\x82\x01R\x93\x92PPPV[`\0\x80a\x13l\x85\x87\x89a\x1D\x91V[\x90Pa\x13|\x88\x86\x89\x89\x88\x88a\x1E}V[a\rf\x81\x87\x86a!\x89V[a\x04\x9C\x82\x82a!\xD9V[` \x81\x81\x01Q\x80Q\x90\x82\x01Q\x83Q`@Q`\0\x94\x85\x94a\x13\xB9\x94\x90\x93\x90\x92\x90\x91\x86\x91\x01a:4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\0\x83` \x01Q`\0`\x02\x81\x10a\x13\xEAWa\x13\xEAa9\xAEV[` \x02\x01Q\x84` \x01Q`\x01`\x02\x81\x10a\x14\x06Wa\x14\x06a9\xAEV[` \x02\x01Q\x85`\0\x01Q`\x01`@Q` \x01a\x14%\x94\x93\x92\x91\x90a:4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x81\x84` \x01Q`\0`\x02\x81\x10a\x14UWa\x14Ua9\xAEV[` \x02\x01\x81\x81RPP\x80\x84` \x01Q`\x01`\x02\x81\x10a\x14vWa\x14va9\xAEV[` \x02\x01\x81\x81RPPa\x02Za\x14\xB9\x83\x83`@Q` \x01a\x14\xA1\x92\x91\x90\x91\x82R` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`0a\"\x0CV[a#\x19V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x82Q\x82Q\x14a\x15#W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FMSM error: length does not match`D\x82\x01R`d\x01a\x04\x93V[a\x15a\x83`\0\x81Q\x81\x10a\x159Wa\x159a9\xAEV[` \x02` \x01\x01Q\x83`\0\x81Q\x81\x10a\x15TWa\x15Ta9\xAEV[` \x02` \x01\x01Qa#\x8FV[\x90P`\x01[\x82Q\x81\x10\x15a\x15\xB1Wa\x15\xA7\x82a\x15\xA2\x86\x84\x81Q\x81\x10a\x15\x88Wa\x15\x88a9\xAEV[` \x02` \x01\x01Q\x86\x85\x81Q\x81\x10a\x15TWa\x15Ta9\xAEV[a$3V[\x91P`\x01\x01a\x15fV[P\x92\x91PPV[`\0a\x15\xD2`\0\x80Q` a:\xD5\x839\x81Q\x91R\x83a:jV[a\x15\xEA\x90`\0\x80Q` a:\xD5\x839\x81Q\x91Ra:\x8CV[\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x16\x18WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a:\xB5\x839\x81Q\x91R\x84` \x01Qa\x16K\x91\x90a:jV[a\x16c\x90`\0\x80Q` a:\xB5\x839\x81Q\x91Ra:\x8CV[\x90R\x92\x91PPV[a\x16\x96`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x18\x12W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x04\x93V[P\x15\x15\x95\x94PPPPPV[\x81Q`@Qa\x182\x91\x90\x83\x90` \x01a:\x9FV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x90\x91RPV[`\xFEa\x18\x89\x84a\x18\x84a\x18Z\x84a$\xDAV[`@Q` \x01a\x18l\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`\x04a\"\x0CV[a\x18\x1EV[a\x18\xC7\x84a\x18\x84a\x18\x9D\x86`\0\x01Qa$\xDAV[`@Q` \x01a\x18\xAF\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`\x08a\"\x0CV[a\x18\xDB\x84a\x18\x84a\x18\x9D\x86` \x01Qa$\xDAV[a\x18\xE6\x84`\x01a!\xD9V[a\x19\x10\x84\x7F/\x8D\xD1\xF1\xA7XV[\x90P`\0\x87`\x01`\x01`@\x1B\x03\x81\x11\x15a\x1C\x94Wa\x1C\x94a1\xA7V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x1C\xBDW\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P\x88\x8B\x85\t\x93P`\x01\x92P`\0[\x88\x81\x10\x15a\x1D\x02W` \x81\x02` \x84\x01\x01Q\x95P\x89\x8D\x87\x8C\x03\x08\x96P\x89\x87\x85\t` \x82\x81\x02\x84\x01\x01\x88\x90R\x93P`\x01\x01a\x1C\xCDV[Pa\x1D\x0C\x83a&\x98V[\x92P`\0[\x88\x81\x10\x15a\x1D\x7FW` \x81\x02` \x84\x01\x01Q\x95P\x89\x86\x86\t\x97P\x89\x84\x89\t\x97P`\0[\x89\x81\x10\x15a\x1D^W\x80\x82\x14a\x1DVW` \x81\x02` \x84\x01\x01Q\x97P\x8A\x88\x8A\t\x98P[`\x01\x01a\x1D4V[P` \x81\x02` \x8F\x01\x01Q\x95P\x89\x86\x89\t\x97P\x89\x88\x8C\x08\x9AP`\x01\x01a\x1D\x11V[PPPPPPPPPP\x94\x93PPPPV[`\0\x80`\0\x80Q` a:\xD5\x839\x81Q\x91R\x90P`\0\x83` \x01Q\x90P`\0\x84`@\x01Q\x90P`\0`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x85\x85\x01\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x85\x85\x01\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x85\x85\x01\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x85\x85\x01\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[a\x1E\x8B\x86\x86\x86\x86\x85\x87a(\x03V[`\xC0\x85\x01Q\x82Q`\0\x80Q` a:\xD5\x839\x81Q\x91R\x91\x90\x81\x90\x81\x90\x86\x90`\x14\x90\x81\x10a\x1E\xBAWa\x1E\xBAa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85`\0\x01Q\x84`\x14\x81Q\x81\x10a\x1E\xDEWa\x1E\xDEa9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x15\x81Q\x81\x10a\x1F\x03Wa\x1F\x03a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85` \x01Q\x84`\x15\x81Q\x81\x10a\x1F'Wa\x1F'a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x16\x81Q\x81\x10a\x1FLWa\x1FLa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85`@\x01Q\x84`\x16\x81Q\x81\x10a\x1FpWa\x1Fpa9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x17\x81Q\x81\x10a\x1F\x95Wa\x1F\x95a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85``\x01Q\x84`\x17\x81Q\x81\x10a\x1F\xB9Wa\x1F\xB9a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x18\x81Q\x81\x10a\x1F\xDEWa\x1F\xDEa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85`\x80\x01Q\x84`\x18\x81Q\x81\x10a \x02Wa \x02a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x19\x81Q\x81\x10a 'Wa 'a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x88`@\x01Q\x84`\x19\x81Q\x81\x10a KWa Ka9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x1A\x81Q\x81\x10a pWa pa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x88``\x01Q\x84`\x1A\x81Q\x81\x10a \x94Wa \x94a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x1B\x81Q\x81\x10a \xB9Wa \xB9a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x88`\x80\x01Q\x84`\x1B\x81Q\x81\x10a \xDDWa \xDDa9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x80\x85`\x1C\x81Q\x81\x10a!\x02Wa!\x02a9\xAEV[` \x02` \x01\x01\x81\x81RPP\x88`\xA0\x01Q\x84`\x1C\x81Q\x81\x10a!&Wa!&a9\xAEV[` \x02` \x01\x01\x81\x90RP\x82\x82\x82\t\x90P\x87`\xE0\x01Q\x85`\x1D\x81Q\x81\x10a!OWa!Oa9\xAEV[` \x02` \x01\x01\x81\x81RPP\x85`\xA0\x01Q\x84`\x1D\x81Q\x81\x10a!sWa!sa9\xAEV[` \x02` \x01\x01\x81\x90RPPPPPPPPPPV[`\0\x80Q` a:\xD5\x839\x81Q\x91R\x83\x81\x03\x90`\0[`\n\x81\x10\x15a!\xD0W` `\x15\x82\x01\x02\x84\x01Q` \x82\x02a\x01\xA0\x01\x86\x01Q\x83\x84\x82\x84\t\x86\x08\x94PPP`\x01\x01a!\x9FV[PP\x93\x92PPPV[a\x04\x9C\x82a!\xE6\x83a$\xDAV[`@Q` \x01a!\xF8\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra\x18\x1EV[``\x81a\"\x1A\x81`\x1Fa9\xF1V[\x10\x15a\"YW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0E`$\x82\x01Rmslice_overflow`\x90\x1B`D\x82\x01R`d\x01a\x04\x93V[a\"c\x82\x84a9\xF1V[\x84Q\x10\x15a\"\xA7W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x11`$\x82\x01Rpslice_outOfBounds`x\x1B`D\x82\x01R`d\x01a\x04\x93V[``\x82\x15\x80\x15a\"\xC6W`@Q\x91P`\0\x82R` \x82\x01`@Ra#\x10V[`@Q\x91P`\x1F\x84\x16\x80\x15` \x02\x81\x84\x01\x01\x85\x81\x01\x87\x83\x15` \x02\x84\x8B\x01\x01\x01[\x81\x83\x10\x15a\"\xFFW\x80Q\x83R` \x92\x83\x01\x92\x01a\"\xE7V[PP\x85\x84R`\x1F\x01`\x1F\x19\x16`@RP[P\x94\x93PPPPV[`\0\x80[\x82Q\x81\x10\x15a#\x89W`\0\x80Q` a:\xD5\x839\x81Q\x91Ra\x01\0\x83\t\x91P`\0\x80Q` a:\xD5\x839\x81Q\x91R\x83\x82`\x01\x86Qa#[\x91\x90a:\x8CV[a#e\x91\x90a:\x8CV[\x81Q\x81\x10a#uWa#ua9\xAEV[\x01` \x01Q`\xF8\x1C\x83\x08\x91P`\x01\x01a#\x1DV[P\x91\x90PV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra#\xABa1MV[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x81\x01\x83\x90R`\0``\x83`\x80\x84`\x07a\x07\xD0Z\x03\xFA\x90P\x80\x80a#\xDDW`\0\x80\xFD[P\x80a$+W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x19`$\x82\x01R\x7FBn254: scalar mul failed!\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x04\x93V[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01Ra$Oa1kV[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x83\x01R\x83\x01Q``\x80\x83\x01\x91\x90\x91R`\0\x90\x83`\xC0\x84`\x06a\x07\xD0Z\x03\xFA\x90P\x80\x80a$\x8CW`\0\x80\xFD[P\x80a$+W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: group addition failed!\0\0\0`D\x82\x01R`d\x01a\x04\x93V[`\0\x81\x90P`\x08\x81~\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\x16\x90\x1B`\x08\x82\x7F\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\xFF\0\x16\x90\x1C\x17\x90P`\x10\x81}\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\x16\x90\x1B`\x10\x82\x7F\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\xFF\xFF\0\0\x16\x90\x1C\x17\x90P` \x81{\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\x16\x90\x1B` \x82\x7F\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\x16\x90\x1C\x17\x90P`@\x81w\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x1B`@\x82w\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x19\x16\x90\x1C\x17\x90P`\x80\x81\x90\x1B`\x80\x82\x90\x1C\x17\x90P\x91\x90PV[\x80Q` \x82\x01Q``\x91`\0\x91\x15\x90\x15\x16\x15a&V[a\x02bV[`\0\x82Q\x85Q\x14\x15\x80a\0\x94WP\x82Q\x84Q\x14\x15[\x80a\0\xA1WP\x82Q\x82Q\x14\x15[\x80a\0\xABWP\x82Q\x15[\x15a\0\xC9W`@Qc\xFD\x9A-\x1B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\0\xE4Wa\0\xE4a1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x01\x1DW\x81` \x01[a\x01\na0\xC7V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x01\x02W\x90P[P\x90P`\0[\x84Q\x81\x10\x15a\x02LWa\x01N\x85\x82\x81Q\x81\x10a\x01AWa\x01Aa9\xBCV[` \x02` \x01\x01Qa\x02\xFEV[`\0[\x86\x82\x81Q\x81\x10a\x01cWa\x01ca9\xBCV[` \x02` \x01\x01QQ\x81\x10\x15a\x01\xB6Wa\x01\xAE\x87\x83\x81Q\x81\x10a\x01\x88Wa\x01\x88a9\xBCV[` \x02` \x01\x01Q\x82\x81Q\x81\x10a\x01\xA1Wa\x01\xA1a9\xBCV[` \x02` \x01\x01Qa\x049V[`\x01\x01a\x01QV[Pa\x02'\x87\x82\x81Q\x81\x10a\x01\xCCWa\x01\xCCa9\xBCV[` \x02` \x01\x01Q\x87\x83\x81Q\x81\x10a\x01\xE6Wa\x01\xE6a9\xBCV[` \x02` \x01\x01Q\x87\x84\x81Q\x81\x10a\x02\0Wa\x02\0a9\xBCV[` \x02` \x01\x01Q\x87\x85\x81Q\x81\x10a\x02\x1AWa\x02\x1Aa9\xBCV[` \x02` \x01\x01Qa\x04\xA0V[\x82\x82\x81Q\x81\x10a\x029Wa\x029a9\xBCV[` \x90\x81\x02\x91\x90\x91\x01\x01R`\x01\x01a\x01#V[Pa\x02V\x81a\x05\xF8V[\x91PP[\x94\x93PPPPV[`\0a\x02m\x83a\x02\xFEV[`\0[\x84Q\x81\x10\x15a\x02\x96Wa\x02\x8E\x85\x82\x81Q\x81\x10a\x01\xA1Wa\x01\xA1a9\xBCV[`\x01\x01a\x02pV[P`@\x80Q`\x01\x80\x82R\x81\x83\x01\x90\x92R`\0\x91\x81` \x01[a\x02\xB6a0\xC7V[\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x02\xAEW\x90PP\x90Pa\x02\xD7\x86\x86\x86\x86a\x04\xA0V[\x81`\0\x81Q\x81\x10a\x02\xEAWa\x02\xEAa9\xBCV[` \x02` \x01\x01\x81\x90RPa\x02V\x81a\x05\xF8V[\x80Qa\x03\t\x90a\rrV[a\x03\x16\x81` \x01Qa\rrV[a\x03#\x81`@\x01Qa\rrV[a\x030\x81``\x01Qa\rrV[a\x03=\x81`\x80\x01Qa\rrV[a\x03J\x81`\xA0\x01Qa\rrV[a\x03W\x81`\xC0\x01Qa\rrV[a\x03d\x81`\xE0\x01Qa\rrV[a\x03r\x81a\x01\0\x01Qa\rrV[a\x03\x80\x81a\x01 \x01Qa\rrV[a\x03\x8E\x81a\x01@\x01Qa\rrV[a\x03\x9C\x81a\x01`\x01Qa\rrV[a\x03\xAA\x81a\x01\x80\x01Qa\rrV[a\x03\xB8\x81a\x01\xA0\x01Qa\x049V[a\x03\xC6\x81a\x01\xC0\x01Qa\x049V[a\x03\xD4\x81a\x01\xE0\x01Qa\x049V[a\x03\xE2\x81a\x02\0\x01Qa\x049V[a\x03\xF0\x81a\x02 \x01Qa\x049V[a\x03\xFE\x81a\x02@\x01Qa\x049V[a\x04\x0C\x81a\x02`\x01Qa\x049V[a\x04\x1A\x81a\x02\x80\x01Qa\x049V[a\x04(\x81a\x02\xA0\x01Qa\x049V[a\x046\x81a\x02\xC0\x01Qa\x049V[PV[`\0\x80Q` a:\xE3\x839\x81Q\x91R\x81\x10\x80a\x04\x9CW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7FBn254: invalid scalar field\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[PPV[a\x04\xA8a0\xC7V[\x84` \x01Q\x84Q\x14a\x04\xCDW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x04\xDB\x86\x86\x86\x86a\x0E\x0FV[\x90P`\0a\x04\xEC\x87`\0\x01Qa\x0F\xDDV[\x90P`\0a\x04\xFF\x82\x84`\xA0\x01Q\x89a\x13\x0CV[`@\x80Q`\x1E\x80\x82Ra\x03\xE0\x82\x01\x90\x92R\x91\x92P`\0\x91\x90` \x82\x01a\x03\xC0\x806\x837PP`@\x80Q`\x1E\x80\x82Ra\x03\xE0\x82\x01\x90\x92R\x92\x93P`\0\x92\x91P` \x82\x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x05BW\x90PP\x90P`\0a\x05{\x8B\x85\x8B\x89\x87\x87a\x13lV[`\xA0\x87\x01Q``\x87\x01Q\x91\x92P\x90`\0\x80Q` a:\xE3\x839\x81Q\x91R`\0\x81\x83\x85\t`@\x80Qa\x01\0\x81\x01\x82R`\xE0\x9C\x8D\x01Q\x81R` \x81\x01\x96\x90\x96R\x85\x01RPPP``\x81\x01\x91\x90\x91R`\x80\x81\x01\x92\x90\x92R`\xA0\x82\x01Ra\x01`\x87\x01Q`\xC0\x82\x01Ra\x01\x80\x90\x96\x01Q\x92\x86\x01\x92\x90\x92RP\x92\x95\x94PPPPPV[\x80Q`\0\x90`\0\x80Q` a:\xE3\x839\x81Q\x91R`\x01\x80\x83\x11\x15a\x06oWa\x06\x1Ea1AV[`\0[\x84\x81\x10\x15a\x06aWa\x06Y\x87\x82\x81Q\x81\x10a\x06>Wa\x06>a9\xBCV[` \x02` \x01\x01Q`\0\x01Q\x83a\x13\x95\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[`\x01\x01a\x06!V[Pa\x06k\x81a\x13\x9FV[\x91PP[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0a\x06\xA4\x86`\x02a9\xE8V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x06\xBBWa\x06\xBBa1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x06\xE4W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x90P`\0a\x06\xF4\x87`\x02a9\xE8V[`\x01`\x01`@\x1B\x03\x81\x11\x15a\x07\x0BWa\x07\x0Ba1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x07PW\x81` \x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x07)W\x90P[P\x90P`\x01`\0[\x88\x81\x10\x15a\x08\x8FW\x81\x84a\x07m\x83`\x02a9\xE8V[\x81Q\x81\x10a\x07}Wa\x07}a9\xBCV[` \x02` \x01\x01\x81\x81RPP\x8A\x81\x81Q\x81\x10a\x07\x9BWa\x07\x9Ba9\xBCV[` \x02` \x01\x01Q`\xC0\x01Q\x83\x82`\x02a\x07\xB5\x91\x90a9\xE8V[\x81Q\x81\x10a\x07\xC5Wa\x07\xC5a9\xBCV[` \x02` \x01\x01\x81\x90RP`\0\x80\x8C\x83\x81Q\x81\x10a\x07\xE5Wa\x07\xE5a9\xBCV[` \x02` \x01\x01Q`\0\x01Q\x90P\x89\x81\x85\t\x91P\x81\x86a\x08\x06\x85`\x02a9\xE8V[a\x08\x11\x90`\x01a9\xFFV[\x81Q\x81\x10a\x08!Wa\x08!a9\xBCV[` \x02` \x01\x01\x81\x81RPPPP\x8A\x81\x81Q\x81\x10a\x08AWa\x08Aa9\xBCV[` \x02` \x01\x01Q`\xE0\x01Q\x83\x82`\x02a\x08[\x91\x90a9\xE8V[a\x08f\x90`\x01a9\xFFV[\x81Q\x81\x10a\x08vWa\x08va9\xBCV[` \x02` \x01\x01\x81\x90RP\x87\x87\x83\t\x91P`\x01\x01a\x07XV[Pa\x08\x9A\x82\x84a\x14\xCCV[\x94PPPP``\x80`\0\x89`\0\x81Q\x81\x10a\x08\xB7Wa\x08\xB7a9\xBCV[` \x02` \x01\x01Q`\x80\x01QQ\x90P`\0\x8AQ\x82`\x02a\x08\xD7\x91\x90a9\xFFV[a\x08\xE1\x91\x90a9\xE8V[a\x08\xEC\x90`\x01a9\xFFV[\x90P\x80`\x01`\x01`@\x1B\x03\x81\x11\x15a\t\x06Wa\t\x06a1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\t/W\x81` \x01` \x82\x02\x806\x837\x01\x90P[P\x93P\x80`\x01`\x01`@\x1B\x03\x81\x11\x15a\tJWa\tJa1\xB5V[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\t\x8FW\x81` \x01[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81R` \x01\x90`\x01\x90\x03\x90\x81a\thW\x90P[P\x92P`\0\x91P\x81\x90P`\x01\x81[\x8CQ\x81\x10\x15a\x0C$W`\0[\x8D`\0\x81Q\x81\x10a\t\xBCWa\t\xBCa9\xBCV[` \x02` \x01\x01Q`\x80\x01QQ\x81\x10\x15a\n\x9DW`\0\x8E\x83\x81Q\x81\x10a\t\xE4Wa\t\xE4a9\xBCV[` \x02` \x01\x01Q`\x80\x01Q\x82\x81Q\x81\x10a\n\x01Wa\n\x01a9\xBCV[` \x02` \x01\x01Q\x90P`\0\x8C\x82\x86\t\x90P\x80\x89\x87\x81Q\x81\x10a\n&Wa\n&a9\xBCV[` \x02` \x01\x01\x81\x81RPPPP\x8D\x82\x81Q\x81\x10a\nFWa\nFa9\xBCV[` \x02` \x01\x01Q`\xA0\x01Q\x81\x81Q\x81\x10a\ncWa\nca9\xBCV[` \x02` \x01\x01Q\x86\x85\x81Q\x81\x10a\n}Wa\n}a9\xBCV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\n\x93`\x01\x85a9\xFFV[\x93P`\x01\x01a\t\xA9V[P`\0\x8D\x82\x81Q\x81\x10a\n\xB2Wa\n\xB2a9\xBCV[` \x02` \x01\x01Q` \x01Q\x90P`\0\x8B\x82\x85\t\x90P\x80\x88\x86\x81Q\x81\x10a\n\xDBWa\n\xDBa9\xBCV[` \x02` \x01\x01\x81\x81RPPPP\x8C\x81\x81Q\x81\x10a\n\xFBWa\n\xFBa9\xBCV[` \x02` \x01\x01Q`\xC0\x01Q\x85\x84\x81Q\x81\x10a\x0B\x19Wa\x0B\x19a9\xBCV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\x0B/`\x01\x84a9\xFFV[\x92P`\0\x8D\x82\x81Q\x81\x10a\x0BEWa\x0BEa9\xBCV[` \x02` \x01\x01Q`\0\x01Q\x90P`\0\x8E\x83\x81Q\x81\x10a\x0BgWa\x0Bga9\xBCV[` \x02` \x01\x01Q`@\x01Q\x90P`\0\x8C\x8D\x83\x85\t\x86\t\x90P\x80\x89\x87\x81Q\x81\x10a\x0B\x93Wa\x0B\x93a9\xBCV[` \x02` \x01\x01\x81\x81RPPPPP\x8C\x81\x81Q\x81\x10a\x0B\xB4Wa\x0B\xB4a9\xBCV[` \x02` \x01\x01Q`\xE0\x01Q\x85\x84\x81Q\x81\x10a\x0B\xD2Wa\x0B\xD2a9\xBCV[` \x90\x81\x02\x91\x90\x91\x01\x01Ra\x0B\xE8`\x01\x84a9\xFFV[\x92P`\0\x8D\x82\x81Q\x81\x10a\x0B\xFEWa\x0B\xFEa9\xBCV[` \x02` \x01\x01Q``\x01Q\x90P\x8A\x8B\x82\x85\t\x86\x08\x94P\x8A\x8A\x84\t\x92PP`\x01\x01a\t\x9DV[Pa\x0C.\x83a\x15\xC6V[\x85\x83\x81Q\x81\x10a\x0C@Wa\x0C@a9\xBCV[` \x02` \x01\x01\x81\x81RPPa\x0Cx`@\x80Q\x80\x82\x01\x82R`\0\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x84\x83\x81Q\x81\x10a\x0C\x8AWa\x0C\x8Aa9\xBCV[` \x02` \x01\x01\x81\x90RPa\x0C\xA7a\x0C\xA2\x85\x87a\x14\xCCV[a\x15\xFEV[\x95PPPPPP`\0`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\rf\x83\x82\x84a\raa\x16yV[a\x17JV[\x98\x97PPPPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a:\xC3\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\r\x9AWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x0E\nW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x04\x93V[PPPV[a\x0EW`@Q\x80a\x01\0\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[a\x0E_a1AV[`\0\x80Q` a:\xE3\x839\x81Q\x91Ra\x0Ex\x82\x85a\x18,V[a\x0E\x83\x82\x88\x88a\x18VV[\x84Qa\x0E\x90\x90\x83\x90a\x1A\xE2V[` \x85\x01Qa\x0E\xA0\x90\x83\x90a\x1A\xE2V[`@\x85\x01Qa\x0E\xB0\x90\x83\x90a\x1A\xE2V[``\x85\x01Qa\x0E\xC0\x90\x83\x90a\x1A\xE2V[`\x80\x85\x01Qa\x0E\xD0\x90\x83\x90a\x1A\xE2V[a\x0E\xD9\x82a\x13\x9FV[Pa\x0E\xE3\x82a\x13\x9FV[``\x84\x01Ra\x0E\xF1\x82a\x13\x9FV[`\x80\x84\x01R`\xA0\x85\x01Qa\x0F\x06\x90\x83\x90a\x1A\xE2V[a\x0F\x0F\x82a\x13\x9FV[\x83R`\xC0\x85\x01Qa\x0F!\x90\x83\x90a\x1A\xE2V[`\xE0\x85\x01Qa\x0F1\x90\x83\x90a\x1A\xE2V[a\x01\0\x85\x01Qa\x0FB\x90\x83\x90a\x1A\xE2V[a\x01 \x85\x01Qa\x0FS\x90\x83\x90a\x1A\xE2V[a\x01@\x85\x01Qa\x0Fd\x90\x83\x90a\x1A\xE2V[a\x0Fm\x82a\x13\x9FV[`\xA0\x84\x01Ra\x0F|\x82\x86a\x1A\xF9V[a\x0F\x85\x82a\x13\x9FV[`\xC0\x84\x01Ra\x01`\x85\x01Qa\x0F\x9B\x90\x83\x90a\x1A\xE2V[a\x01\x80\x85\x01Qa\x0F\xAC\x90\x83\x90a\x1A\xE2V[a\x0F\xB5\x82a\x13\x9FV[`\xE0\x84\x01R\x82Q\x81\x81\x80\t\x82\x82\x82\t` \x86\x01\x91\x90\x91R`@\x85\x01RP\x91\x96\x95PPPPPPV[a\x10\x0F`@Q\x80`\xA0\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[\x81a@\0\x03a\x10\xA3WP`@\x80Q`\xA0\x81\x01\x82R`\x0E\x81R` \x81\x01\x92\x90\x92R\x7F0c\x8C\xE1\xA7f\x1Bc7\xA9duj\xA7RW\xC6\xBFGx\xD8\x97\x89\xAB\x81\x9C\xE6\x0C\x19\xB0@\x01\x90\x82\x01R\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85``\x82\x01R\x7F(\x1C\x03o\x06\xE7\xE9\xE9\x11h\rBU\x8En\x8C\xF4\tv\xB0gwq\xC0\xF8\xEE\xE94d\x1C\x84\x10`\x80\x82\x01R\x90V[\x81a\x80\0\x03a\x117WP`@\x80Q`\xA0\x81\x01\x82R`\x0F\x81R` \x81\x01\x92\x90\x92R\x7F0c\xED\xAADK\xDD\xC6w\xFC\xD5\x15\xF6\x14UZwy\x97\xE0\xA9(}\x1Eb\xBFm\xD0\x04\xD8 \x01\x90\x82\x01R\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB``\x82\x01R\x7F\x05\xD37f\xE4Y\x0B7\"p\x1Bo/\xA4=\r\xC3\xF0(BM8Nh\xC9*t/\xB2\xDB\xC0\xB4`\x80\x82\x01R\x90V[\x81b\x01\0\0\x03a\x11\xCBWP`@\x80Q`\xA0\x81\x01\x82R`\x10\x81R` \x81\x01\x92\x90\x92R\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x90\x82\x01R~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7``\x82\x01R\x7F\x0B]V\xB7\x7F\xE7\x04\xE8\xE9#8\xC0\x08/7\xE0\x91\x12d\x14\xC80\xE4\xC6\x92-Z\xC8\x02\xD8B\xD4`\x80\x82\x01R\x90V[\x81b\x02\0\0\x03a\x12`WP`@\x80Q`\xA0\x81\x01\x82R`\x11\x81R` \x81\x01\x92\x90\x92R\x7F0d6@\xB9\xF8/\x90\xE8;i\x8E^\xA6\x17\x9C|\x05T.\x85\x953\xB4\x8B\x99S\xA2\xF56\x08\x01\x90\x82\x01R\x7F\x1B\xF8-\xEB\xA7\xD7I\x02\xC3p\x8C\xC6\xE7\x0Ea\xF3\x05\x12\xEC\xA9VU!\x0E'nXX\xCE\x8FX\xE5``\x82\x01R\x7F$L\xF0\x10\xC4<\xA8r7\xD8\xB0\x0B\xF9\xDDP\xC4\xC0\x1C\x7F\x08k\xD4\xE8\xC9 \xE7RQ\xD9o\r\"`\x80\x82\x01R\x90V[\x81` \x03a\x12\xF3WP`@\x80Q`\xA0\x81\x01\x82R`\x05\x81R` \x81\x01\x92\x90\x92R\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x90\x82\x01R\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0``\x82\x01R\x7F'$q6\x03\xBF\xBDy\n\xEA\xF3\xE7\xDF%\xD8\xE7\xEF\x8F1\x134\x90[M\x8C\x99\x98\x0C\xF2\x10\x97\x9D`\x80\x82\x01R\x90V[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x130`@Q\x80``\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[a\x13:\x84\x84a\x1B\x8FV[\x80\x82Ra\x13J\x90\x85\x90\x85\x90a\x1B\xE3V[` \x82\x01R\x80Qa\x13`\x90\x85\x90\x84\x90\x86\x90a\x1CIV[`@\x82\x01R\x93\x92PPPV[`\0\x80a\x13z\x85\x87\x89a\x1D\x9FV[\x90Pa\x13\x8A\x88\x86\x89\x89\x88\x88a\x1E\x8BV[a\rf\x81\x87\x86a!\x97V[a\x04\x9C\x82\x82a!\xE7V[` \x81\x81\x01Q\x80Q\x90\x82\x01Q\x83Q`@Q`\0\x94\x85\x94a\x13\xC7\x94\x90\x93\x90\x92\x90\x91\x86\x91\x01a:BV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\0\x83` \x01Q`\0`\x02\x81\x10a\x13\xF8Wa\x13\xF8a9\xBCV[` \x02\x01Q\x84` \x01Q`\x01`\x02\x81\x10a\x14\x14Wa\x14\x14a9\xBCV[` \x02\x01Q\x85`\0\x01Q`\x01`@Q` \x01a\x143\x94\x93\x92\x91\x90a:BV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x81\x84` \x01Q`\0`\x02\x81\x10a\x14cWa\x14ca9\xBCV[` \x02\x01\x81\x81RPP\x80\x84` \x01Q`\x01`\x02\x81\x10a\x14\x84Wa\x14\x84a9\xBCV[` \x02\x01\x81\x81RPPa\x02Za\x14\xC7\x83\x83`@Q` \x01a\x14\xAF\x92\x91\x90\x91\x82R` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`0a\"\x1AV[a#'V[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x82Q\x82Q\x14a\x151W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FMSM error: length does not match`D\x82\x01R`d\x01a\x04\x93V[a\x15o\x83`\0\x81Q\x81\x10a\x15GWa\x15Ga9\xBCV[` \x02` \x01\x01Q\x83`\0\x81Q\x81\x10a\x15bWa\x15ba9\xBCV[` \x02` \x01\x01Qa#\x9DV[\x90P`\x01[\x82Q\x81\x10\x15a\x15\xBFWa\x15\xB5\x82a\x15\xB0\x86\x84\x81Q\x81\x10a\x15\x96Wa\x15\x96a9\xBCV[` \x02` \x01\x01Q\x86\x85\x81Q\x81\x10a\x15bWa\x15ba9\xBCV[a$AV[\x91P`\x01\x01a\x15tV[P\x92\x91PPV[`\0a\x15\xE0`\0\x80Q` a:\xE3\x839\x81Q\x91R\x83a:xV[a\x15\xF8\x90`\0\x80Q` a:\xE3\x839\x81Q\x91Ra:\x9AV[\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x16&WP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a:\xC3\x839\x81Q\x91R\x84` \x01Qa\x16Y\x91\x90a:xV[a\x16q\x90`\0\x80Q` a:\xC3\x839\x81Q\x91Ra:\x9AV[\x90R\x92\x91PPV[a\x16\xA4`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x18 W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x04\x93V[P\x15\x15\x95\x94PPPPPV[\x81Q`@Qa\x18@\x91\x90\x83\x90` \x01a:\xADV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x90\x91RPV[`\xFEa\x18\x97\x84a\x18\x92a\x18h\x84a$\xE8V[`@Q` \x01a\x18z\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`\x04a\"\x1AV[a\x18,V[a\x18\xD5\x84a\x18\x92a\x18\xAB\x86`\0\x01Qa$\xE8V[`@Q` \x01a\x18\xBD\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`\0`\x08a\"\x1AV[a\x18\xE9\x84a\x18\x92a\x18\xAB\x86` \x01Qa$\xE8V[a\x18\xF4\x84`\x01a!\xE7V[a\x19\x1E\x84\x7F/\x8D\xD1\xF1\xA7X = ::ethers::contract::Lazy::new(__abi); #[rustfmt::skip] - const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15b\0\0\x11W`\0\x80\xFD[P`@Qb\0%\xB38\x03\x80b\0%\xB3\x839\x81\x01`@\x81\x90Rb\0\x004\x91b\0\0\x83V[`\x06\x80T`\x01`\x01`\xA0\x1B\x03\x93\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x91\x82\x16\x17\x90\x91U`\x07\x80T\x92\x90\x93\x16\x91\x16\x17\x90Ub\0\0\xBBV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\0~W`\0\x80\xFD[\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15b\0\0\x97W`\0\x80\xFD[b\0\0\xA2\x83b\0\0fV[\x91Pb\0\0\xB2` \x84\x01b\0\0fV[\x90P\x92P\x92\x90PV[a$\xE8\x80b\0\0\xCB`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01MW`\x005`\xE0\x1C\x80cw\x1FoD\x11a\0\xC3W\x80c\xBF\x82H\xDD\x11a\0|W\x80c\xBF\x82H\xDD\x14a\x02\xE6W\x80c\xC7,\xC7\x17\x14a\x02\xFEW\x80c\xC8L\x7F\xA1\x14a\x03\x11W\x80c\xD6{l\xA5\x14a\x03$W\x80c\xD8ni}\x14a\x03>W\x80c\xDD.\xD3\xEC\x14a\x03\xCCW`\0\x80\xFD[\x80cw\x1FoD\x14a\x024W\x80c\x8B\x0E\x9F?\x14a\x02gW\x80c\x9B0\xA5\xE6\x14a\x02\x82W\x80c\x9Dv\xEAX\x14a\x02\x95W\x80c\xB5p\x0Eh\x14a\x02\xC0W\x80c\xB6D\x8C\xF5\x14a\x02\xD3W`\0\x80\xFD[\x80cC\x17\xD0\x0B\x11a\x01\x15W\x80cC\x17\xD0\x0B\x14a\x01\xBBW\x80cH\x8B\xDA\xBC\x14a\x01\xD2W\x80cJ\xA7\xC2\x7F\x14a\x01\xF7W\x80cTL-v\x14a\x02\x1AW\x80cn\x8ENj\x14a\x02#W\x80cvg\x18\x08\x14a\x02,W`\0\x80\xFD[\x80c\x0C$\xAF\x18\x14a\x01RW\x80c\x16\xFE\xFE\xD7\x14a\x01\x82W\x80c*\xDD\xA1\xC1\x14a\x01\x93W\x80c,S\x05\x84\x14a\x01\xB3W\x80c;\t\xC2g\x14a\x01\xB3W[`\0\x80\xFD[a\x01ea\x01`6`\x04a\x1D\xC9V[a\x03\xDFV[`@Q`\x01`\x01`@\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[`\x05T`\x01`\x01`@\x1B\x03\x16a\x01eV[a\x01\xA6a\x01\xA16`\x04a\x1D\xC9V[a\x05hV[`@Qa\x01y\x91\x90a\x1E$V[a\x01ea\x06~V[a\x01\xC4`\x01T\x81V[`@Q\x90\x81R` \x01a\x01yV[`\0Ta\x01\xE2\x90c\xFF\xFF\xFF\xFF\x16\x81V[`@Qc\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\x01yV[a\x02\na\x02\x056`\x04a\x1D\xC9V[a\x06\x98V[`@Q\x90\x15\x15\x81R` \x01a\x01yV[a\x01\xC4`\x03T\x81V[a\x01\xC4`\x04T\x81V[a\x01ea\x08\xEEV[a\x02Ga\x02B6`\x04a\x1E\xACV[a\t\\V[`@\x80Q`\x01`\x01`@\x1B\x03\x93\x84\x16\x81R\x92\x90\x91\x16` \x83\x01R\x01a\x01yV[`\x03T`\x04T`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\x01yV[a\x01\xC4a\x02\x906`\x04a\x1D\xC9V[a\x0B\xC7V[`\x06Ta\x02\xA8\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01yV[`\x07Ta\x02\xA8\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`\x05Ta\x01e\x90`\x01`\x01`@\x1B\x03\x16\x81V[`\x05T`\x01`@\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16a\x01eV[a\x02\na\x03\x0C6`\x04a\x1F!V[a\x0C#V[a\x01ea\x03\x1F6`\x04a\x1F\xB8V[a\x0F\xF6V[`\x05Ta\x01e\x90`\x01`@\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16\x81V[a\x03\xBAa\x03L6`\x04a DV[`\x02` \x81\x81R`\0\x92\x83R`@\x92\x83\x90 \x80T`\x01\x82\x01T\x85Q\x80\x87\x01\x90\x96R\x93\x82\x01T\x85R`\x03\x90\x91\x01T\x91\x84\x01\x91\x90\x91R`\x01`\x01`\xA0\x1B\x03\x81\x16\x92`\xFF`\x01`\xA0\x1B\x83\x04\x16\x92`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x93\x04\x83\x16\x92\x81\x81\x16\x92`\x01`@\x1B\x90\x92\x04\x16\x90\x86V[`@Qa\x01y\x96\x95\x94\x93\x92\x91\x90a ]V[a\x01ea\x03\xDA6`\x04a\x1D\xC9V[a\x10\x1EV[`\0\x80a\x03\xEB\x83a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x049Wa\x049a\x1D\xECV[`\x01\x81\x11\x15a\x04JWa\x04Ja\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x90Pa\x04\xB5\x81a\x0F\xF6V[\x81`\x80\x01Qa\x04\xC4\x91\x90a \xCBV[`\x01`\x01`@\x1B\x03\x16a\x04\xD5a\x08\xEEV[`\x01`\x01`@\x1B\x03\x16\x10\x15a\x04\xFDW`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x81\x01Q`\x06T\x82Qa\x05$\x91`\x01`\x01`\xA0\x1B\x03\x16\x90`\x01`\x01`@\x1B\x03\x84\x16a\x10\xACV[`\0\x92\x83R`\x02` \x81\x90R`@\x84 \x80T`\x01`\x01`\xE8\x1B\x03\x19\x16\x81U`\x01\x81\x01\x80T`\x01`\x01`\x80\x1B\x03\x19\x16\x90U\x90\x81\x01\x84\x90U`\x03\x01\x92\x90\x92UP\x92\x91PPV[a\x05\xAD`@\x80Q`\xC0\x81\x01\x82R`\0\x80\x82R` \x80\x83\x01\x82\x90R\x82\x84\x01\x82\x90R``\x83\x01\x82\x90R`\x80\x83\x01\x82\x90R\x83Q\x80\x85\x01\x90\x94R\x81\x84R\x83\x01R\x90`\xA0\x82\x01R\x90V[`\x02`\0a\x05\xBA\x84a\x0B\xC7V[\x81R` \x80\x82\x01\x92\x90\x92R`@\x90\x81\x01`\0 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x91\x92\x90\x91\x90\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\x07Wa\x06\x07a\x1D\xECV[`\x01\x81\x11\x15a\x06\x18Wa\x06\x18a\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x92\x91PPV[`\0a\x06\x88a\x08\xEEV[a\x06\x93\x90`\x01a \xCBV[\x90P\x90V[`\0\x80a\x06\xA4\x83a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\xF2Wa\x06\xF2a\x1D\xECV[`\x01\x81\x11\x15a\x07\x03Wa\x07\x03a\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x163\x14a\x07\x90W`@Qc\xC8u\x9C\x17`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x80\x81\x01Q`\x01`\x01`@\x1B\x03\x16\x15a\x07\xBCW`@Qc7\xA8>\xD5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[``\x81\x01Qa\x07\xCC\x90`\x01a \xCBV[`\x01`\x01`@\x1B\x03\x16a\x07\xDDa\x08\xEEV[`\x01`\x01`@\x1B\x03\x16\x10\x15a\x08\x05W`@Qcxz\xEBS`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x000`\x01`\x01`\xA0\x1B\x03\x16c;\t\xC2g`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08i\x91\x90a \xEBV[`\0\x84\x81R`\x02` \x90\x81R`@\x91\x82\x90 `\x01\x01\x80To\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x19\x16`\x01`@\x1B`\x01`\x01`@\x1B\x03\x86\x16\x90\x81\x02\x91\x90\x91\x17\x90\x91U\x82Q\x87\x81R\x91\x82\x01R\x91\x92P\x7F\x1D\xA0\xACf\xB9>\xA1\xC8\xD3%\x14$\xE6W(\xBC\xEEZ\x7F\xB7Y\xA9G\x15c\xEF\x8Ef\x82\xBB\xD7\x11\x91\x01`@Q\x80\x91\x03\x90\xA1P`\x01\x94\x93PPPPV[`\x07T`@\x80Qc\x0E\xCC\xE3\x01`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91cvg\x18\x08\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\t8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\x93\x91\x90a \xEBV[`\0\x80`\0a\tj\x85a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\t\xB8Wa\t\xB8a\x1D\xECV[`\x01\x81\x11\x15a\t\xC9Wa\t\xC9a\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x163\x14a\nVW`@Qc\xC8u\x9C\x17`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\n`a\x08\xEEV[\x90P\x81``\x01Q`\x01`\x01`@\x1B\x03\x16\x81`\x01`\x01`@\x1B\x03\x16\x11a\n\x98W`@Qc)\x8Be\xF3`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x80\x82\x01Q`\x01`\x01`@\x1B\x03\x16\x15a\n\xC4W`@Qc7\xA8>\xD5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83\x81R`\x02` R`@\x90 \x80T\x87\x91\x90`\x15\x90a\n\xF5\x90\x84\x90`\x01`\xA8\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16a \xCBV[\x92Pa\x01\0\n\x81T\x81`\x01`\x01`@\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`@\x1B\x03\x16\x02\x17\x90UPa\x0BC`\x06`\0\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x1630\x89`\x01`\x01`@\x1B\x03\x16a\x113V[\x7F\x98\xE7\x83\xC3\x86K\xBFtJ\x05~\xF6\x05\xA2\xA6\x17\x01\xC3\xB6+^\xD6\x8B7E\xB9\x90\x94I}\xAF\x1Fa\x0Bm\x88a\x0B\xC7V[`@\x80Q\x91\x82R`\x01`\x01`@\x1B\x03\x89\x16` \x83\x01R\x01`@Q\x80\x91\x03\x90\xA1`\0a\x0B\x99\x82`\x01a \xCBV[`\0\x94\x85R`\x02` R`@\x90\x94 T`\x01`\xA8\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16\x98\x93\x97P\x92\x95PPPPPPV[`\0\x81`\0\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\x0C\x06\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\x80\x84`\x01\x81\x11\x15a\x0C8Wa\x0C8a\x1D\xECV[\x14a\x0CUW`@Qb\x11\xD7\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q3` \x82\x01R`\0\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x0C\x7F\x81\x85\x8Aa\x11\xCFV[`\x000`\x01`\x01`\xA0\x1B\x03\x16c,S\x05\x84`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\xBFW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\xE3\x91\x90a \xEBV[\x90P\x83`\x01`\x01`@\x1B\x03\x16\x81`\x01`\x01`@\x1B\x03\x16\x11\x15a\r0W`@Qc!\xDF\x8B\xC3`\xE1\x1B\x81R`\x01`\x01`@\x1B\x03\x80\x83\x16`\x04\x83\x01R\x85\x16`$\x82\x01R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\0a\r;\x8Aa\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\r\x89Wa\r\x89a\x1D\xECV[`\x01\x81\x11\x15a\r\x9AWa\r\x9Aa\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x16\x15a\x0E&W`@Qc\x0E\xB0\xD3\x13`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[3\x81R`\x01`\x01`@\x1B\x03\x89\x16`@\x82\x01R` \x81\x01\x88`\x01\x81\x11\x15a\x0ENWa\x0ENa\x1D\xECV[\x90\x81`\x01\x81\x11\x15a\x0EaWa\x0Eaa\x1D\xECV[\x90RP`\xA0\x81\x01\x8A\x90R`\x01`\x01`@\x1B\x03\x83\x16``\x82\x01R`\0\x82\x81R`\x02` \x90\x81R`@\x90\x91 \x82Q\x81T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91\x82\x17\x83U\x92\x84\x01Q\x84\x93\x90\x91\x83\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x01\x81\x11\x15a\x0E\xD6Wa\x0E\xD6a\x1D\xECV[\x02\x17\x90UP`@\x82\x01Q\x81Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA8\x1B\x19\x16`\x01`\xA8\x1B`\x01`\x01`@\x1B\x03\x92\x83\x16\x02\x17\x82U``\x83\x01Q`\x01\x83\x01\x80T`\x80\x86\x01Q\x92\x84\x16`\x01`\x01`\x80\x1B\x03\x19\x90\x91\x16\x17`\x01`@\x1B\x92\x90\x93\x16\x91\x90\x91\x02\x91\x90\x91\x17\x90U`\xA0\x90\x91\x01Q\x80Q`\x02\x83\x01U` \x01Q`\x03\x90\x91\x01U`\0\x88`\x01\x81\x11\x15a\x0FbWa\x0Fba\x1D\xECV[\x03a\x0F\xA8W\x88`\x01`\x01`@\x1B\x03\x16`\x03`\0\x82\x82Ta\x0F\x82\x91\x90a!\x08V[\x90\x91UPP`\x06Ta\x0F\xA8\x90`\x01`\x01`\xA0\x1B\x03\x1630`\x01`\x01`@\x1B\x03\x8D\x16a\x113V[\x7F\x8C\"\xDC2\xA9\xEE;6$\xF3\xF9\xF4\xF9\xBE\x14\x8Dxb^\xCD\x89<5\xE6\x9A\xB2\xFF\x0E\x0B\xFF\xC00\x82\x84\x8A\x8C`@Qa\x0F\xDD\x94\x93\x92\x91\x90a!!V[`@Q\x80\x91\x03\x90\xA1P`\x01\x9A\x99PPPPPPPPPPV[`\0`d\x82`@\x01Q`\x01`\x01`@\x1B\x03\x16\x11\x15a\x10\x16WP`\n\x91\x90PV[P`\x05\x91\x90PV[`@\x80Qc*\xDD\xA1\xC1`\xE0\x1B\x81R\x82Q`\x04\x82\x01R` \x83\x01Q`$\x82\x01R\x90\x82\x01Q`D\x82\x01R``\x82\x01Q`d\x82\x01R`\0\x90\x81\x900\x90c*\xDD\xA1\xC1\x90`\x84\x01`\xE0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10}W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xA1\x91\x90a!XV[`@\x01Q\x93\x92PPPV[`\0`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` `\0`D\x83`\0\x89Z\xF1=\x15`\x1F=\x11`\x01`\0Q\x14\x16\x17\x16\x91PP\x80a\x11-W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\r'V[PPPPV[`\0`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` `\0`d\x83`\0\x8AZ\xF1=\x15`\x1F=\x11`\x01`\0Q\x14\x16\x17\x16\x91PP\x80a\x11\xC8W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\r'V[PPPPPV[a\x11\xD8\x82a\x12\x81V[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a$\x98`$\x919\x90P`\0\x84\x82`@Q` \x01a\x12\n\x92\x91\x90a\"8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x12'\x83a\x13\x10V[`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x90R\x91\x93P\x91Pa\x12[\x81\x87a\x12N\x8Aa\x13\xE3V[a\x12Va\x14^V[a\x15/V[a\x12wW`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a$\xBC\x839\x81Q\x91R\x91\x82`\x03\x81\x80\x85\x80\t\x85\t\x08\x83\x82\x83\t\x14\x81\x15\x83\x15\x17\x19\x84\x83\x10\x85\x85\x10\x16\x16\x16\x93PPP\x81a\x13\x0BW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\r'V[PPPV[`\0\x80`\0a\x13\x1E\x84a\x16\x11V[\x90P`\0\x80Q` a$\xBC\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\x13GWa\x13Ga\"UV[\x84\x82\t\x90P\x82\x80a\x13ZWa\x13Za\"UV[\x82\x82\x08\x90P`\0\x80a\x13k\x83a\x18$V[\x92P\x90P[\x80a\x13\xD4W\x84\x80a\x13\x83Wa\x13\x83a\"UV[`\x01\x87\x08\x95P\x84\x80a\x13\x97Wa\x13\x97a\"UV[\x86\x87\t\x92P\x84\x80a\x13\xAAWa\x13\xAAa\"UV[\x86\x84\t\x92P\x84\x80a\x13\xBDWa\x13\xBDa\"UV[\x84\x84\x08\x92Pa\x13\xCB\x83a\x18$V[\x92P\x90Pa\x13pV[P\x93\x97\x93\x96P\x92\x94PPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x14\x0BWP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a$\xBC\x839\x81Q\x91R\x84` \x01Qa\x14>\x91\x90a\"kV[a\x14V\x90`\0\x80Q` a$\xBC\x839\x81Q\x91Ra\"\x8DV[\x90R\x92\x91PPV[a\x14\x89`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x16\x05W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\r'V[P\x15\x15\x95\x94PPPPPV[`\0\x80a\x16\x1D\x83a\x19\x1FV[\x80Q\x90\x91P`0\x81\x14a\x162Wa\x162a\"\xA0V[`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\x16LWa\x16La\x1C\xDAV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x16vW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x16\xE7W\x83`\x01a\x16\x91\x83\x86a\"\x8DV[a\x16\x9B\x91\x90a\"\x8DV[\x81Q\x81\x10a\x16\xABWa\x16\xABa\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x16\xC8Wa\x16\xC8a\"\xB6V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x16|V[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x17yW\x83\x81a\x17%\x85\x88a\"\x8DV[a\x17/\x91\x90a!\x08V[\x81Q\x81\x10a\x17?Wa\x17?a\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x17_Wa\x17_a\"\xB6V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x17\x11V[P`\0a\x17\x85\x82a\x1CrV[\x90Pa\x01\0`\0\x80Q` a$\xBC\x839\x81Q\x91R`\0a\x17\xA5\x86\x89a\"\x8DV[\x90P`\0[\x81\x81\x10\x15a\x18\x14W`\0\x88`\x01a\x17\xC1\x84\x86a\"\x8DV[a\x17\xCB\x91\x90a\"\x8DV[\x81Q\x81\x10a\x17\xDBWa\x17\xDBa\"\xB6V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x17\xF3Wa\x17\xF3a\"UV[\x85\x87\t\x95P\x83\x80a\x18\x06Wa\x18\x06a\"UV[\x81\x87\x08\x95PP`\x01\x01a\x17\xAAV[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0\x80\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P`\0`\0\x80Q` a$\xBC\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x86``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` `\0`\xC0\x83`\x05Z\xFA\x93PP`\0Q\x93P\x82a\x18\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\r'V[\x80`\x01\x85\x90\x1B\x11\x15a\x18\xFFWa\x18\xFC\x84\x82a\"\x8DV[\x93P[\x80\x80a\x19\rWa\x19\ra\"UV[\x84\x85\t\x91P\x85\x82\x14\x94PPPP\x91P\x91V[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x19`\x92\x91\x90a\"8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x19\x87\x92\x91\x90a\"\xCCV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x19\xA9\x91\x90a\"\xF8V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x19\xD3\x90\x83\x90\x83\x90` \x01a#\x12V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16`\x01`\x01`@\x1B\x03\x81\x11\x15a\x1ACWa\x1ACa\x1C\xDAV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x1AmW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x1A\x85\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\x1A\xF0W\x81\x81\x81Q\x81\x10a\x1A\xB4Wa\x1A\xB4a\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x1A\xD1Wa\x1A\xD1a\"\xB6V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x1A\x99V[P`\0\x84`@Q` \x01a\x1B\x06\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x1B\x9AW`\0\x83\x82\x81Q\x81\x10a\x1BAWa\x1BAa\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x1B^Wa\x1B^a\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x1B\x7F\x92\x91\x90a#7V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x1B%V[P\x86\x88\x87`@Q` \x01a\x1B\xB0\x93\x92\x91\x90a#\\V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x1B\xDE\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P`\0[a\x1B\xFF\x8A`\xFF\x8D\x16a\"\x8DV[\x81\x10\x15a\x1CaW\x82\x81\x81Q\x81\x10a\x1C\x18Wa\x1C\x18a\"\xB6V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x1C2\x83\x8Da!\x08V[\x81Q\x81\x10a\x1CBWa\x1CBa\"\xB6V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x1B\xF2V[P\x91\x9B\x9APPPPPPPPPPPV[`\0\x80\x80[\x83Q\x81\x10\x15a\x1C\xD3W\x83\x81\x81Q\x81\x10a\x1C\x92Wa\x1C\x92a\"\xB6V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x1C\xAA\x91\x90a#\x90V[a\x1C\xB5\x90`\x02a$\x8BV[a\x1C\xBF\x91\x90a#\x90V[a\x1C\xC9\x90\x83a!\x08V[\x91P`\x01\x01a\x1CwV[P\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x1D WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@R\x90V[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x1D WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0`\x80\x82\x84\x03\x12\x15a\x1DhW`\0\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x1D\x98WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[`\0`\x80\x82\x84\x03\x12\x15a\x1D\xDBW`\0\x80\xFD[a\x1D\xE5\x83\x83a\x1DVV[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x02\x81\x10a\x1E WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x81Q`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x80\x83\x01Q`\xE0\x83\x01\x91a\x1EH\x90\x84\x01\x82a\x1E\x02V[P`@\x83\x01Q`\x01`\x01`@\x1B\x03\x80\x82\x16`@\x85\x01R\x80``\x86\x01Q\x16``\x85\x01R\x80`\x80\x86\x01Q\x16`\x80\x85\x01RPP`\xA0\x83\x01Qa\x1C\xD3`\xA0\x84\x01\x82\x80Q\x82R` \x90\x81\x01Q\x91\x01RV[`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\x1E\xA9W`\0\x80\xFD[PV[`\0\x80`\xA0\x83\x85\x03\x12\x15a\x1E\xBFW`\0\x80\xFD[a\x1E\xC9\x84\x84a\x1DVV[\x91P`\x80\x83\x015a\x1E\xD9\x81a\x1E\x94V[\x80\x91PP\x92P\x92\x90PV[`\0`@\x82\x84\x03\x12\x15a\x1E\xF6W`\0\x80\xFD[a\x1E\xFEa\x1C\xF0V[\x90P\x815\x81R` \x82\x015` \x82\x01R\x92\x91PPV[`\x02\x81\x10a\x1E\xA9W`\0\x80\xFD[`\0\x80`\0\x80`\0\x80a\x01`\x87\x89\x03\x12\x15a\x1F;W`\0\x80\xFD[a\x1FE\x88\x88a\x1DVV[\x95Pa\x1FT\x88`\x80\x89\x01a\x1E\xE4V[\x94P`\xC0\x87\x015a\x1Fd\x81a\x1E\x94V[\x93P`\xE0\x87\x015a\x1Ft\x81a\x1F\x14V[\x92Pa\x1F\x84\x88a\x01\0\x89\x01a\x1E\xE4V[\x91Pa\x01@\x87\x015a\x1F\x95\x81a\x1E\x94V[\x80\x91PP\x92\x95P\x92\x95P\x92\x95V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x1E\xA9W`\0\x80\xFD[`\0`\xE0\x82\x84\x03\x12\x15a\x1F\xCAW`\0\x80\xFD[a\x1F\xD2a\x1D&V[\x825a\x1F\xDD\x81a\x1F\xA3V[\x81R` \x83\x015a\x1F\xED\x81a\x1F\x14V[` \x82\x01R`@\x83\x015a \0\x81a\x1E\x94V[`@\x82\x01R``\x83\x015a \x13\x81a\x1E\x94V[``\x82\x01R`\x80\x83\x015a &\x81a\x1E\x94V[`\x80\x82\x01Ra 8\x84`\xA0\x85\x01a\x1E\xE4V[`\xA0\x82\x01R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a VW`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x87\x16\x81R`\xE0\x81\x01a z` \x83\x01\x88a\x1E\x02V[`\x01`\x01`@\x1B\x03\x86\x81\x16`@\x84\x01R\x85\x81\x16``\x84\x01R\x84\x16`\x80\x83\x01R\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01R\x97\x96PPPPPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01`\x01`@\x1B\x03\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x1C\xD3Wa\x1C\xD3a \xB5V[`\0` \x82\x84\x03\x12\x15a \xFDW`\0\x80\xFD[\x81Qa\x1D\xE5\x81a\x1E\x94V[\x80\x82\x01\x80\x82\x11\x15a!\x1BWa!\x1Ba \xB5V[\x92\x91PPV[\x84\x81R`\x01`\x01`@\x1B\x03\x84\x81\x16` \x83\x01R`\x80\x82\x01\x90a!F`@\x84\x01\x86a\x1E\x02V[\x80\x84\x16``\x84\x01RP\x95\x94PPPPPV[`\0\x81\x83\x03`\xE0\x81\x12\x15a!kW`\0\x80\xFD[a!sa\x1D&V[\x83Qa!~\x81a\x1F\xA3V[\x81R` \x84\x01Qa!\x8E\x81a\x1F\x14V[` \x82\x01R`@\x84\x01Qa!\xA1\x81a\x1E\x94V[`@\x82\x01R``\x84\x01Qa!\xB4\x81a\x1E\x94V[``\x82\x01R`\x80\x84\x01Qa!\xC7\x81a\x1E\x94V[`\x80\x82\x01R`@`\x9F\x19\x83\x01\x12\x15a!\xDEW`\0\x80\xFD[a!\xE6a\x1C\xF0V[`\xA0\x85\x81\x01Q\x82R`\xC0\x90\x95\x01Q` \x82\x01R\x93\x81\x01\x93\x90\x93RP\x90\x92\x91PPV[`\0\x81Q`\0[\x81\x81\x10\x15a\")W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\"\x0FV[P`\0\x93\x01\x92\x83RP\x90\x91\x90PV[`\0a\"Ma\"G\x83\x86a\"\x08V[\x84a\"\x08V[\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\"\x88WcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x06\x90V[\x81\x81\x03\x81\x81\x11\x15a!\x1BWa!\x1Ba \xB5V[cNH{q`\xE0\x1B`\0R`\x01`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0a\"\xD8\x82\x85a\"\x08V[`\0\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[`\0a#\x04\x82\x84a\"\x08V[`\0\x81R`\x01\x01\x93\x92PPPV[`\0a#\x1E\x82\x85a\"\x08V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[`\0a#C\x82\x85a\"\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[`\0a#h\x82\x86a\"\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a!\x1BWa!\x1Ba \xB5V[`\x01\x81\x81[\x80\x85\x11\x15a#\xE2W\x81`\0\x19\x04\x82\x11\x15a#\xC8Wa#\xC8a \xB5V[\x80\x85\x16\x15a#\xD5W\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a#\xACV[P\x92P\x92\x90PV[`\0\x82a#\xF9WP`\x01a!\x1BV[\x81a$\x06WP`\0a!\x1BV[\x81`\x01\x81\x14a$\x1CW`\x02\x81\x14a$&Wa$BV[`\x01\x91PPa!\x1BV[`\xFF\x84\x11\x15a$7Wa$7a \xB5V[PP`\x01\x82\x1Ba!\x1BV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a$eWP\x81\x81\na!\x1BV[a$o\x83\x83a#\xA7V[\x80`\0\x19\x04\x82\x11\x15a$\x83Wa$\x83a \xB5V[\x02\x93\x92PPPV[`\0a\x1D\xE5\x83\x83a#\xEAV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n"; + const __BYTECODE: &[u8] = b"`\x80`@R4\x80\x15b\0\0\x11W`\0\x80\xFD[P`@Qb\0%\xEA8\x03\x80b\0%\xEA\x839\x81\x01`@\x81\x90Rb\0\x004\x91b\0\0\x83V[`\x06\x80T`\x01`\x01`\xA0\x1B\x03\x93\x84\x16`\x01`\x01`\xA0\x1B\x03\x19\x91\x82\x16\x17\x90\x91U`\x07\x80T\x92\x90\x93\x16\x91\x16\x17\x90Ub\0\0\xBBV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\0~W`\0\x80\xFD[\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15b\0\0\x97W`\0\x80\xFD[b\0\0\xA2\x83b\0\0fV[\x91Pb\0\0\xB2` \x84\x01b\0\0fV[\x90P\x92P\x92\x90PV[a%\x1F\x80b\0\0\xCB`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01MW`\x005`\xE0\x1C\x80cw\x1FoD\x11a\0\xC3W\x80c\xBF\x82H\xDD\x11a\0|W\x80c\xBF\x82H\xDD\x14a\x02\xE6W\x80c\xC7,\xC7\x17\x14a\x02\xFEW\x80c\xC8L\x7F\xA1\x14a\x03\x11W\x80c\xD6{l\xA5\x14a\x03$W\x80c\xD8ni}\x14a\x03>W\x80c\xDD.\xD3\xEC\x14a\x03\xCCW`\0\x80\xFD[\x80cw\x1FoD\x14a\x024W\x80c\x8B\x0E\x9F?\x14a\x02gW\x80c\x9B0\xA5\xE6\x14a\x02\x82W\x80c\x9Dv\xEAX\x14a\x02\x95W\x80c\xB5p\x0Eh\x14a\x02\xC0W\x80c\xB6D\x8C\xF5\x14a\x02\xD3W`\0\x80\xFD[\x80cC\x17\xD0\x0B\x11a\x01\x15W\x80cC\x17\xD0\x0B\x14a\x01\xBBW\x80cH\x8B\xDA\xBC\x14a\x01\xD2W\x80cJ\xA7\xC2\x7F\x14a\x01\xF7W\x80cTL-v\x14a\x02\x1AW\x80cn\x8ENj\x14a\x02#W\x80cvg\x18\x08\x14a\x02,W`\0\x80\xFD[\x80c\x0C$\xAF\x18\x14a\x01RW\x80c\x16\xFE\xFE\xD7\x14a\x01\x82W\x80c*\xDD\xA1\xC1\x14a\x01\x93W\x80c,S\x05\x84\x14a\x01\xB3W\x80c;\t\xC2g\x14a\x01\xB3W[`\0\x80\xFD[a\x01ea\x01`6`\x04a\x1D\xDFV[a\x03\xDFV[`@Q`\x01`\x01`@\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[`\x05T`\x01`\x01`@\x1B\x03\x16a\x01eV[a\x01\xA6a\x01\xA16`\x04a\x1D\xDFV[a\x05hV[`@Qa\x01y\x91\x90a\x1E:V[a\x01ea\x06~V[a\x01\xC4`\x01T\x81V[`@Q\x90\x81R` \x01a\x01yV[`\0Ta\x01\xE2\x90c\xFF\xFF\xFF\xFF\x16\x81V[`@Qc\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\x01yV[a\x02\na\x02\x056`\x04a\x1D\xDFV[a\x06\x98V[`@Q\x90\x15\x15\x81R` \x01a\x01yV[a\x01\xC4`\x03T\x81V[a\x01\xC4`\x04T\x81V[a\x01ea\x08\xEEV[a\x02Ga\x02B6`\x04a\x1E\xC2V[a\t\\V[`@\x80Q`\x01`\x01`@\x1B\x03\x93\x84\x16\x81R\x92\x90\x91\x16` \x83\x01R\x01a\x01yV[`\x03T`\x04T`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\x01yV[a\x01\xC4a\x02\x906`\x04a\x1D\xDFV[a\x0B\xC7V[`\x06Ta\x02\xA8\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01yV[`\x07Ta\x02\xA8\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`\x05Ta\x01e\x90`\x01`\x01`@\x1B\x03\x16\x81V[`\x05T`\x01`@\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16a\x01eV[a\x02\na\x03\x0C6`\x04a\x1F7V[a\x0C#V[a\x01ea\x03\x1F6`\x04a\x1F\xEFV[a\x0F\xF6V[`\x05Ta\x01e\x90`\x01`@\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16\x81V[a\x03\xBAa\x03L6`\x04a {V[`\x02` \x81\x81R`\0\x92\x83R`@\x92\x83\x90 \x80T`\x01\x82\x01T\x85Q\x80\x87\x01\x90\x96R\x93\x82\x01T\x85R`\x03\x90\x91\x01T\x91\x84\x01\x91\x90\x91R`\x01`\x01`\xA0\x1B\x03\x81\x16\x92`\xFF`\x01`\xA0\x1B\x83\x04\x16\x92`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x93\x04\x83\x16\x92\x81\x81\x16\x92`\x01`@\x1B\x90\x92\x04\x16\x90\x86V[`@Qa\x01y\x96\x95\x94\x93\x92\x91\x90a \x94V[a\x01ea\x03\xDA6`\x04a\x1D\xDFV[a\x10\x1EV[`\0\x80a\x03\xEB\x83a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x049Wa\x049a\x1E\x02V[`\x01\x81\x11\x15a\x04JWa\x04Ja\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x90Pa\x04\xB5\x81a\x0F\xF6V[\x81`\x80\x01Qa\x04\xC4\x91\x90a!\x02V[`\x01`\x01`@\x1B\x03\x16a\x04\xD5a\x08\xEEV[`\x01`\x01`@\x1B\x03\x16\x10\x15a\x04\xFDW`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x81\x01Q`\x06T\x82Qa\x05$\x91`\x01`\x01`\xA0\x1B\x03\x16\x90`\x01`\x01`@\x1B\x03\x84\x16a\x10\xACV[`\0\x92\x83R`\x02` \x81\x90R`@\x84 \x80T`\x01`\x01`\xE8\x1B\x03\x19\x16\x81U`\x01\x81\x01\x80T`\x01`\x01`\x80\x1B\x03\x19\x16\x90U\x90\x81\x01\x84\x90U`\x03\x01\x92\x90\x92UP\x92\x91PPV[a\x05\xAD`@\x80Q`\xC0\x81\x01\x82R`\0\x80\x82R` \x80\x83\x01\x82\x90R\x82\x84\x01\x82\x90R``\x83\x01\x82\x90R`\x80\x83\x01\x82\x90R\x83Q\x80\x85\x01\x90\x94R\x81\x84R\x83\x01R\x90`\xA0\x82\x01R\x90V[`\x02`\0a\x05\xBA\x84a\x0B\xC7V[\x81R` \x80\x82\x01\x92\x90\x92R`@\x90\x81\x01`\0 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x91\x92\x90\x91\x90\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\x07Wa\x06\x07a\x1E\x02V[`\x01\x81\x11\x15a\x06\x18Wa\x06\x18a\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x92\x91PPV[`\0a\x06\x88a\x08\xEEV[a\x06\x93\x90`\x01a!\x02V[\x90P\x90V[`\0\x80a\x06\xA4\x83a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\xF2Wa\x06\xF2a\x1E\x02V[`\x01\x81\x11\x15a\x07\x03Wa\x07\x03a\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x163\x14a\x07\x90W`@Qc\xC8u\x9C\x17`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x80\x81\x01Q`\x01`\x01`@\x1B\x03\x16\x15a\x07\xBCW`@Qc7\xA8>\xD5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[``\x81\x01Qa\x07\xCC\x90`\x01a!\x02V[`\x01`\x01`@\x1B\x03\x16a\x07\xDDa\x08\xEEV[`\x01`\x01`@\x1B\x03\x16\x10\x15a\x08\x05W`@Qcxz\xEBS`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x000`\x01`\x01`\xA0\x1B\x03\x16c;\t\xC2g`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08i\x91\x90a!\"V[`\0\x84\x81R`\x02` \x90\x81R`@\x91\x82\x90 `\x01\x01\x80To\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x19\x16`\x01`@\x1B`\x01`\x01`@\x1B\x03\x86\x16\x90\x81\x02\x91\x90\x91\x17\x90\x91U\x82Q\x87\x81R\x91\x82\x01R\x91\x92P\x7F\x1D\xA0\xACf\xB9>\xA1\xC8\xD3%\x14$\xE6W(\xBC\xEEZ\x7F\xB7Y\xA9G\x15c\xEF\x8Ef\x82\xBB\xD7\x11\x91\x01`@Q\x80\x91\x03\x90\xA1P`\x01\x94\x93PPPPV[`\x07T`@\x80Qc\x0E\xCC\xE3\x01`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91cvg\x18\x08\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\t8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\x93\x91\x90a!\"V[`\0\x80`\0a\tj\x85a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\t\xB8Wa\t\xB8a\x1E\x02V[`\x01\x81\x11\x15a\t\xC9Wa\t\xC9a\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x163\x14a\nVW`@Qc\xC8u\x9C\x17`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\n`a\x08\xEEV[\x90P\x81``\x01Q`\x01`\x01`@\x1B\x03\x16\x81`\x01`\x01`@\x1B\x03\x16\x11a\n\x98W`@Qc)\x8Be\xF3`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x80\x82\x01Q`\x01`\x01`@\x1B\x03\x16\x15a\n\xC4W`@Qc7\xA8>\xD5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83\x81R`\x02` R`@\x90 \x80T\x87\x91\x90`\x15\x90a\n\xF5\x90\x84\x90`\x01`\xA8\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16a!\x02V[\x92Pa\x01\0\n\x81T\x81`\x01`\x01`@\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`@\x1B\x03\x16\x02\x17\x90UPa\x0BC`\x06`\0\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x1630\x89`\x01`\x01`@\x1B\x03\x16a\x113V[\x7F\x98\xE7\x83\xC3\x86K\xBFtJ\x05~\xF6\x05\xA2\xA6\x17\x01\xC3\xB6+^\xD6\x8B7E\xB9\x90\x94I}\xAF\x1Fa\x0Bm\x88a\x0B\xC7V[`@\x80Q\x91\x82R`\x01`\x01`@\x1B\x03\x89\x16` \x83\x01R\x01`@Q\x80\x91\x03\x90\xA1`\0a\x0B\x99\x82`\x01a!\x02V[`\0\x94\x85R`\x02` R`@\x90\x94 T`\x01`\xA8\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16\x98\x93\x97P\x92\x95PPPPPPV[`\0\x81`\0\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\x0C\x06\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\x80\x84`\x01\x81\x11\x15a\x0C8Wa\x0C8a\x1E\x02V[\x14a\x0CUW`@Qb\x11\xD7\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q3` \x82\x01R`\0\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x0C\x7F\x81\x85\x8Aa\x11\xCFV[`\x000`\x01`\x01`\xA0\x1B\x03\x16c,S\x05\x84`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\xBFW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\xE3\x91\x90a!\"V[\x90P\x83`\x01`\x01`@\x1B\x03\x16\x81`\x01`\x01`@\x1B\x03\x16\x11\x15a\r0W`@Qc!\xDF\x8B\xC3`\xE1\x1B\x81R`\x01`\x01`@\x1B\x03\x80\x83\x16`\x04\x83\x01R\x85\x16`$\x82\x01R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\0a\r;\x8Aa\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\r\x89Wa\r\x89a\x1E\x02V[`\x01\x81\x11\x15a\r\x9AWa\r\x9Aa\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x16\x15a\x0E&W`@Qc\x0E\xB0\xD3\x13`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[3\x81R`\x01`\x01`@\x1B\x03\x89\x16`@\x82\x01R` \x81\x01\x88`\x01\x81\x11\x15a\x0ENWa\x0ENa\x1E\x02V[\x90\x81`\x01\x81\x11\x15a\x0EaWa\x0Eaa\x1E\x02V[\x90RP`\xA0\x81\x01\x8A\x90R`\x01`\x01`@\x1B\x03\x83\x16``\x82\x01R`\0\x82\x81R`\x02` \x90\x81R`@\x90\x91 \x82Q\x81T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91\x82\x17\x83U\x92\x84\x01Q\x84\x93\x90\x91\x83\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x01\x81\x11\x15a\x0E\xD6Wa\x0E\xD6a\x1E\x02V[\x02\x17\x90UP`@\x82\x01Q\x81Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA8\x1B\x19\x16`\x01`\xA8\x1B`\x01`\x01`@\x1B\x03\x92\x83\x16\x02\x17\x82U``\x83\x01Q`\x01\x83\x01\x80T`\x80\x86\x01Q\x92\x84\x16`\x01`\x01`\x80\x1B\x03\x19\x90\x91\x16\x17`\x01`@\x1B\x92\x90\x93\x16\x91\x90\x91\x02\x91\x90\x91\x17\x90U`\xA0\x90\x91\x01Q\x80Q`\x02\x83\x01U` \x01Q`\x03\x90\x91\x01U`\0\x88`\x01\x81\x11\x15a\x0FbWa\x0Fba\x1E\x02V[\x03a\x0F\xA8W\x88`\x01`\x01`@\x1B\x03\x16`\x03`\0\x82\x82Ta\x0F\x82\x91\x90a!?V[\x90\x91UPP`\x06Ta\x0F\xA8\x90`\x01`\x01`\xA0\x1B\x03\x1630`\x01`\x01`@\x1B\x03\x8D\x16a\x113V[\x7F\x8C\"\xDC2\xA9\xEE;6$\xF3\xF9\xF4\xF9\xBE\x14\x8Dxb^\xCD\x89<5\xE6\x9A\xB2\xFF\x0E\x0B\xFF\xC00\x82\x84\x8A\x8C`@Qa\x0F\xDD\x94\x93\x92\x91\x90a!XV[`@Q\x80\x91\x03\x90\xA1P`\x01\x9A\x99PPPPPPPPPPV[`\0`d\x82`@\x01Q`\x01`\x01`@\x1B\x03\x16\x11\x15a\x10\x16WP`\n\x91\x90PV[P`\x05\x91\x90PV[`@\x80Qc*\xDD\xA1\xC1`\xE0\x1B\x81R\x82Q`\x04\x82\x01R` \x83\x01Q`$\x82\x01R\x90\x82\x01Q`D\x82\x01R``\x82\x01Q`d\x82\x01R`\0\x90\x81\x900\x90c*\xDD\xA1\xC1\x90`\x84\x01`\xE0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10}W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xA1\x91\x90a!\x8FV[`@\x01Q\x93\x92PPPV[`\0`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` `\0`D\x83`\0\x89Z\xF1=\x15`\x1F=\x11`\x01`\0Q\x14\x16\x17\x16\x91PP\x80a\x11-W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\r'V[PPPPV[`\0`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` `\0`d\x83`\0\x8AZ\xF1=\x15`\x1F=\x11`\x01`\0Q\x14\x16\x17\x16\x91PP\x80a\x11\xC8W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\r'V[PPPPPV[a\x11\xD8\x82a\x12gV[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a$\xCF`$\x919\x90P`\0\x84\x82`@Q` \x01a\x12\n\x92\x91\x90a\"oV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0a\x12&\x82a\x13\x04V[\x90Pa\x12C\x81\x85a\x126\x88a\x13\xF6V[a\x12>a\x14qV[a\x15BV[a\x12_W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a$\xF3\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x12\x8FWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x12\xFFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\r'V[PPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0a\x13#\x83a\x16$V[\x90P`\0\x80Q` a$\xF3\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\x13LWa\x13La\"\x8CV[\x84\x82\t\x90P\x82\x80a\x13_Wa\x13_a\"\x8CV[\x82\x82\x08\x90P`\0\x80a\x13p\x83a\x187V[\x92P\x90P[\x80a\x13\xD9W\x84\x80a\x13\x88Wa\x13\x88a\"\x8CV[`\x01\x87\x08\x95P\x84\x80a\x13\x9CWa\x13\x9Ca\"\x8CV[\x86\x87\t\x92P\x84\x80a\x13\xAFWa\x13\xAFa\"\x8CV[\x86\x84\t\x92P\x84\x80a\x13\xC2Wa\x13\xC2a\"\x8CV[\x84\x84\x08\x92Pa\x13\xD0\x83a\x187V[\x92P\x90Pa\x13uV[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x14\x1EWP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a$\xF3\x839\x81Q\x91R\x84` \x01Qa\x14Q\x91\x90a\"\xA2V[a\x14i\x90`\0\x80Q` a$\xF3\x839\x81Q\x91Ra\"\xC4V[\x90R\x92\x91PPV[a\x14\x9C`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x16\x18W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\r'V[P\x15\x15\x95\x94PPPPPV[`\0\x80a\x160\x83a\x195V[\x80Q\x90\x91P`0\x81\x14a\x16EWa\x16Ea\"\xD7V[`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\x16_Wa\x16_a\x1C\xF0V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x16\x89W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x16\xFAW\x83`\x01a\x16\xA4\x83\x86a\"\xC4V[a\x16\xAE\x91\x90a\"\xC4V[\x81Q\x81\x10a\x16\xBEWa\x16\xBEa\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x16\xDBWa\x16\xDBa\"\xEDV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x16\x8FV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x17\x8CW\x83\x81a\x178\x85\x88a\"\xC4V[a\x17B\x91\x90a!?V[\x81Q\x81\x10a\x17RWa\x17Ra\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x17rWa\x17ra\"\xEDV[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x17$V[P`\0a\x17\x98\x82a\x1C\x88V[\x90Pa\x01\0`\0\x80Q` a$\xF3\x839\x81Q\x91R`\0a\x17\xB8\x86\x89a\"\xC4V[\x90P`\0[\x81\x81\x10\x15a\x18'W`\0\x88`\x01a\x17\xD4\x84\x86a\"\xC4V[a\x17\xDE\x91\x90a\"\xC4V[\x81Q\x81\x10a\x17\xEEWa\x17\xEEa\"\xEDV[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x18\x06Wa\x18\x06a\"\x8CV[\x85\x87\t\x95P\x83\x80a\x18\x19Wa\x18\x19a\"\x8CV[\x81\x87\x08\x95PP`\x01\x01a\x17\xBDV[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0\x80`\0\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P`\0`\0\x80Q` a$\xF3\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` `\0`\xC0\x83`\x05Z\xFA\x94PP`\0Q\x92P\x83a\x18\xFBW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\r'V[\x80`\x01\x84\x90\x1B\x11\x15a\x19\x14Wa\x19\x11\x83\x82a\"\xC4V[\x92P[\x80\x80a\x19\"Wa\x19\"a\"\x8CV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x19v\x92\x91\x90a\"oV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x19\x9D\x92\x91\x90a#\x03V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x19\xBF\x91\x90a#/V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x19\xE9\x90\x83\x90\x83\x90` \x01a#IV[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16`\x01`\x01`@\x1B\x03\x81\x11\x15a\x1AYWa\x1AYa\x1C\xF0V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x1A\x83W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x1A\x9B\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\x1B\x06W\x81\x81\x81Q\x81\x10a\x1A\xCAWa\x1A\xCAa\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x1A\xE7Wa\x1A\xE7a\"\xEDV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x1A\xAFV[P`\0\x84`@Q` \x01a\x1B\x1C\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x1B\xB0W`\0\x83\x82\x81Q\x81\x10a\x1BWWa\x1BWa\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x1BtWa\x1Bta\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x1B\x95\x92\x91\x90a#nV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x1B;V[P\x86\x88\x87`@Q` \x01a\x1B\xC6\x93\x92\x91\x90a#\x93V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x1B\xF4\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P`\0[a\x1C\x15\x8A`\xFF\x8D\x16a\"\xC4V[\x81\x10\x15a\x1CwW\x82\x81\x81Q\x81\x10a\x1C.Wa\x1C.a\"\xEDV[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x1CH\x83\x8Da!?V[\x81Q\x81\x10a\x1CXWa\x1CXa\"\xEDV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x1C\x08V[P\x91\x9B\x9APPPPPPPPPPPV[`\0\x80\x80[\x83Q\x81\x10\x15a\x1C\xE9W\x83\x81\x81Q\x81\x10a\x1C\xA8Wa\x1C\xA8a\"\xEDV[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x1C\xC0\x91\x90a#\xC7V[a\x1C\xCB\x90`\x02a$\xC2V[a\x1C\xD5\x91\x90a#\xC7V[a\x1C\xDF\x90\x83a!?V[\x91P`\x01\x01a\x1C\x8DV[P\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x1D6WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@R\x90V[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x1D6WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0`\x80\x82\x84\x03\x12\x15a\x1D~W`\0\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x1D\xAEWcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[`\0`\x80\x82\x84\x03\x12\x15a\x1D\xF1W`\0\x80\xFD[a\x1D\xFB\x83\x83a\x1DlV[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x02\x81\x10a\x1E6WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x81Q`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x80\x83\x01Q`\xE0\x83\x01\x91a\x1E^\x90\x84\x01\x82a\x1E\x18V[P`@\x83\x01Q`\x01`\x01`@\x1B\x03\x80\x82\x16`@\x85\x01R\x80``\x86\x01Q\x16``\x85\x01R\x80`\x80\x86\x01Q\x16`\x80\x85\x01RPP`\xA0\x83\x01Qa\x1C\xE9`\xA0\x84\x01\x82\x80Q\x82R` \x90\x81\x01Q\x91\x01RV[`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\x1E\xBFW`\0\x80\xFD[PV[`\0\x80`\xA0\x83\x85\x03\x12\x15a\x1E\xD5W`\0\x80\xFD[a\x1E\xDF\x84\x84a\x1DlV[\x91P`\x80\x83\x015a\x1E\xEF\x81a\x1E\xAAV[\x80\x91PP\x92P\x92\x90PV[`\0`@\x82\x84\x03\x12\x15a\x1F\x0CW`\0\x80\xFD[a\x1F\x14a\x1D\x06V[\x90P\x815\x81R` \x82\x015` \x82\x01R\x92\x91PPV[`\x02\x81\x10a\x1E\xBFW`\0\x80\xFD[`\0\x80`\0\x80`\0\x80\x86\x88\x03a\x01`\x81\x12\x15a\x1FRW`\0\x80\xFD[a\x1F\\\x89\x89a\x1DlV[\x96Pa\x1Fk\x89`\x80\x8A\x01a\x1E\xFAV[\x95P`\xC0\x88\x015a\x1F{\x81a\x1E\xAAV[\x94P`\xE0\x88\x015a\x1F\x8B\x81a\x1F*V[\x93P`@`\xFF\x19\x82\x01\x12\x15a\x1F\x9FW`\0\x80\xFD[Pa\x1F\xA8a\x1D\x06V[a\x01\0\x88\x015\x81Ra\x01 \x88\x015` \x82\x01R\x91Pa\x01@\x87\x015a\x1F\xCC\x81a\x1E\xAAV[\x80\x91PP\x92\x95P\x92\x95P\x92\x95V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x1E\xBFW`\0\x80\xFD[`\0`\xE0\x82\x84\x03\x12\x15a \x01W`\0\x80\xFD[a \ta\x1DW\x80c\xDD.\xD3\xEC\x14a\x03\xCCW`\0\x80\xFD[\x80cw\x1FoD\x14a\x024W\x80c\x8B\x0E\x9F?\x14a\x02gW\x80c\x9B0\xA5\xE6\x14a\x02\x82W\x80c\x9Dv\xEAX\x14a\x02\x95W\x80c\xB5p\x0Eh\x14a\x02\xC0W\x80c\xB6D\x8C\xF5\x14a\x02\xD3W`\0\x80\xFD[\x80cC\x17\xD0\x0B\x11a\x01\x15W\x80cC\x17\xD0\x0B\x14a\x01\xBBW\x80cH\x8B\xDA\xBC\x14a\x01\xD2W\x80cJ\xA7\xC2\x7F\x14a\x01\xF7W\x80cTL-v\x14a\x02\x1AW\x80cn\x8ENj\x14a\x02#W\x80cvg\x18\x08\x14a\x02,W`\0\x80\xFD[\x80c\x0C$\xAF\x18\x14a\x01RW\x80c\x16\xFE\xFE\xD7\x14a\x01\x82W\x80c*\xDD\xA1\xC1\x14a\x01\x93W\x80c,S\x05\x84\x14a\x01\xB3W\x80c;\t\xC2g\x14a\x01\xB3W[`\0\x80\xFD[a\x01ea\x01`6`\x04a\x1D\xC9V[a\x03\xDFV[`@Q`\x01`\x01`@\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[`\x05T`\x01`\x01`@\x1B\x03\x16a\x01eV[a\x01\xA6a\x01\xA16`\x04a\x1D\xC9V[a\x05hV[`@Qa\x01y\x91\x90a\x1E$V[a\x01ea\x06~V[a\x01\xC4`\x01T\x81V[`@Q\x90\x81R` \x01a\x01yV[`\0Ta\x01\xE2\x90c\xFF\xFF\xFF\xFF\x16\x81V[`@Qc\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\x01yV[a\x02\na\x02\x056`\x04a\x1D\xC9V[a\x06\x98V[`@Q\x90\x15\x15\x81R` \x01a\x01yV[a\x01\xC4`\x03T\x81V[a\x01\xC4`\x04T\x81V[a\x01ea\x08\xEEV[a\x02Ga\x02B6`\x04a\x1E\xACV[a\t\\V[`@\x80Q`\x01`\x01`@\x1B\x03\x93\x84\x16\x81R\x92\x90\x91\x16` \x83\x01R\x01a\x01yV[`\x03T`\x04T`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\x01yV[a\x01\xC4a\x02\x906`\x04a\x1D\xC9V[a\x0B\xC7V[`\x06Ta\x02\xA8\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01yV[`\x07Ta\x02\xA8\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`\x05Ta\x01e\x90`\x01`\x01`@\x1B\x03\x16\x81V[`\x05T`\x01`@\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16a\x01eV[a\x02\na\x03\x0C6`\x04a\x1F!V[a\x0C#V[a\x01ea\x03\x1F6`\x04a\x1F\xB8V[a\x0F\xF6V[`\x05Ta\x01e\x90`\x01`@\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16\x81V[a\x03\xBAa\x03L6`\x04a DV[`\x02` \x81\x81R`\0\x92\x83R`@\x92\x83\x90 \x80T`\x01\x82\x01T\x85Q\x80\x87\x01\x90\x96R\x93\x82\x01T\x85R`\x03\x90\x91\x01T\x91\x84\x01\x91\x90\x91R`\x01`\x01`\xA0\x1B\x03\x81\x16\x92`\xFF`\x01`\xA0\x1B\x83\x04\x16\x92`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x93\x04\x83\x16\x92\x81\x81\x16\x92`\x01`@\x1B\x90\x92\x04\x16\x90\x86V[`@Qa\x01y\x96\x95\x94\x93\x92\x91\x90a ]V[a\x01ea\x03\xDA6`\x04a\x1D\xC9V[a\x10\x1EV[`\0\x80a\x03\xEB\x83a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x049Wa\x049a\x1D\xECV[`\x01\x81\x11\x15a\x04JWa\x04Ja\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x90Pa\x04\xB5\x81a\x0F\xF6V[\x81`\x80\x01Qa\x04\xC4\x91\x90a \xCBV[`\x01`\x01`@\x1B\x03\x16a\x04\xD5a\x08\xEEV[`\x01`\x01`@\x1B\x03\x16\x10\x15a\x04\xFDW`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x81\x01Q`\x06T\x82Qa\x05$\x91`\x01`\x01`\xA0\x1B\x03\x16\x90`\x01`\x01`@\x1B\x03\x84\x16a\x10\xACV[`\0\x92\x83R`\x02` \x81\x90R`@\x84 \x80T`\x01`\x01`\xE8\x1B\x03\x19\x16\x81U`\x01\x81\x01\x80T`\x01`\x01`\x80\x1B\x03\x19\x16\x90U\x90\x81\x01\x84\x90U`\x03\x01\x92\x90\x92UP\x92\x91PPV[a\x05\xAD`@\x80Q`\xC0\x81\x01\x82R`\0\x80\x82R` \x80\x83\x01\x82\x90R\x82\x84\x01\x82\x90R``\x83\x01\x82\x90R`\x80\x83\x01\x82\x90R\x83Q\x80\x85\x01\x90\x94R\x81\x84R\x83\x01R\x90`\xA0\x82\x01R\x90V[`\x02`\0a\x05\xBA\x84a\x0B\xC7V[\x81R` \x80\x82\x01\x92\x90\x92R`@\x90\x81\x01`\0 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x91\x92\x90\x91\x90\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\x07Wa\x06\x07a\x1D\xECV[`\x01\x81\x11\x15a\x06\x18Wa\x06\x18a\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x92\x91PPV[`\0a\x06\x88a\x08\xEEV[a\x06\x93\x90`\x01a \xCBV[\x90P\x90V[`\0\x80a\x06\xA4\x83a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\xF2Wa\x06\xF2a\x1D\xECV[`\x01\x81\x11\x15a\x07\x03Wa\x07\x03a\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x163\x14a\x07\x90W`@Qc\xC8u\x9C\x17`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x80\x81\x01Q`\x01`\x01`@\x1B\x03\x16\x15a\x07\xBCW`@Qc7\xA8>\xD5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[``\x81\x01Qa\x07\xCC\x90`\x01a \xCBV[`\x01`\x01`@\x1B\x03\x16a\x07\xDDa\x08\xEEV[`\x01`\x01`@\x1B\x03\x16\x10\x15a\x08\x05W`@Qcxz\xEBS`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x000`\x01`\x01`\xA0\x1B\x03\x16c;\t\xC2g`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08i\x91\x90a \xEBV[`\0\x84\x81R`\x02` \x90\x81R`@\x91\x82\x90 `\x01\x01\x80To\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x19\x16`\x01`@\x1B`\x01`\x01`@\x1B\x03\x86\x16\x90\x81\x02\x91\x90\x91\x17\x90\x91U\x82Q\x87\x81R\x91\x82\x01R\x91\x92P\x7F\x1D\xA0\xACf\xB9>\xA1\xC8\xD3%\x14$\xE6W(\xBC\xEEZ\x7F\xB7Y\xA9G\x15c\xEF\x8Ef\x82\xBB\xD7\x11\x91\x01`@Q\x80\x91\x03\x90\xA1P`\x01\x94\x93PPPPV[`\x07T`@\x80Qc\x0E\xCC\xE3\x01`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91cvg\x18\x08\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\t8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\x93\x91\x90a \xEBV[`\0\x80`\0a\tj\x85a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\t\xB8Wa\t\xB8a\x1D\xECV[`\x01\x81\x11\x15a\t\xC9Wa\t\xC9a\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x163\x14a\nVW`@Qc\xC8u\x9C\x17`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\n`a\x08\xEEV[\x90P\x81``\x01Q`\x01`\x01`@\x1B\x03\x16\x81`\x01`\x01`@\x1B\x03\x16\x11a\n\x98W`@Qc)\x8Be\xF3`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x80\x82\x01Q`\x01`\x01`@\x1B\x03\x16\x15a\n\xC4W`@Qc7\xA8>\xD5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83\x81R`\x02` R`@\x90 \x80T\x87\x91\x90`\x15\x90a\n\xF5\x90\x84\x90`\x01`\xA8\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16a \xCBV[\x92Pa\x01\0\n\x81T\x81`\x01`\x01`@\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`@\x1B\x03\x16\x02\x17\x90UPa\x0BC`\x06`\0\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x1630\x89`\x01`\x01`@\x1B\x03\x16a\x113V[\x7F\x98\xE7\x83\xC3\x86K\xBFtJ\x05~\xF6\x05\xA2\xA6\x17\x01\xC3\xB6+^\xD6\x8B7E\xB9\x90\x94I}\xAF\x1Fa\x0Bm\x88a\x0B\xC7V[`@\x80Q\x91\x82R`\x01`\x01`@\x1B\x03\x89\x16` \x83\x01R\x01`@Q\x80\x91\x03\x90\xA1`\0a\x0B\x99\x82`\x01a \xCBV[`\0\x94\x85R`\x02` R`@\x90\x94 T`\x01`\xA8\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16\x98\x93\x97P\x92\x95PPPPPPV[`\0\x81`\0\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\x0C\x06\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\x80\x84`\x01\x81\x11\x15a\x0C8Wa\x0C8a\x1D\xECV[\x14a\x0CUW`@Qb\x11\xD7\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q3` \x82\x01R`\0\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x0C\x7F\x81\x85\x8Aa\x11\xCFV[`\x000`\x01`\x01`\xA0\x1B\x03\x16c,S\x05\x84`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\xBFW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\xE3\x91\x90a \xEBV[\x90P\x83`\x01`\x01`@\x1B\x03\x16\x81`\x01`\x01`@\x1B\x03\x16\x11\x15a\r0W`@Qc!\xDF\x8B\xC3`\xE1\x1B\x81R`\x01`\x01`@\x1B\x03\x80\x83\x16`\x04\x83\x01R\x85\x16`$\x82\x01R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\0a\r;\x8Aa\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\r\x89Wa\r\x89a\x1D\xECV[`\x01\x81\x11\x15a\r\x9AWa\r\x9Aa\x1D\xECV[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x16\x15a\x0E&W`@Qc\x0E\xB0\xD3\x13`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[3\x81R`\x01`\x01`@\x1B\x03\x89\x16`@\x82\x01R` \x81\x01\x88`\x01\x81\x11\x15a\x0ENWa\x0ENa\x1D\xECV[\x90\x81`\x01\x81\x11\x15a\x0EaWa\x0Eaa\x1D\xECV[\x90RP`\xA0\x81\x01\x8A\x90R`\x01`\x01`@\x1B\x03\x83\x16``\x82\x01R`\0\x82\x81R`\x02` \x90\x81R`@\x90\x91 \x82Q\x81T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91\x82\x17\x83U\x92\x84\x01Q\x84\x93\x90\x91\x83\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x01\x81\x11\x15a\x0E\xD6Wa\x0E\xD6a\x1D\xECV[\x02\x17\x90UP`@\x82\x01Q\x81Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA8\x1B\x19\x16`\x01`\xA8\x1B`\x01`\x01`@\x1B\x03\x92\x83\x16\x02\x17\x82U``\x83\x01Q`\x01\x83\x01\x80T`\x80\x86\x01Q\x92\x84\x16`\x01`\x01`\x80\x1B\x03\x19\x90\x91\x16\x17`\x01`@\x1B\x92\x90\x93\x16\x91\x90\x91\x02\x91\x90\x91\x17\x90U`\xA0\x90\x91\x01Q\x80Q`\x02\x83\x01U` \x01Q`\x03\x90\x91\x01U`\0\x88`\x01\x81\x11\x15a\x0FbWa\x0Fba\x1D\xECV[\x03a\x0F\xA8W\x88`\x01`\x01`@\x1B\x03\x16`\x03`\0\x82\x82Ta\x0F\x82\x91\x90a!\x08V[\x90\x91UPP`\x06Ta\x0F\xA8\x90`\x01`\x01`\xA0\x1B\x03\x1630`\x01`\x01`@\x1B\x03\x8D\x16a\x113V[\x7F\x8C\"\xDC2\xA9\xEE;6$\xF3\xF9\xF4\xF9\xBE\x14\x8Dxb^\xCD\x89<5\xE6\x9A\xB2\xFF\x0E\x0B\xFF\xC00\x82\x84\x8A\x8C`@Qa\x0F\xDD\x94\x93\x92\x91\x90a!!V[`@Q\x80\x91\x03\x90\xA1P`\x01\x9A\x99PPPPPPPPPPV[`\0`d\x82`@\x01Q`\x01`\x01`@\x1B\x03\x16\x11\x15a\x10\x16WP`\n\x91\x90PV[P`\x05\x91\x90PV[`@\x80Qc*\xDD\xA1\xC1`\xE0\x1B\x81R\x82Q`\x04\x82\x01R` \x83\x01Q`$\x82\x01R\x90\x82\x01Q`D\x82\x01R``\x82\x01Q`d\x82\x01R`\0\x90\x81\x900\x90c*\xDD\xA1\xC1\x90`\x84\x01`\xE0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10}W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xA1\x91\x90a!XV[`@\x01Q\x93\x92PPPV[`\0`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` `\0`D\x83`\0\x89Z\xF1=\x15`\x1F=\x11`\x01`\0Q\x14\x16\x17\x16\x91PP\x80a\x11-W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\r'V[PPPPV[`\0`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` `\0`d\x83`\0\x8AZ\xF1=\x15`\x1F=\x11`\x01`\0Q\x14\x16\x17\x16\x91PP\x80a\x11\xC8W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\r'V[PPPPPV[a\x11\xD8\x82a\x12\x81V[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a$\x98`$\x919\x90P`\0\x84\x82`@Q` \x01a\x12\n\x92\x91\x90a\"8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0\x80a\x12'\x83a\x13\x10V[`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x90R\x91\x93P\x91Pa\x12[\x81\x87a\x12N\x8Aa\x13\xE3V[a\x12Va\x14^V[a\x15/V[a\x12wW`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a$\xBC\x839\x81Q\x91R\x91\x82`\x03\x81\x80\x85\x80\t\x85\t\x08\x83\x82\x83\t\x14\x81\x15\x83\x15\x17\x19\x84\x83\x10\x85\x85\x10\x16\x16\x16\x93PPP\x81a\x13\x0BW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\r'V[PPPV[`\0\x80`\0a\x13\x1E\x84a\x16\x11V[\x90P`\0\x80Q` a$\xBC\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\x13GWa\x13Ga\"UV[\x84\x82\t\x90P\x82\x80a\x13ZWa\x13Za\"UV[\x82\x82\x08\x90P`\0\x80a\x13k\x83a\x18$V[\x92P\x90P[\x80a\x13\xD4W\x84\x80a\x13\x83Wa\x13\x83a\"UV[`\x01\x87\x08\x95P\x84\x80a\x13\x97Wa\x13\x97a\"UV[\x86\x87\t\x92P\x84\x80a\x13\xAAWa\x13\xAAa\"UV[\x86\x84\t\x92P\x84\x80a\x13\xBDWa\x13\xBDa\"UV[\x84\x84\x08\x92Pa\x13\xCB\x83a\x18$V[\x92P\x90Pa\x13pV[P\x93\x97\x93\x96P\x92\x94PPPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x14\x0BWP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a$\xBC\x839\x81Q\x91R\x84` \x01Qa\x14>\x91\x90a\"kV[a\x14V\x90`\0\x80Q` a$\xBC\x839\x81Q\x91Ra\"\x8DV[\x90R\x92\x91PPV[a\x14\x89`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R\x86Q`@\x82\x01R` \x87\x01Q``\x82\x01R`@\x87\x01Q`\x80\x82\x01R``\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R\x84Qa\x01\0\x82\x01R` \x85\x01Qa\x01 \x82\x01R`@\x85\x01Qa\x01@\x82\x01R``\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x16\x05W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\r'V[P\x15\x15\x95\x94PPPPPV[`\0\x80a\x16\x1D\x83a\x19\x1FV[\x80Q\x90\x91P`0\x81\x14a\x162Wa\x162a\"\xA0V[`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\x16LWa\x16La\x1C\xDAV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x16vW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x16\xE7W\x83`\x01a\x16\x91\x83\x86a\"\x8DV[a\x16\x9B\x91\x90a\"\x8DV[\x81Q\x81\x10a\x16\xABWa\x16\xABa\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x16\xC8Wa\x16\xC8a\"\xB6V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x16|V[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x17yW\x83\x81a\x17%\x85\x88a\"\x8DV[a\x17/\x91\x90a!\x08V[\x81Q\x81\x10a\x17?Wa\x17?a\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x17_Wa\x17_a\"\xB6V[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x17\x11V[P`\0a\x17\x85\x82a\x1CrV[\x90Pa\x01\0`\0\x80Q` a$\xBC\x839\x81Q\x91R`\0a\x17\xA5\x86\x89a\"\x8DV[\x90P`\0[\x81\x81\x10\x15a\x18\x14W`\0\x88`\x01a\x17\xC1\x84\x86a\"\x8DV[a\x17\xCB\x91\x90a\"\x8DV[\x81Q\x81\x10a\x17\xDBWa\x17\xDBa\"\xB6V[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x17\xF3Wa\x17\xF3a\"UV[\x85\x87\t\x95P\x83\x80a\x18\x06Wa\x18\x06a\"UV[\x81\x87\x08\x95PP`\x01\x01a\x17\xAAV[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0\x80\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P`\0`\0\x80Q` a$\xBC\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x86``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` `\0`\xC0\x83`\x05Z\xFA\x93PP`\0Q\x93P\x82a\x18\xE6W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\r'V[\x80`\x01\x85\x90\x1B\x11\x15a\x18\xFFWa\x18\xFC\x84\x82a\"\x8DV[\x93P[\x80\x80a\x19\rWa\x19\ra\"UV[\x84\x85\t\x91P\x85\x82\x14\x94PPPP\x91P\x91V[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x19`\x92\x91\x90a\"8V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x19\x87\x92\x91\x90a\"\xCCV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x19\xA9\x91\x90a\"\xF8V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x19\xD3\x90\x83\x90\x83\x90` \x01a#\x12V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16`\x01`\x01`@\x1B\x03\x81\x11\x15a\x1ACWa\x1ACa\x1C\xDAV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x1AmW` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x1A\x85\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\x1A\xF0W\x81\x81\x81Q\x81\x10a\x1A\xB4Wa\x1A\xB4a\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x1A\xD1Wa\x1A\xD1a\"\xB6V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x1A\x99V[P`\0\x84`@Q` \x01a\x1B\x06\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x1B\x9AW`\0\x83\x82\x81Q\x81\x10a\x1BAWa\x1BAa\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x1B^Wa\x1B^a\"\xB6V[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x1B\x7F\x92\x91\x90a#7V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x1B%V[P\x86\x88\x87`@Q` \x01a\x1B\xB0\x93\x92\x91\x90a#\\V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x1B\xDE\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P`\0[a\x1B\xFF\x8A`\xFF\x8D\x16a\"\x8DV[\x81\x10\x15a\x1CaW\x82\x81\x81Q\x81\x10a\x1C\x18Wa\x1C\x18a\"\xB6V[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x1C2\x83\x8Da!\x08V[\x81Q\x81\x10a\x1CBWa\x1CBa\"\xB6V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x1B\xF2V[P\x91\x9B\x9APPPPPPPPPPPV[`\0\x80\x80[\x83Q\x81\x10\x15a\x1C\xD3W\x83\x81\x81Q\x81\x10a\x1C\x92Wa\x1C\x92a\"\xB6V[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x1C\xAA\x91\x90a#\x90V[a\x1C\xB5\x90`\x02a$\x8BV[a\x1C\xBF\x91\x90a#\x90V[a\x1C\xC9\x90\x83a!\x08V[\x91P`\x01\x01a\x1CwV[P\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x1D WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@R\x90V[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x1D WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0`\x80\x82\x84\x03\x12\x15a\x1DhW`\0\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x1D\x98WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[`\0`\x80\x82\x84\x03\x12\x15a\x1D\xDBW`\0\x80\xFD[a\x1D\xE5\x83\x83a\x1DVV[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x02\x81\x10a\x1E WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x81Q`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x80\x83\x01Q`\xE0\x83\x01\x91a\x1EH\x90\x84\x01\x82a\x1E\x02V[P`@\x83\x01Q`\x01`\x01`@\x1B\x03\x80\x82\x16`@\x85\x01R\x80``\x86\x01Q\x16``\x85\x01R\x80`\x80\x86\x01Q\x16`\x80\x85\x01RPP`\xA0\x83\x01Qa\x1C\xD3`\xA0\x84\x01\x82\x80Q\x82R` \x90\x81\x01Q\x91\x01RV[`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\x1E\xA9W`\0\x80\xFD[PV[`\0\x80`\xA0\x83\x85\x03\x12\x15a\x1E\xBFW`\0\x80\xFD[a\x1E\xC9\x84\x84a\x1DVV[\x91P`\x80\x83\x015a\x1E\xD9\x81a\x1E\x94V[\x80\x91PP\x92P\x92\x90PV[`\0`@\x82\x84\x03\x12\x15a\x1E\xF6W`\0\x80\xFD[a\x1E\xFEa\x1C\xF0V[\x90P\x815\x81R` \x82\x015` \x82\x01R\x92\x91PPV[`\x02\x81\x10a\x1E\xA9W`\0\x80\xFD[`\0\x80`\0\x80`\0\x80a\x01`\x87\x89\x03\x12\x15a\x1F;W`\0\x80\xFD[a\x1FE\x88\x88a\x1DVV[\x95Pa\x1FT\x88`\x80\x89\x01a\x1E\xE4V[\x94P`\xC0\x87\x015a\x1Fd\x81a\x1E\x94V[\x93P`\xE0\x87\x015a\x1Ft\x81a\x1F\x14V[\x92Pa\x1F\x84\x88a\x01\0\x89\x01a\x1E\xE4V[\x91Pa\x01@\x87\x015a\x1F\x95\x81a\x1E\x94V[\x80\x91PP\x92\x95P\x92\x95P\x92\x95V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x1E\xA9W`\0\x80\xFD[`\0`\xE0\x82\x84\x03\x12\x15a\x1F\xCAW`\0\x80\xFD[a\x1F\xD2a\x1D&V[\x825a\x1F\xDD\x81a\x1F\xA3V[\x81R` \x83\x015a\x1F\xED\x81a\x1F\x14V[` \x82\x01R`@\x83\x015a \0\x81a\x1E\x94V[`@\x82\x01R``\x83\x015a \x13\x81a\x1E\x94V[``\x82\x01R`\x80\x83\x015a &\x81a\x1E\x94V[`\x80\x82\x01Ra 8\x84`\xA0\x85\x01a\x1E\xE4V[`\xA0\x82\x01R\x93\x92PPPV[`\0` \x82\x84\x03\x12\x15a VW`\0\x80\xFD[P5\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x87\x16\x81R`\xE0\x81\x01a z` \x83\x01\x88a\x1E\x02V[`\x01`\x01`@\x1B\x03\x86\x81\x16`@\x84\x01R\x85\x81\x16``\x84\x01R\x84\x16`\x80\x83\x01R\x82Q`\xA0\x83\x01R` \x83\x01Q`\xC0\x83\x01R\x97\x96PPPPPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\x01`\x01`@\x1B\x03\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x1C\xD3Wa\x1C\xD3a \xB5V[`\0` \x82\x84\x03\x12\x15a \xFDW`\0\x80\xFD[\x81Qa\x1D\xE5\x81a\x1E\x94V[\x80\x82\x01\x80\x82\x11\x15a!\x1BWa!\x1Ba \xB5V[\x92\x91PPV[\x84\x81R`\x01`\x01`@\x1B\x03\x84\x81\x16` \x83\x01R`\x80\x82\x01\x90a!F`@\x84\x01\x86a\x1E\x02V[\x80\x84\x16``\x84\x01RP\x95\x94PPPPPV[`\0\x81\x83\x03`\xE0\x81\x12\x15a!kW`\0\x80\xFD[a!sa\x1D&V[\x83Qa!~\x81a\x1F\xA3V[\x81R` \x84\x01Qa!\x8E\x81a\x1F\x14V[` \x82\x01R`@\x84\x01Qa!\xA1\x81a\x1E\x94V[`@\x82\x01R``\x84\x01Qa!\xB4\x81a\x1E\x94V[``\x82\x01R`\x80\x84\x01Qa!\xC7\x81a\x1E\x94V[`\x80\x82\x01R`@`\x9F\x19\x83\x01\x12\x15a!\xDEW`\0\x80\xFD[a!\xE6a\x1C\xF0V[`\xA0\x85\x81\x01Q\x82R`\xC0\x90\x95\x01Q` \x82\x01R\x93\x81\x01\x93\x90\x93RP\x90\x92\x91PPV[`\0\x81Q`\0[\x81\x81\x10\x15a\")W` \x81\x85\x01\x81\x01Q\x86\x83\x01R\x01a\"\x0FV[P`\0\x93\x01\x92\x83RP\x90\x91\x90PV[`\0a\"Ma\"G\x83\x86a\"\x08V[\x84a\"\x08V[\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a\"\x88WcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x06\x90V[\x81\x81\x03\x81\x81\x11\x15a!\x1BWa!\x1Ba \xB5V[cNH{q`\xE0\x1B`\0R`\x01`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0a\"\xD8\x82\x85a\"\x08V[`\0\x81R`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16`\x01\x84\x01RPP`\x02\x01\x91\x90PV[`\0a#\x04\x82\x84a\"\x08V[`\0\x81R`\x01\x01\x93\x92PPPV[`\0a#\x1E\x82\x85a\"\x08V[`\x01`\x01`\xF0\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x02\x01\x91\x90PV[`\0a#C\x82\x85a\"\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x93\x90\x93\x16\x83RPP`\x01\x01\x91\x90PV[`\0a#h\x82\x86a\"\x08V[`\x01`\x01`\xF8\x1B\x03\x19\x94\x90\x94\x16\x84RPP`\x01`\x01`\xF0\x1B\x03\x19\x16`\x01\x82\x01R`\x03\x01\x91\x90PV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a!\x1BWa!\x1Ba \xB5V[`\x01\x81\x81[\x80\x85\x11\x15a#\xE2W\x81`\0\x19\x04\x82\x11\x15a#\xC8Wa#\xC8a \xB5V[\x80\x85\x16\x15a#\xD5W\x91\x81\x02\x91[\x93\x84\x1C\x93\x90\x80\x02\x90a#\xACV[P\x92P\x92\x90PV[`\0\x82a#\xF9WP`\x01a!\x1BV[\x81a$\x06WP`\0a!\x1BV[\x81`\x01\x81\x14a$\x1CW`\x02\x81\x14a$&Wa$BV[`\x01\x91PPa!\x1BV[`\xFF\x84\x11\x15a$7Wa$7a \xB5V[PP`\x01\x82\x1Ba!\x1BV[P` \x83\x10a\x013\x83\x10\x16`N\x84\x10`\x0B\x84\x10\x16\x17\x15a$eWP\x81\x81\na!\x1BV[a$o\x83\x83a#\xA7V[\x80`\0\x19\x04\x82\x11\x15a$\x83Wa$\x83a \xB5V[\x02\x93\x92PPPV[`\0a\x1D\xE5\x83\x83a#\xEAV\xFEBLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\xA1dsolcC\0\x08\x17\0\n"; + const __DEPLOYED_BYTECODE: &[u8] = b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01MW`\x005`\xE0\x1C\x80cw\x1FoD\x11a\0\xC3W\x80c\xBF\x82H\xDD\x11a\0|W\x80c\xBF\x82H\xDD\x14a\x02\xE6W\x80c\xC7,\xC7\x17\x14a\x02\xFEW\x80c\xC8L\x7F\xA1\x14a\x03\x11W\x80c\xD6{l\xA5\x14a\x03$W\x80c\xD8ni}\x14a\x03>W\x80c\xDD.\xD3\xEC\x14a\x03\xCCW`\0\x80\xFD[\x80cw\x1FoD\x14a\x024W\x80c\x8B\x0E\x9F?\x14a\x02gW\x80c\x9B0\xA5\xE6\x14a\x02\x82W\x80c\x9Dv\xEAX\x14a\x02\x95W\x80c\xB5p\x0Eh\x14a\x02\xC0W\x80c\xB6D\x8C\xF5\x14a\x02\xD3W`\0\x80\xFD[\x80cC\x17\xD0\x0B\x11a\x01\x15W\x80cC\x17\xD0\x0B\x14a\x01\xBBW\x80cH\x8B\xDA\xBC\x14a\x01\xD2W\x80cJ\xA7\xC2\x7F\x14a\x01\xF7W\x80cTL-v\x14a\x02\x1AW\x80cn\x8ENj\x14a\x02#W\x80cvg\x18\x08\x14a\x02,W`\0\x80\xFD[\x80c\x0C$\xAF\x18\x14a\x01RW\x80c\x16\xFE\xFE\xD7\x14a\x01\x82W\x80c*\xDD\xA1\xC1\x14a\x01\x93W\x80c,S\x05\x84\x14a\x01\xB3W\x80c;\t\xC2g\x14a\x01\xB3W[`\0\x80\xFD[a\x01ea\x01`6`\x04a\x1D\xDFV[a\x03\xDFV[`@Q`\x01`\x01`@\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[`\x05T`\x01`\x01`@\x1B\x03\x16a\x01eV[a\x01\xA6a\x01\xA16`\x04a\x1D\xDFV[a\x05hV[`@Qa\x01y\x91\x90a\x1E:V[a\x01ea\x06~V[a\x01\xC4`\x01T\x81V[`@Q\x90\x81R` \x01a\x01yV[`\0Ta\x01\xE2\x90c\xFF\xFF\xFF\xFF\x16\x81V[`@Qc\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\x01yV[a\x02\na\x02\x056`\x04a\x1D\xDFV[a\x06\x98V[`@Q\x90\x15\x15\x81R` \x01a\x01yV[a\x01\xC4`\x03T\x81V[a\x01\xC4`\x04T\x81V[a\x01ea\x08\xEEV[a\x02Ga\x02B6`\x04a\x1E\xC2V[a\t\\V[`@\x80Q`\x01`\x01`@\x1B\x03\x93\x84\x16\x81R\x92\x90\x91\x16` \x83\x01R\x01a\x01yV[`\x03T`\x04T`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\x01yV[a\x01\xC4a\x02\x906`\x04a\x1D\xDFV[a\x0B\xC7V[`\x06Ta\x02\xA8\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x01yV[`\x07Ta\x02\xA8\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`\x05Ta\x01e\x90`\x01`\x01`@\x1B\x03\x16\x81V[`\x05T`\x01`@\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16a\x01eV[a\x02\na\x03\x0C6`\x04a\x1F7V[a\x0C#V[a\x01ea\x03\x1F6`\x04a\x1F\xEFV[a\x0F\xF6V[`\x05Ta\x01e\x90`\x01`@\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16\x81V[a\x03\xBAa\x03L6`\x04a {V[`\x02` \x81\x81R`\0\x92\x83R`@\x92\x83\x90 \x80T`\x01\x82\x01T\x85Q\x80\x87\x01\x90\x96R\x93\x82\x01T\x85R`\x03\x90\x91\x01T\x91\x84\x01\x91\x90\x91R`\x01`\x01`\xA0\x1B\x03\x81\x16\x92`\xFF`\x01`\xA0\x1B\x83\x04\x16\x92`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x93\x04\x83\x16\x92\x81\x81\x16\x92`\x01`@\x1B\x90\x92\x04\x16\x90\x86V[`@Qa\x01y\x96\x95\x94\x93\x92\x91\x90a \x94V[a\x01ea\x03\xDA6`\x04a\x1D\xDFV[a\x10\x1EV[`\0\x80a\x03\xEB\x83a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x049Wa\x049a\x1E\x02V[`\x01\x81\x11\x15a\x04JWa\x04Ja\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x90Pa\x04\xB5\x81a\x0F\xF6V[\x81`\x80\x01Qa\x04\xC4\x91\x90a!\x02V[`\x01`\x01`@\x1B\x03\x16a\x04\xD5a\x08\xEEV[`\x01`\x01`@\x1B\x03\x16\x10\x15a\x04\xFDW`@QcZwCW`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x81\x01Q`\x06T\x82Qa\x05$\x91`\x01`\x01`\xA0\x1B\x03\x16\x90`\x01`\x01`@\x1B\x03\x84\x16a\x10\xACV[`\0\x92\x83R`\x02` \x81\x90R`@\x84 \x80T`\x01`\x01`\xE8\x1B\x03\x19\x16\x81U`\x01\x81\x01\x80T`\x01`\x01`\x80\x1B\x03\x19\x16\x90U\x90\x81\x01\x84\x90U`\x03\x01\x92\x90\x92UP\x92\x91PPV[a\x05\xAD`@\x80Q`\xC0\x81\x01\x82R`\0\x80\x82R` \x80\x83\x01\x82\x90R\x82\x84\x01\x82\x90R``\x83\x01\x82\x90R`\x80\x83\x01\x82\x90R\x83Q\x80\x85\x01\x90\x94R\x81\x84R\x83\x01R\x90`\xA0\x82\x01R\x90V[`\x02`\0a\x05\xBA\x84a\x0B\xC7V[\x81R` \x80\x82\x01\x92\x90\x92R`@\x90\x81\x01`\0 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x91\x92\x90\x91\x90\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\x07Wa\x06\x07a\x1E\x02V[`\x01\x81\x11\x15a\x06\x18Wa\x06\x18a\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x92\x91PPV[`\0a\x06\x88a\x08\xEEV[a\x06\x93\x90`\x01a!\x02V[\x90P\x90V[`\0\x80a\x06\xA4\x83a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\x06\xF2Wa\x06\xF2a\x1E\x02V[`\x01\x81\x11\x15a\x07\x03Wa\x07\x03a\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x163\x14a\x07\x90W`@Qc\xC8u\x9C\x17`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x80\x81\x01Q`\x01`\x01`@\x1B\x03\x16\x15a\x07\xBCW`@Qc7\xA8>\xD5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[``\x81\x01Qa\x07\xCC\x90`\x01a!\x02V[`\x01`\x01`@\x1B\x03\x16a\x07\xDDa\x08\xEEV[`\x01`\x01`@\x1B\x03\x16\x10\x15a\x08\x05W`@Qcxz\xEBS`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x000`\x01`\x01`\xA0\x1B\x03\x16c;\t\xC2g`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08EW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08i\x91\x90a!\"V[`\0\x84\x81R`\x02` \x90\x81R`@\x91\x82\x90 `\x01\x01\x80To\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x19\x16`\x01`@\x1B`\x01`\x01`@\x1B\x03\x86\x16\x90\x81\x02\x91\x90\x91\x17\x90\x91U\x82Q\x87\x81R\x91\x82\x01R\x91\x92P\x7F\x1D\xA0\xACf\xB9>\xA1\xC8\xD3%\x14$\xE6W(\xBC\xEEZ\x7F\xB7Y\xA9G\x15c\xEF\x8Ef\x82\xBB\xD7\x11\x91\x01`@Q\x80\x91\x03\x90\xA1P`\x01\x94\x93PPPPV[`\x07T`@\x80Qc\x0E\xCC\xE3\x01`\xE3\x1B\x81R\x90Q`\0\x92`\x01`\x01`\xA0\x1B\x03\x16\x91cvg\x18\x08\x91`\x04\x80\x83\x01\x92` \x92\x91\x90\x82\x90\x03\x01\x81\x86Z\xFA\x15\x80\x15a\t8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\x93\x91\x90a!\"V[`\0\x80`\0a\tj\x85a\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\t\xB8Wa\t\xB8a\x1E\x02V[`\x01\x81\x11\x15a\t\xC9Wa\t\xC9a\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x163\x14a\nVW`@Qc\xC8u\x9C\x17`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\n`a\x08\xEEV[\x90P\x81``\x01Q`\x01`\x01`@\x1B\x03\x16\x81`\x01`\x01`@\x1B\x03\x16\x11a\n\x98W`@Qc)\x8Be\xF3`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x80\x82\x01Q`\x01`\x01`@\x1B\x03\x16\x15a\n\xC4W`@Qc7\xA8>\xD5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x83\x81R`\x02` R`@\x90 \x80T\x87\x91\x90`\x15\x90a\n\xF5\x90\x84\x90`\x01`\xA8\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16a!\x02V[\x92Pa\x01\0\n\x81T\x81`\x01`\x01`@\x1B\x03\x02\x19\x16\x90\x83`\x01`\x01`@\x1B\x03\x16\x02\x17\x90UPa\x0BC`\x06`\0\x90T\x90a\x01\0\n\x90\x04`\x01`\x01`\xA0\x1B\x03\x1630\x89`\x01`\x01`@\x1B\x03\x16a\x113V[\x7F\x98\xE7\x83\xC3\x86K\xBFtJ\x05~\xF6\x05\xA2\xA6\x17\x01\xC3\xB6+^\xD6\x8B7E\xB9\x90\x94I}\xAF\x1Fa\x0Bm\x88a\x0B\xC7V[`@\x80Q\x91\x82R`\x01`\x01`@\x1B\x03\x89\x16` \x83\x01R\x01`@Q\x80\x91\x03\x90\xA1`\0a\x0B\x99\x82`\x01a!\x02V[`\0\x94\x85R`\x02` R`@\x90\x94 T`\x01`\xA8\x1B\x90\x04`\x01`\x01`@\x1B\x03\x16\x98\x93\x97P\x92\x95PPPPPPV[`\0\x81`\0\x01Q\x82` \x01Q\x83`@\x01Q\x84``\x01Q`@Q` \x01a\x0C\x06\x94\x93\x92\x91\x90\x93\x84R` \x84\x01\x92\x90\x92R`@\x83\x01R``\x82\x01R`\x80\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[`\0\x80\x84`\x01\x81\x11\x15a\x0C8Wa\x0C8a\x1E\x02V[\x14a\x0CUW`@Qb\x11\xD7\xFB`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q3` \x82\x01R`\0\x91\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x0C\x7F\x81\x85\x8Aa\x11\xCFV[`\x000`\x01`\x01`\xA0\x1B\x03\x16c,S\x05\x84`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\xBFW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\xE3\x91\x90a!\"V[\x90P\x83`\x01`\x01`@\x1B\x03\x16\x81`\x01`\x01`@\x1B\x03\x16\x11\x15a\r0W`@Qc!\xDF\x8B\xC3`\xE1\x1B\x81R`\x01`\x01`@\x1B\x03\x80\x83\x16`\x04\x83\x01R\x85\x16`$\x82\x01R`D\x01[`@Q\x80\x91\x03\x90\xFD[`\0a\r;\x8Aa\x0B\xC7V[`\0\x81\x81R`\x02` \x90\x81R`@\x80\x83 \x81Q`\xC0\x81\x01\x90\x92R\x80T`\x01`\x01`\xA0\x1B\x03\x81\x16\x83R\x94\x95P\x92\x93\x90\x92\x91\x83\x01\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16`\x01\x81\x11\x15a\r\x89Wa\r\x89a\x1E\x02V[`\x01\x81\x11\x15a\r\x9AWa\r\x9Aa\x1E\x02V[\x81R\x81T`\x01`\x01`@\x1B\x03`\x01`\xA8\x1B\x90\x91\x04\x81\x16` \x80\x84\x01\x91\x90\x91R`\x01\x84\x01T\x80\x83\x16`@\x80\x86\x01\x91\x90\x91R`\x01`@\x1B\x90\x91\x04\x90\x92\x16``\x84\x01R\x81Q\x80\x83\x01\x90\x92R`\x02\x84\x01T\x82R`\x03\x90\x93\x01T\x92\x81\x01\x92\x90\x92R`\x80\x01R\x80Q\x90\x91P`\x01`\x01`\xA0\x1B\x03\x16\x15a\x0E&W`@Qc\x0E\xB0\xD3\x13`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[3\x81R`\x01`\x01`@\x1B\x03\x89\x16`@\x82\x01R` \x81\x01\x88`\x01\x81\x11\x15a\x0ENWa\x0ENa\x1E\x02V[\x90\x81`\x01\x81\x11\x15a\x0EaWa\x0Eaa\x1E\x02V[\x90RP`\xA0\x81\x01\x8A\x90R`\x01`\x01`@\x1B\x03\x83\x16``\x82\x01R`\0\x82\x81R`\x02` \x90\x81R`@\x90\x91 \x82Q\x81T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x91\x82\x17\x83U\x92\x84\x01Q\x84\x93\x90\x91\x83\x91`\x01`\x01`\xA8\x1B\x03\x19\x16\x17`\x01`\xA0\x1B\x83`\x01\x81\x11\x15a\x0E\xD6Wa\x0E\xD6a\x1E\x02V[\x02\x17\x90UP`@\x82\x01Q\x81Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\xA8\x1B\x19\x16`\x01`\xA8\x1B`\x01`\x01`@\x1B\x03\x92\x83\x16\x02\x17\x82U``\x83\x01Q`\x01\x83\x01\x80T`\x80\x86\x01Q\x92\x84\x16`\x01`\x01`\x80\x1B\x03\x19\x90\x91\x16\x17`\x01`@\x1B\x92\x90\x93\x16\x91\x90\x91\x02\x91\x90\x91\x17\x90U`\xA0\x90\x91\x01Q\x80Q`\x02\x83\x01U` \x01Q`\x03\x90\x91\x01U`\0\x88`\x01\x81\x11\x15a\x0FbWa\x0Fba\x1E\x02V[\x03a\x0F\xA8W\x88`\x01`\x01`@\x1B\x03\x16`\x03`\0\x82\x82Ta\x0F\x82\x91\x90a!?V[\x90\x91UPP`\x06Ta\x0F\xA8\x90`\x01`\x01`\xA0\x1B\x03\x1630`\x01`\x01`@\x1B\x03\x8D\x16a\x113V[\x7F\x8C\"\xDC2\xA9\xEE;6$\xF3\xF9\xF4\xF9\xBE\x14\x8Dxb^\xCD\x89<5\xE6\x9A\xB2\xFF\x0E\x0B\xFF\xC00\x82\x84\x8A\x8C`@Qa\x0F\xDD\x94\x93\x92\x91\x90a!XV[`@Q\x80\x91\x03\x90\xA1P`\x01\x9A\x99PPPPPPPPPPV[`\0`d\x82`@\x01Q`\x01`\x01`@\x1B\x03\x16\x11\x15a\x10\x16WP`\n\x91\x90PV[P`\x05\x91\x90PV[`@\x80Qc*\xDD\xA1\xC1`\xE0\x1B\x81R\x82Q`\x04\x82\x01R` \x83\x01Q`$\x82\x01R\x90\x82\x01Q`D\x82\x01R``\x82\x01Q`d\x82\x01R`\0\x90\x81\x900\x90c*\xDD\xA1\xC1\x90`\x84\x01`\xE0`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10}W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10\xA1\x91\x90a!\x8FV[`@\x01Q\x93\x92PPPV[`\0`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` `\0`D\x83`\0\x89Z\xF1=\x15`\x1F=\x11`\x01`\0Q\x14\x16\x17\x16\x91PP\x80a\x11-W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x0F`$\x82\x01Rn\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x90RS\x11Q`\x8A\x1B`D\x82\x01R`d\x01a\r'V[PPPPV[`\0`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R\x82`D\x82\x01R` `\0`d\x83`\0\x8AZ\xF1=\x15`\x1F=\x11`\x01`\0Q\x14\x16\x17\x16\x91PP\x80a\x11\xC8W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x14`$\x82\x01Rs\x15\x14\x90S\x94\xD1\x91T\x97\xD1\x94\x93\xD3W\xD1\x90RS\x11Q`b\x1B`D\x82\x01R`d\x01a\r'V[PPPPPV[a\x11\xD8\x82a\x12gV[`\0`@Q\x80``\x01`@R\x80`$\x81R` \x01a$\xCF`$\x919\x90P`\0\x84\x82`@Q` \x01a\x12\n\x92\x91\x90a\"oV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0a\x12&\x82a\x13\x04V[\x90Pa\x12C\x81\x85a\x126\x88a\x13\xF6V[a\x12>a\x14qV[a\x15BV[a\x12_W`@Qb\xCE\xD3\xE5`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPV[\x80Q` \x82\x01Q`\0\x91`\0\x80Q` a$\xF3\x839\x81Q\x91R\x91\x15\x90\x15\x16\x15a\x12\x8FWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x12\xFFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\r'V[PPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R`\0a\x13#\x83a\x16$V[\x90P`\0\x80Q` a$\xF3\x839\x81Q\x91R`\x03`\0\x82\x84\x85\t\x90P\x82\x80a\x13LWa\x13La\"\x8CV[\x84\x82\t\x90P\x82\x80a\x13_Wa\x13_a\"\x8CV[\x82\x82\x08\x90P`\0\x80a\x13p\x83a\x187V[\x92P\x90P[\x80a\x13\xD9W\x84\x80a\x13\x88Wa\x13\x88a\"\x8CV[`\x01\x87\x08\x95P\x84\x80a\x13\x9CWa\x13\x9Ca\"\x8CV[\x86\x87\t\x92P\x84\x80a\x13\xAFWa\x13\xAFa\"\x8CV[\x86\x84\t\x92P\x84\x80a\x13\xC2Wa\x13\xC2a\"\x8CV[\x84\x84\x08\x92Pa\x13\xD0\x83a\x187V[\x92P\x90Pa\x13uV[P`@\x80Q\x80\x82\x01\x90\x91R\x94\x85R` \x85\x01RP\x91\x94\x93PPPPV[`@\x80Q\x80\x82\x01\x90\x91R`\0\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x14\x1EWP\x90V[`@Q\x80`@\x01`@R\x80\x83`\0\x01Q\x81R` \x01`\0\x80Q` a$\xF3\x839\x81Q\x91R\x84` \x01Qa\x14Q\x91\x90a\"\xA2V[a\x14i\x90`\0\x80Q` a$\xF3\x839\x81Q\x91Ra\"\xC4V[\x90R\x92\x91PPV[a\x14\x9C`@Q\x80`\x80\x01`@R\x80`\0\x81R` \x01`\0\x81R` \x01`\0\x81R` \x01`\0\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[`\0\x80`\0`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` `\0a\x01\x80\x83`\x08Z\xFA\x91PP`\0Q\x91P\x80a\x16\x18W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\r'V[P\x15\x15\x95\x94PPPPPV[`\0\x80a\x160\x83a\x195V[\x80Q\x90\x91P`0\x81\x14a\x16EWa\x16Ea\"\xD7V[`\0\x81`\x01`\x01`@\x1B\x03\x81\x11\x15a\x16_Wa\x16_a\x1C\xF0V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x16\x89W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0[\x82\x81\x10\x15a\x16\xFAW\x83`\x01a\x16\xA4\x83\x86a\"\xC4V[a\x16\xAE\x91\x90a\"\xC4V[\x81Q\x81\x10a\x16\xBEWa\x16\xBEa\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x82\x82\x81Q\x81\x10a\x16\xDBWa\x16\xDBa\"\xEDV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x16\x8FV[P`@\x80Q`\x1F\x80\x82Ra\x04\0\x82\x01\x90\x92R`\0\x90\x82` \x82\x01a\x03\xE0\x806\x837\x01\x90PP\x90P`\0[\x82\x81\x10\x15a\x17\x8CW\x83\x81a\x178\x85\x88a\"\xC4V[a\x17B\x91\x90a!?V[\x81Q\x81\x10a\x17RWa\x17Ra\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B`\xF8\x1C\x82\x82\x81Q\x81\x10a\x17rWa\x17ra\"\xEDV[`\xFF\x90\x92\x16` \x92\x83\x02\x91\x90\x91\x01\x90\x91\x01R`\x01\x01a\x17$V[P`\0a\x17\x98\x82a\x1C\x88V[\x90Pa\x01\0`\0\x80Q` a$\xF3\x839\x81Q\x91R`\0a\x17\xB8\x86\x89a\"\xC4V[\x90P`\0[\x81\x81\x10\x15a\x18'W`\0\x88`\x01a\x17\xD4\x84\x86a\"\xC4V[a\x17\xDE\x91\x90a\"\xC4V[\x81Q\x81\x10a\x17\xEEWa\x17\xEEa\"\xEDV[\x01` \x01Q`\xF8\x1C\x90P\x83\x80a\x18\x06Wa\x18\x06a\"\x8CV[\x85\x87\t\x95P\x83\x80a\x18\x19Wa\x18\x19a\"\x8CV[\x81\x87\x08\x95PP`\x01\x01a\x17\xBDV[P\x92\x9A\x99PPPPPPPPPPV[`\0\x80`\0\x80`\0\x7F\x0C\x19\x13\x9C\xB8Lh\nn\x14\x11m\xA0`V\x17e\xE0Z\xA4Z\x1Cr\xA3O\x08#\x05\xB6\x1F?R\x90P`\0`\0\x80Q` a$\xF3\x839\x81Q\x91R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x87``\x82\x01R\x82`\x80\x82\x01R\x81`\xA0\x82\x01R` `\0`\xC0\x83`\x05Z\xFA\x94PP`\0Q\x92P\x83a\x18\xFBW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7Fpow precompile call failed!\0\0\0\0\0`D\x82\x01R`d\x01a\r'V[\x80`\x01\x84\x90\x1B\x11\x15a\x19\x14Wa\x19\x11\x83\x82a\"\xC4V[\x92P[\x80\x80a\x19\"Wa\x19\"a\"\x8CV[\x83\x84\t\x96\x90\x96\x14\x96\x91\x95P\x90\x93PPPPV[`@\x80Q`0\x80\x82R``\x82\x81\x01\x90\x93R\x90` \x90`\x01`\xF9\x1B\x90`\0\x90\x84` \x82\x01\x81\x806\x837\x01\x90PP\x90P\x80\x86`@Q` \x01a\x19v\x92\x91\x90a\"oV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80\x84`\xF8\x1B`@Q` \x01a\x19\x9D\x92\x91\x90a#\x03V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P\x80`@Q` \x01a\x19\xBF\x91\x90a#/V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90R\x91Pa\x01\x01`\xF0\x1B\x90a\x19\xE9\x90\x83\x90\x83\x90` \x01a#IV[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 \x81\x84\x01\x81\x90R`\x01`\xF8\x1B\x84\x84\x01R`\x01`\x01`\xF0\x1B\x03\x19\x85\x16`A\x85\x01R\x82Q`#\x81\x86\x03\x01\x81R`C\x90\x94\x01\x90\x92R\x82Q\x90\x83\x01 \x91\x93P\x90`\0`\xFF\x88\x16`\x01`\x01`@\x1B\x03\x81\x11\x15a\x1AYWa\x1AYa\x1C\xF0V[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x1A\x83W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\0\x82`@Q` \x01a\x1A\x9B\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x81Q\x81\x10\x15a\x1B\x06W\x81\x81\x81Q\x81\x10a\x1A\xCAWa\x1A\xCAa\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x82\x81Q\x81\x10a\x1A\xE7Wa\x1A\xE7a\"\xEDV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x1A\xAFV[P`\0\x84`@Q` \x01a\x1B\x1C\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R` \x83\x01\x90\x91R`\0\x80\x83R\x91\x98P\x91P[\x89\x81\x10\x15a\x1B\xB0W`\0\x83\x82\x81Q\x81\x10a\x1BWWa\x1BWa\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x83\x83\x81Q\x81\x10a\x1BtWa\x1Bta\"\xEDV[` \x01\x01Q`\xF8\x1C`\xF8\x1B\x18\x90P\x88\x81`@Q` \x01a\x1B\x95\x92\x91\x90a#nV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x98PP`\x01\x01a\x1B;V[P\x86\x88\x87`@Q` \x01a\x1B\xC6\x93\x92\x91\x90a#\x93V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96P\x86\x80Q\x90` \x01 \x93P\x83`@Q` \x01a\x1B\xF4\x91\x81R` \x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x91P`\0[a\x1C\x15\x8A`\xFF\x8D\x16a\"\xC4V[\x81\x10\x15a\x1CwW\x82\x81\x81Q\x81\x10a\x1C.Wa\x1C.a\"\xEDV[\x01` \x01Q`\x01`\x01`\xF8\x1B\x03\x19\x16\x84a\x1CH\x83\x8Da!?V[\x81Q\x81\x10a\x1CXWa\x1CXa\"\xEDV[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x01\x01a\x1C\x08V[P\x91\x9B\x9APPPPPPPPPPPV[`\0\x80\x80[\x83Q\x81\x10\x15a\x1C\xE9W\x83\x81\x81Q\x81\x10a\x1C\xA8Wa\x1C\xA8a\"\xEDV[` \x02` \x01\x01Q`\xFF\x16\x81`\x08a\x1C\xC0\x91\x90a#\xC7V[a\x1C\xCB\x90`\x02a$\xC2V[a\x1C\xD5\x91\x90a#\xC7V[a\x1C\xDF\x90\x83a!?V[\x91P`\x01\x01a\x1C\x8DV[P\x92\x91PPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@\x80Q\x90\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x1D6WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`@R\x90V[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x1D6WcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0`\x80\x82\x84\x03\x12\x15a\x1D~W`\0\x80\xFD[`@Q`\x80\x81\x01\x81\x81\x10`\x01`\x01`@\x1B\x03\x82\x11\x17\x15a\x1D\xAEWcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x80`@RP\x80\x91P\x825\x81R` \x83\x015` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[`\0`\x80\x82\x84\x03\x12\x15a\x1D\xF1W`\0\x80\xFD[a\x1D\xFB\x83\x83a\x1DlV[\x93\x92PPPV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x02\x81\x10a\x1E6WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x90RV[\x81Q`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x80\x83\x01Q`\xE0\x83\x01\x91a\x1E^\x90\x84\x01\x82a\x1E\x18V[P`@\x83\x01Q`\x01`\x01`@\x1B\x03\x80\x82\x16`@\x85\x01R\x80``\x86\x01Q\x16``\x85\x01R\x80`\x80\x86\x01Q\x16`\x80\x85\x01RPP`\xA0\x83\x01Qa\x1C\xE9`\xA0\x84\x01\x82\x80Q\x82R` \x90\x81\x01Q\x91\x01RV[`\x01`\x01`@\x1B\x03\x81\x16\x81\x14a\x1E\xBFW`\0\x80\xFD[PV[`\0\x80`\xA0\x83\x85\x03\x12\x15a\x1E\xD5W`\0\x80\xFD[a\x1E\xDF\x84\x84a\x1DlV[\x91P`\x80\x83\x015a\x1E\xEF\x81a\x1E\xAAV[\x80\x91PP\x92P\x92\x90PV[`\0`@\x82\x84\x03\x12\x15a\x1F\x0CW`\0\x80\xFD[a\x1F\x14a\x1D\x06V[\x90P\x815\x81R` \x82\x015` \x82\x01R\x92\x91PPV[`\x02\x81\x10a\x1E\xBFW`\0\x80\xFD[`\0\x80`\0\x80`\0\x80\x86\x88\x03a\x01`\x81\x12\x15a\x1FRW`\0\x80\xFD[a\x1F\\\x89\x89a\x1DlV[\x96Pa\x1Fk\x89`\x80\x8A\x01a\x1E\xFAV[\x95P`\xC0\x88\x015a\x1F{\x81a\x1E\xAAV[\x94P`\xE0\x88\x015a\x1F\x8B\x81a\x1F*V[\x93P`@`\xFF\x19\x82\x01\x12\x15a\x1F\x9FW`\0\x80\xFD[Pa\x1F\xA8a\x1D\x06V[a\x01\0\x88\x015\x81Ra\x01 \x88\x015` \x82\x01R\x91Pa\x01@\x87\x015a\x1F\xCC\x81a\x1E\xAAV[\x80\x91PP\x92\x95P\x92\x95P\x92\x95V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x1E\xBFW`\0\x80\xFD[`\0`\xE0\x82\x84\x03\x12\x15a \x01W`\0\x80\xFD[a \ta\x1D(vk_g2_affine.x.c0); - let pk_x_c1 = field_to_u256::(vk_g2_affine.x.c1); - let pk_y_c0 = field_to_u256::(vk_g2_affine.y.c0); - let pk_y_c1 = field_to_u256::(vk_g2_affine.y.c1); + let vk_parsed: ParsedG2Point = vk_g2_affine.into(); // Sign the ethereum address with the BLS key let sig: Signature = key_pair.sign(&sender_address_bytes, CS_ID_BLS_BN254); let sig_affine_point = sig.sigma.into_affine(); - let sig_x = field_to_u256::(sig_affine_point.x); - let sig_y = field_to_u256::(sig_affine_point.y); + let sig_parsed: ParsedG1Point = sig_affine_point.into(); // TODO (Alex) Return ParsedG1Point and ParsedG2Point // in https://github.com/EspressoSystems/espresso-sequencer/issues/615 instead of field by field let res = ( - sig_x, - sig_y, - pk_x_c0, - pk_x_c1, - pk_y_c0, - pk_y_c1, + sig_parsed, + vk_parsed, schnorr_pk_x, schnorr_pk_y, sender_address, ); println!("{}", res.encode_hex()); } + Action::GenBLSSig => { + let mut rng = jf_utils::test_rng(); + + if cli.args.len() != 1 { + panic!("Should provide arg1=message"); + } + let message_bytes = cli.args[0].parse::().unwrap(); + + // Generate the BLS ver key + let key_pair = BLSKeyPair::generate(&mut rng); + let vk = key_pair.ver_key(); + let vk_g2_affine: G2Affine = vk.to_affine(); + let vk_parsed: ParsedG2Point = vk_g2_affine.into(); + + // Sign the message + let sig: Signature = key_pair.sign(&message_bytes, CS_ID_BLS_BN254); + let sig_affine_point = sig.sigma.into_affine(); + let sig_parsed: ParsedG1Point = sig_affine_point.into(); + + let res = (vk_parsed, sig_parsed); + println!("{}", res.encode_hex()); + } + Action::GenBLSHashes => { + if cli.args.len() != 1 { + panic!("Should provide arg1=message"); + } + + // Same as in the hash_to_curve function + // See https://github.com/EspressoSystems/jellyfish/blob/6c2c08f4e966fd1d454d48bcf30bd41a952f9f76/primitives/src/signatures/bls_over_bn254.rs#L310 + let hasher_init = &[1u8]; + let hasher = as HashToField>::new(hasher_init); + + let message_bytes = cli.args[0].parse::().unwrap(); + + let field_elem: Fq = hasher.hash_to_field(&message_bytes, 1)[0]; + let fq_u256 = field_to_u256::(field_elem); + let hash_to_curve_elem: G1Affine = hash_to_curve::(&message_bytes).into(); + let hash_to_curve_elem_parsed: ParsedG1Point = hash_to_curve_elem.into(); + + let res = (fq_u256, hash_to_curve_elem_parsed); + println!("{}", res.encode_hex()); + } }; } @@ -460,8 +500,6 @@ const COSET: [&str; 5] = [ ]; // H: G2Affine(x: Fp2, y:Fp2), x = x0 + u * x1, y = y0 + u * y1 -// NOTE: extra careful with discrepancy with current version of BN254.G2Point -// which assume Fp2 = x0 * u + x1 ! const H: [&str; 4] = [ "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", // x0 "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", // x1 @@ -526,19 +564,6 @@ fn open_key() -> OpenKey { } } -fn field_to_u256(f: F) -> U256 { - if F::MODULUS_BIT_SIZE > 256 { - panic!("Shouldn't convert a >256-bit field to U256"); - } - U256::from_little_endian(&f.into_bigint().to_bytes_le()) -} - -fn u256_to_field(x: U256) -> F { - let mut bytes = [0u8; 32]; - x.to_little_endian(&mut bytes); - F::from_le_bytes_mod_order(&bytes) -} - /// an intermediate representation of the transcript parsed from abi.encode(transcript) from Solidity. #[derive(Clone, EthAbiType, EthAbiCodec)] struct ParsedTranscript { @@ -576,67 +601,6 @@ impl From for SolidityTranscript { } } -/// an intermediate representation of `BN254.G1Point` in solidity. -#[derive(Clone, PartialEq, Eq, Debug, EthAbiType, EthAbiCodec)] -struct ParsedG1Point { - x: U256, - y: U256, -} - -// this is convention from BN256 precompile -impl Default for ParsedG1Point { - fn default() -> Self { - Self { - x: U256::from(0), - y: U256::from(0), - } - } -} - -impl FromStr for ParsedG1Point { - type Err = AbiError; - fn from_str(s: &str) -> Result { - let parsed: (Self,) = AbiDecode::decode_hex(s)?; - Ok(parsed.0) - } -} - -impl From> for ParsedG1Point -where - P::BaseField: PrimeField, -{ - fn from(p: Affine

) -> Self { - if p.is_zero() { - // this convention is from the BN precompile - Self { - x: U256::from(0), - y: U256::from(0), - } - } else { - Self { - x: field_to_u256::(*p.x().unwrap()), - y: field_to_u256::(*p.y().unwrap()), - } - } - } -} - -impl From for Affine

-where - P::BaseField: PrimeField, -{ - fn from(p: ParsedG1Point) -> Self { - if p == ParsedG1Point::default() { - Self::default() - } else { - Self::new( - u256_to_field::(p.x), - u256_to_field::(p.y), - ) - } - } -} - /// intermediate representation of `VerifyingKey` in solidity. #[derive(Clone, Debug, EthAbiType, EthAbiCodec)] struct ParsedVerifyingKey { diff --git a/contracts/rust/src/bls_contract.rs b/contracts/rust/src/bls_contract.rs deleted file mode 100644 index a5a6ecc7f7..0000000000 --- a/contracts/rust/src/bls_contract.rs +++ /dev/null @@ -1,125 +0,0 @@ -#[cfg(test)] - -mod test { - - use crate::helpers::hotshot_contract::TestBLSSystem; - use crate::helpers::{compare_field_elems, compare_group_elems, MyG1Point, MyG2Point}; - use ark_bn254::Fq; - use ark_ec::CurveGroup; - use ark_ff::field_hashers::{DefaultFieldHasher, HashToField}; - use ark_std::vec; - use async_compatibility_layer::logging::{setup_backtrace, setup_logging}; - use ethers::types::Bytes; - use jf_primitives::signatures::bls_over_bn254::{ - hash_to_curve, BLSOverBN254CurveSignatureScheme, - }; - use jf_primitives::signatures::SignatureScheme; - use jf_utils::test_rng; - use sequencer_utils::AnvilOptions; - use sha3::Keccak256; - - fn test_inputs() -> Vec { - let message1 = Bytes::from(vec![1u8, 2u8, 3u8, 45u8, 88u8]); - let mut message2 = vec![1u8, 2u8, 3u8, 45u8, 88u8]; - let csid = b"BLS_SIG_BN254G1_XMD:KECCAK_NCTH_NUL_"; - message2.extend(csid); - let message2 = Bytes::from(message2); - - let message3 = Bytes::from(vec![33u8; 1000]); - - vec![message1, message2, message3] - } - - #[async_std::test] - async fn test_full_sig_scheme() { - setup_logging(); - setup_backtrace(); - - let rng = &mut test_rng(); - let message = Bytes::from(vec![1u8, 2u8, 3u8, 45u8, 88u8]); - - // TODO why can't we write let parameters = (); ? cargo clippy complains - let (sk, pk) = BLSOverBN254CurveSignatureScheme::key_gen(&(), rng).unwrap(); - let sig = BLSOverBN254CurveSignatureScheme::sign(&(), &sk, &message, rng).unwrap(); - assert!(BLSOverBN254CurveSignatureScheme::verify(&(), &pk, &message, &sig).is_ok()); - - let anvil = AnvilOptions::default().spawn().await; - let provider = anvil.provider(); - let TestBLSSystem { bls, .. } = TestBLSSystem::deploy(provider).await.unwrap(); - - let sig_value: MyG1Point = sig.clone().sigma.into_affine().into(); - - let pk_value: MyG2Point = pk.to_affine().into(); - - let res = bls - .verify_bls_sig( - message.clone(), - sig_value.clone().into(), - pk_value.clone().into(), - ) - .call() - .await; - - assert!(res.is_ok()); - - let wrong_message = Bytes::from(vec![10u8; 3]); - assert!( - BLSOverBN254CurveSignatureScheme::verify(&(), &pk, wrong_message.clone(), &sig) - .is_err() - ); - let res = bls - .verify_bls_sig( - wrong_message.clone(), - sig_value.clone().into(), - pk_value.clone().into(), - ) - .call() - .await; - - assert!(res.is_err()); - - let (_, wrong_pk) = BLSOverBN254CurveSignatureScheme::key_gen(&(), rng).unwrap(); - assert!(BLSOverBN254CurveSignatureScheme::verify(&(), &wrong_pk, &message, &sig).is_err()); - - let wrong_pk_value: MyG2Point = wrong_pk.to_affine().into(); - let res = bls - .verify_bls_sig(message.clone(), sig_value.into(), wrong_pk_value.into()) - .call() - .await; - assert!(res.is_err()); - } - - #[async_std::test] - async fn test_hash_to_field() { - let anvil = AnvilOptions::default().spawn().await; - let provider = anvil.provider(); - let TestBLSSystem { bls, .. } = TestBLSSystem::deploy(provider).await.unwrap(); - - // Same as in the hash_to_curve function - // See https://github.com/EspressoSystems/jellyfish/blob/6c2c08f4e966fd1d454d48bcf30bd41a952f9f76/primitives/src/signatures/bls_over_bn254.rs#L310 - let hasher_init = &[1u8]; - let hasher = as HashToField>::new(hasher_init); - - let msgs = test_inputs(); - - for msg in msgs.iter() { - let x_rust: Fq = hasher.hash_to_field(msg, 1)[0]; - let x_contract = bls.hash_to_field(msg.clone()).call().await.unwrap(); - compare_field_elems(x_rust, x_contract); - } - } - - #[async_std::test] - async fn test_hash_to_curve() { - let anvil = AnvilOptions::default().spawn().await; - let provider = anvil.provider(); - let TestBLSSystem { bls, .. } = TestBLSSystem::deploy(provider).await.unwrap(); - - let msgs = test_inputs(); - for msg in msgs.iter() { - let group_elem = hash_to_curve::(msg); - let group_elem_contract = bls.hash_to_curve(msg.clone()).call().await.unwrap(); - compare_group_elems(group_elem.into(), group_elem_contract); - } - } -} diff --git a/contracts/rust/src/helpers.rs b/contracts/rust/src/helpers.rs index ec233dc49a..c739e4ccd6 100644 --- a/contracts/rust/src/helpers.rs +++ b/contracts/rust/src/helpers.rs @@ -1,60 +1,16 @@ #![cfg(any(test, feature = "testing"))] -use ark_bn254::{Fq, G1Affine}; use ark_ec::AffineRepr; -use ark_ff::{BigInt, PrimeField}; +use ark_ff::PrimeField; pub use contract_bindings::shared_types::{G1Point, G2Point}; use ethers::types::U256; -pub(crate) mod hotshot_contract { - use anyhow::Result; - use contract_bindings::bls_helper::BLSHelper; - use ethers::middleware::SignerMiddleware; - use ethers::providers::{Http, Middleware, Provider}; - use ethers::signers::LocalWallet; - use sequencer_utils::test_utils::TestClients; - - type EthMiddleware = SignerMiddleware, LocalWallet>; - - pub struct TestBLSSystem { - pub clients: TestClients, - pub bls: BLSHelper, - pub provider: Provider, - } - - impl TestBLSSystem { - pub async fn deploy(provider: Provider) -> Result { - let chain_id = provider.get_chainid().await?.as_u64(); - let clients = TestClients::new(&provider, chain_id); - let bls = BLSHelper::deploy(clients.deployer.provider.clone(), ())? - .send() - .await?; - Ok(Self { - clients, - bls, - provider, - }) - } - } -} - // TODO put somewhere else, like jellyfish? fn convert_fq_to_u256(f: ark_bn254::Fq) -> U256 { let b_int = f.into_bigint(); U256([b_int.0[0], b_int.0[1], b_int.0[2], b_int.0[3]]) } -pub(crate) fn compare_field_elems(field_elem_rust: Fq, field_elem_contract: U256) { - let x_rust_big_int = field_elem_rust.into_bigint(); - let x_contract_big_int = BigInt::new(field_elem_contract.0); - assert_eq!(x_rust_big_int, x_contract_big_int); -} - -pub(crate) fn compare_group_elems(group_elem_rust: G1Affine, group_elem_contract: (U256, U256)) { - compare_field_elems(group_elem_rust.x, group_elem_contract.0); - compare_field_elems(group_elem_rust.y, group_elem_contract.1); -} - // TODO Some of the code below are copied/adapted from https://github.com/EspressoSystems/cape/blob/77f343849db3d9e721c6e3d0f7108155c178dbee/contracts/rust/src/types.rs#L41 // TODO create a library solidity/rust library that can be used across projects // TODO note though we should update this library to arkworks 4 diff --git a/contracts/rust/src/hotshot_contract.rs b/contracts/rust/src/hotshot_contract.rs index 99ab93bf01..4475e24f89 100644 --- a/contracts/rust/src/hotshot_contract.rs +++ b/contracts/rust/src/hotshot_contract.rs @@ -1,28 +1,19 @@ #[cfg(test)] mod test { - use crate::helpers::{MyG1Point, MyG2Point}; - use ark_ec::CurveGroup; - use contract_bindings::hot_shot::{HotShot, NewBlocksCall, Qc}; + use crate::helpers::MyG2Point; + + use contract_bindings::hot_shot::{NewBlocksCall, Qc}; use contract_bindings::shared_types::G2Point; - use ethers::middleware::SignerMiddleware; - use ethers::signers::Wallet; - use ethers::types::Bytes; + use ethers::{abi::AbiDecode, providers::Middleware, types::U256}; - use ethers_providers::Http; - use jf_primitives::signatures::bls_over_bn254::{ - BLSOverBN254CurveSignatureScheme, SignKey, Signature, VerKey, - }; - use jf_primitives::signatures::{AggregateableSignatureSchemes, SignatureScheme}; + + use jf_primitives::signatures::bls_over_bn254::BLSOverBN254CurveSignatureScheme; + use jf_primitives::signatures::SignatureScheme; use jf_utils::test_rng; use sequencer_utils::test_utils::TestL1System; use sequencer_utils::AnvilOptions; - enum ResultExpected { - Ok, - Error, - } - #[async_std::test] async fn test_hotshot_block_commitment() { let anvil = AnvilOptions::default().spawn().await; @@ -102,164 +93,4 @@ mod test { ); } } - - fn get_slice_from_bitmap(input: Vec, bitmap: &[bool]) -> Vec { - let mut res = vec![]; - for i in 0..input.len() { - if bitmap[i] { - res.push(input[i].clone()); - } - } - res - } - - async fn check_agg_sig( - bitmap: &Vec, - staking_keys: &[(SignKey, VerKey)], - messages: &[Bytes], - stake_threshold: U256, - hotshot: &HotShot< - SignerMiddleware< - ethers::providers::Provider, - Wallet, - >, - >, - res_expected: ResultExpected, - ) { - let n_sigs = bitmap.len(); - let rng = &mut test_rng(); - let mut signatures: Vec = vec![]; - - for (key_pair, message) in staking_keys.iter().take(n_sigs).zip(messages) { - let sk = key_pair.0.clone(); - let sig = BLSOverBN254CurveSignatureScheme::sign(&(), &sk, message, rng).unwrap(); - signatures.push(sig.clone()); - } - - let vks = get_slice_from_bitmap( - staking_keys.iter().map(|k| k.1).collect::>(), - bitmap, - ); - let sigs = get_slice_from_bitmap(signatures, bitmap); - let agg_sig = BLSOverBN254CurveSignatureScheme::aggregate(&(), &vks, &sigs).unwrap(); - let agg_sig_value: MyG1Point = agg_sig.clone().sigma.into_affine().into(); - - // Call the contract - - let message = messages[0].clone(); - - let res = hotshot - .verify_agg_sig( - message.clone(), - agg_sig_value.into(), - bitmap.to_vec(), - stake_threshold, - ) - .call() - .await; - - match res_expected { - ResultExpected::Ok => assert!(res.is_ok()), - ResultExpected::Error => assert!(res.is_err()), - } - } - - #[async_std::test] - async fn test_validate_qc() { - let anvil = AnvilOptions::default().spawn().await; - let provider = anvil.provider(); - let TestL1System { hotshot, .. } = TestL1System::deploy(provider.clone()).await.unwrap(); - - // Initialize the staking table with 5 keys - let mut staking_keys = vec![]; - let rng = &mut test_rng(); - let n_sigs = 5; - for i in 0..n_sigs { - let (sk, pk) = BLSOverBN254CurveSignatureScheme::key_gen(&(), rng).unwrap(); - staking_keys.push((sk.clone(), pk)); - let pk = pk.to_affine(); - let pk_value: MyG2Point = pk.into(); - let amount = U256::from(10 * (i + 1)); - hotshot - .add_new_staking_key(pk_value.clone().into(), amount) - .send() - .await - .unwrap() - .await - .unwrap(); - } - - // Happy path - - // Each signer is expected to sign the same message - let messages = vec![Bytes::from(b"unique message"); n_sigs]; - let stake_threshold = U256::from(10); - check_agg_sig( - &vec![true, true, true, false, false], - &staking_keys, - &messages, - stake_threshold, - &hotshot, - ResultExpected::Ok, - ) - .await; - - check_agg_sig( - &vec![false, true, true, false, true], - &staking_keys, - &messages, - stake_threshold, - &hotshot, - ResultExpected::Ok, - ) - .await; - - check_agg_sig( - &vec![true, false, false, false, false], - &staking_keys, - &messages, - stake_threshold, - &hotshot, - ResultExpected::Ok, - ) - .await; - - // Error cases - - // Threshold is too low - check_agg_sig( - &vec![true, false, false, false, false], - &staking_keys, - &messages, - U256::from(1000), - &hotshot, - ResultExpected::Error, - ) - .await; - - // Signature is invalid because one message differs - let unique_message = Bytes::from(b"unique message"); - let mut messages = vec![unique_message; n_sigs]; - messages[0] = Bytes::from(b"different message"); - check_agg_sig( - &vec![true, true, true, false, true], - &staking_keys, - &messages, - stake_threshold, - &hotshot, - ResultExpected::Error, - ) - .await; - - // Bitmap length is too high - check_agg_sig( - &vec![true; 32], - &staking_keys, - &messages, - stake_threshold, - &hotshot, - ResultExpected::Error, - ) - .await; - } } diff --git a/contracts/rust/src/lib.rs b/contracts/rust/src/lib.rs index 3f2dbbf2c5..f1ea54ec3e 100644 --- a/contracts/rust/src/lib.rs +++ b/contracts/rust/src/lib.rs @@ -1,3 +1,2 @@ -mod bls_contract; mod helpers; mod hotshot_contract; diff --git a/contracts/script/HotShot.s.sol b/contracts/script/HotShot.s.sol deleted file mode 100644 index af4c264af8..0000000000 --- a/contracts/script/HotShot.s.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.0; - -import "forge-std/Script.sol"; -import { HotShot } from "../src/HotShot.sol"; - -contract DeployHotShot is Script { - function run() external { - string memory seedPhrase = vm.envString("MNEMONIC"); - uint256 privateKey = vm.deriveKey(seedPhrase, 0); - vm.startBroadcast(privateKey); - new HotShot(); - vm.stopBroadcast(); - } -} diff --git a/contracts/src/BLSTestHelper.sol b/contracts/src/BLSTestHelper.sol deleted file mode 100644 index 63e6490484..0000000000 --- a/contracts/src/BLSTestHelper.sol +++ /dev/null @@ -1,24 +0,0 @@ -pragma solidity ^0.8.0; - -import { BN254 } from "bn254/BN254.sol"; -import { BLSSig } from "./libraries/BLSSig.sol"; - -/// NOTE: (alex) name cannot contain `Test/Script` otherwise ignored by `forge bind`. -contract BLSHelper { - /// This contract is for testing purposes only - - function hashToField(bytes memory message) public pure returns (uint256) { - return BLSSig.hashToField(message); - } - - function hashToCurve(bytes memory input) public view returns (uint256, uint256) { - return BLSSig.hashToCurve(input); - } - - function verifyBlsSig(bytes memory message, BN254.G1Point memory sig, BN254.G2Point memory pk) - public - view - { - BLSSig.verifyBlsSig(message, sig, pk); - } -} diff --git a/contracts/src/HotShot.sol b/contracts/src/HotShot.sol index ab5e1d9748..8b619ec68b 100644 --- a/contracts/src/HotShot.sol +++ b/contracts/src/HotShot.sol @@ -3,8 +3,6 @@ pragma solidity ^0.8.0; import { BN254 } from "bn254/BN254.sol"; import { BLSSig } from "./libraries/BLSSig.sol"; -import { BN256G2 } from "./libraries//BN256G2.sol"; - contract HotShot { event NewStakingKey(BN254.G2Point stakingKey, uint256 amount, uint256 index); @@ -85,71 +83,4 @@ contract HotShot { function getStakingKey(uint256 index) public view returns (BN254.G2Point memory, uint256) { return (_stakingKeys[index], _stakeAmounts[index]); } - - /// @dev Verify an aggregated signature against a bitmap (use to reconstruct - /// the aggregated public key) and some stake threshold. If the stake - /// involved by the signers is bigger than the threshold and the signature is - /// valid then the validation passes, otherwise the transaction - /// reverts. - /// @param message message to check the signature against - /// @param sig aggregated signature - /// @param bitmap bit vector that corresponds to the public keys of the stake - /// table to take into account to build the aggregated public key - /// @param minStakeThreshold total stake that must me matched by the - /// signers in order for the signature to be valid - function verifyAggSig( - bytes memory message, - BN254.G1Point memory sig, - bool[] memory bitmap, - uint256 minStakeThreshold - ) public view { - require(bitmap.length <= _stakingKeys.length, "bitmap is too long"); - - // Build aggregated public key - - // Loop until we find a one in the bitmap - uint256 index = 0; - while (!bitmap[index] && index < bitmap.length) { - index++; - } - - if (index >= bitmap.length) { - revert NoKeySelected(); - } - - // Compute the stake corresponding to the signers and check if it is enough - uint256 stake = 0; - for (uint256 i = index; i < bitmap.length; i++) { - if (bitmap[i]) { - stake += _stakeAmounts[i]; // TODO check to avoid wrapping around? - } - } - - if (stake < minStakeThreshold) { - revert NotEnoughStake(); - } - - BN254.G2Point memory aggPk = _stakingKeys[index]; - for (uint256 i = index + 1; i < bitmap.length; i++) { - if (bitmap[i]) { - BN254.G2Point memory pk = _stakingKeys[i]; - - // Note: (x,y) coordinates for each field component must be inverted. - uint256 p1xy = aggPk.x0; - uint256 p1xx = aggPk.x1; - uint256 p1yy = aggPk.y0; - uint256 p1yx = aggPk.y1; - uint256 p2xy = pk.x0; - uint256 p2xx = pk.x1; - uint256 p2yy = pk.y0; - uint256 p2yx = pk.y1; - - (uint256 p3xx, uint256 p3xy, uint256 p3yx, uint256 p3yy) = - BN256G2.ECTwistAdd(p1xx, p1xy, p1yx, p1yy, p2xx, p2xy, p2yx, p2yy); - aggPk = BN254.G2Point(p3xy, p3xx, p3yy, p3yx); - } - } - - BLSSig.verifyBlsSig(message, sig, aggPk); - } } diff --git a/contracts/src/LightClient.sol b/contracts/src/LightClient.sol index d142db11bb..ea6d5d8493 100644 --- a/contracts/src/LightClient.sol +++ b/contracts/src/LightClient.sol @@ -46,11 +46,11 @@ contract LightClient { struct LightClientState { uint64 viewNum; uint64 blockHeight; - uint256 blockCommRoot; - uint256 feeLedgerComm; - uint256 stakeTableBlsKeyComm; - uint256 stakeTableSchnorrKeyComm; - uint256 stakeTableAmountComm; + BN254.ScalarField blockCommRoot; + BN254.ScalarField feeLedgerComm; + BN254.ScalarField stakeTableBlsKeyComm; + BN254.ScalarField stakeTableSchnorrKeyComm; + BN254.ScalarField stakeTableAmountComm; uint256 threshold; } @@ -120,7 +120,9 @@ contract LightClient { } finalizedState = newState; - emit NewState(newState.viewNum, newState.blockHeight, newState.blockCommRoot); + emit NewState( + newState.viewNum, newState.blockHeight, BN254.ScalarField.unwrap(newState.blockCommRoot) + ); } // === Pure or View-only APIs === @@ -136,11 +138,11 @@ contract LightClient { uint256[] memory publicInput = new uint256[](8); publicInput[0] = uint256(state.viewNum); publicInput[1] = uint256(state.blockHeight); - publicInput[2] = state.blockCommRoot; - publicInput[3] = state.feeLedgerComm; - publicInput[4] = state.stakeTableBlsKeyComm; - publicInput[5] = state.stakeTableSchnorrKeyComm; - publicInput[6] = state.stakeTableAmountComm; + publicInput[2] = BN254.ScalarField.unwrap(state.blockCommRoot); + publicInput[3] = BN254.ScalarField.unwrap(state.feeLedgerComm); + publicInput[4] = BN254.ScalarField.unwrap(state.stakeTableBlsKeyComm); + publicInput[5] = BN254.ScalarField.unwrap(state.stakeTableSchnorrKeyComm); + publicInput[6] = BN254.ScalarField.unwrap(state.stakeTableAmountComm); if (isNewEpoch) { publicInput[7] = state.threshold; } else { diff --git a/contracts/src/interfaces/IPlonkVerifier.sol b/contracts/src/interfaces/IPlonkVerifier.sol index e2b4b0d14d..7b8a23c09f 100644 --- a/contracts/src/interfaces/IPlonkVerifier.sol +++ b/contracts/src/interfaces/IPlonkVerifier.sol @@ -33,19 +33,19 @@ interface IPlonkVerifier { // i.e., batch_proof.shifted_opening_proof BN254.G1Point zetaOmega; // 0x180 // wire poly eval at `zeta` - uint256 wireEval0; // 0x1A0 - uint256 wireEval1; // 0x1C0 - uint256 wireEval2; // 0x1E0 - uint256 wireEval3; // 0x200 - uint256 wireEval4; // 0x220 + BN254.ScalarField wireEval0; // 0x1A0 + BN254.ScalarField wireEval1; // 0x1C0 + BN254.ScalarField wireEval2; // 0x1E0 + BN254.ScalarField wireEval3; // 0x200 + BN254.ScalarField wireEval4; // 0x220 // extended permutation (sigma) poly eval at `zeta` // last (sigmaEval4) is saved by Maller Optimization - uint256 sigmaEval0; // 0x240 - uint256 sigmaEval1; // 0x260 - uint256 sigmaEval2; // 0x280 - uint256 sigmaEval3; // 0x2A0 + BN254.ScalarField sigmaEval0; // 0x240 + BN254.ScalarField sigmaEval1; // 0x260 + BN254.ScalarField sigmaEval2; // 0x280 + BN254.ScalarField sigmaEval3; // 0x2A0 // product permutation poly eval at `zeta * \omega` - uint256 prodPermZetaOmegaEval; // 0x2C0 + BN254.ScalarField prodPermZetaOmegaEval; // 0x2C0 } // The verifying key for Plonk proofs. diff --git a/contracts/src/libraries/BLSSig.sol b/contracts/src/libraries/BLSSig.sol index ebe7ea4934..2edd0ba8a5 100644 --- a/contracts/src/libraries/BLSSig.sol +++ b/contracts/src/libraries/BLSSig.sol @@ -144,7 +144,7 @@ library BLSSig { /// https://github.com/EspressoSystems/jellyfish/blob/e1e683c287f20160738e6e737295dd8f9e70577a/primitives/src/signatures/bls_over_bn254.rs#L318 /// @param input message to be hashed /// @return group element in G_1 - function hashToCurve(bytes memory input) internal view returns (uint256, uint256) { + function hashToCurve(bytes memory input) internal view returns (BN254.G1Point memory) { uint256 x = hashToField(input); uint256 p = BN254.P_MOD; @@ -157,19 +157,19 @@ library BLSSig { Y = addmod(Y, b, p); // Check Y is a quadratic residue - uint256 y; + BN254.BaseField y; bool isQr; - (isQr, y) = BN254.quadraticResidue(Y); + (isQr, y) = BN254.quadraticResidue(BN254.BaseField.wrap(Y)); while (!isQr) { x = addmod(x, 1, p); Y = mulmod(x, x, p); Y = mulmod(Y, x, p); Y = addmod(Y, b, p); - (isQr, y) = BN254.quadraticResidue(Y); + (isQr, y) = BN254.quadraticResidue(BN254.BaseField.wrap(Y)); } - return (x, y); + return BN254.G1Point(BN254.BaseField.wrap(x), y); } /// @dev Verify a bls signature. Reverts if the signature is invalid @@ -192,8 +192,7 @@ library BLSSig { bytes memory input = bytes.concat(message, csidSuffix); - (uint256 x, uint256 y) = hashToCurve(input); - BN254.G1Point memory hash = BN254.G1Point(x, y); + BN254.G1Point memory hash = hashToCurve(input); if (!BN254.pairingProd2(hash, pk, BN254.negate(sig), BN254.P2())) { revert BLSSigVerificationFailed(); diff --git a/contracts/src/libraries/BN256G2.sol b/contracts/src/libraries/BN256G2.sol deleted file mode 100644 index 880ac7a3e8..0000000000 --- a/contracts/src/libraries/BN256G2.sol +++ /dev/null @@ -1,340 +0,0 @@ -pragma solidity ^0.8.0; -/** - * @title Elliptic curve operations on twist points for alt_bn128 - * @author Mustafa Al-Bassam (mus@musalbas.com) - * @dev Homepage: https://github.com/musalbas/solidity-BN256G2 - */ - -// Disable solhint for this file because it's copied from elsewhere. -/* solhint-disable */ - -library BN256G2 { - uint256 internal constant FIELD_MODULUS = - 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47; - uint256 internal constant TWISTBX = - 0x2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e5; - uint256 internal constant TWISTBY = - 0x9713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2; - uint256 internal constant PTXX = 0; - uint256 internal constant PTXY = 1; - uint256 internal constant PTYX = 2; - uint256 internal constant PTYY = 3; - uint256 internal constant PTZX = 4; - uint256 internal constant PTZY = 5; - - /** - * @notice Add two twist points - * @param pt1xx Coefficient 1 of x on point 1 - * @param pt1xy Coefficient 2 of x on point 1 - * @param pt1yx Coefficient 1 of y on point 1 - * @param pt1yy Coefficient 2 of y on point 1 - * @param pt2xx Coefficient 1 of x on point 2 - * @param pt2xy Coefficient 2 of x on point 2 - * @param pt2yx Coefficient 1 of y on point 2 - * @param pt2yy Coefficient 2 of y on point 2 - * @return (pt3xx, pt3xy, pt3yx, pt3yy) - */ - function ECTwistAdd( - uint256 pt1xx, - uint256 pt1xy, - uint256 pt1yx, - uint256 pt1yy, - uint256 pt2xx, - uint256 pt2xy, - uint256 pt2yx, - uint256 pt2yy - ) internal view returns (uint256, uint256, uint256, uint256) { - if (pt1xx == 0 && pt1xy == 0 && pt1yx == 0 && pt1yy == 0) { - if (!(pt2xx == 0 && pt2xy == 0 && pt2yx == 0 && pt2yy == 0)) { - assert(_isOnCurve(pt2xx, pt2xy, pt2yx, pt2yy)); - } - return (pt2xx, pt2xy, pt2yx, pt2yy); - } else if (pt2xx == 0 && pt2xy == 0 && pt2yx == 0 && pt2yy == 0) { - assert(_isOnCurve(pt1xx, pt1xy, pt1yx, pt1yy)); - return (pt1xx, pt1xy, pt1yx, pt1yy); - } - - assert(_isOnCurve(pt1xx, pt1xy, pt1yx, pt1yy)); - assert(_isOnCurve(pt2xx, pt2xy, pt2yx, pt2yy)); - - uint256[6] memory pt3 = - _ECTwistAddJacobian(pt1xx, pt1xy, pt1yx, pt1yy, 1, 0, pt2xx, pt2xy, pt2yx, pt2yy, 1, 0); - - return _fromJacobian(pt3[PTXX], pt3[PTXY], pt3[PTYX], pt3[PTYY], pt3[PTZX], pt3[PTZY]); - } - - /** - * @notice Multiply a twist point by a scalar - * @param s Scalar to multiply by - * @param pt1xx Coefficient 1 of x - * @param pt1xy Coefficient 2 of x - * @param pt1yx Coefficient 1 of y - * @param pt1yy Coefficient 2 of y - * @return (pt2xx, pt2xy, pt2yx, pt2yy) - */ - function ECTwistMul(uint256 s, uint256 pt1xx, uint256 pt1xy, uint256 pt1yx, uint256 pt1yy) - internal - view - returns (uint256, uint256, uint256, uint256) - { - uint256 pt1zx = 1; - if (pt1xx == 0 && pt1xy == 0 && pt1yx == 0 && pt1yy == 0) { - pt1xx = 1; - pt1yx = 1; - pt1zx = 0; - } else { - assert(_isOnCurve(pt1xx, pt1xy, pt1yx, pt1yy)); - } - - uint256[6] memory pt2 = _ECTwistMulJacobian(s, pt1xx, pt1xy, pt1yx, pt1yy, pt1zx, 0); - - return _fromJacobian(pt2[PTXX], pt2[PTXY], pt2[PTYX], pt2[PTYY], pt2[PTZX], pt2[PTZY]); - } - - /** - * @notice Get the field modulus - * @return The field modulus - */ - function GetFieldModulus() internal pure returns (uint256) { - return FIELD_MODULUS; - } - - function submod(uint256 a, uint256 b, uint256 n) internal pure returns (uint256) { - return addmod(a, n - b, n); - } - - function _FQ2Mul(uint256 xx, uint256 xy, uint256 yx, uint256 yy) - internal - pure - returns (uint256, uint256) - { - return ( - submod(mulmod(xx, yx, FIELD_MODULUS), mulmod(xy, yy, FIELD_MODULUS), FIELD_MODULUS), - addmod(mulmod(xx, yy, FIELD_MODULUS), mulmod(xy, yx, FIELD_MODULUS), FIELD_MODULUS) - ); - } - - function _FQ2Muc(uint256 xx, uint256 xy, uint256 c) internal pure returns (uint256, uint256) { - return (mulmod(xx, c, FIELD_MODULUS), mulmod(xy, c, FIELD_MODULUS)); - } - - function _FQ2Add(uint256 xx, uint256 xy, uint256 yx, uint256 yy) - internal - pure - returns (uint256, uint256) - { - return (addmod(xx, yx, FIELD_MODULUS), addmod(xy, yy, FIELD_MODULUS)); - } - - function _FQ2Sub(uint256 xx, uint256 xy, uint256 yx, uint256 yy) - internal - pure - returns (uint256 rx, uint256 ry) - { - return (submod(xx, yx, FIELD_MODULUS), submod(xy, yy, FIELD_MODULUS)); - } - - function _FQ2Div(uint256 xx, uint256 xy, uint256 yx, uint256 yy) - internal - view - returns (uint256, uint256) - { - (yx, yy) = _FQ2Inv(yx, yy); - return _FQ2Mul(xx, xy, yx, yy); - } - - function _FQ2Inv(uint256 x, uint256 y) internal view returns (uint256, uint256) { - uint256 inv = _modInv( - addmod(mulmod(y, y, FIELD_MODULUS), mulmod(x, x, FIELD_MODULUS), FIELD_MODULUS), - FIELD_MODULUS - ); - return (mulmod(x, inv, FIELD_MODULUS), FIELD_MODULUS - mulmod(y, inv, FIELD_MODULUS)); - } - - function _isOnCurve(uint256 xx, uint256 xy, uint256 yx, uint256 yy) - internal - pure - returns (bool) - { - uint256 yyx; - uint256 yyy; - uint256 xxxx; - uint256 xxxy; - (yyx, yyy) = _FQ2Mul(yx, yy, yx, yy); - (xxxx, xxxy) = _FQ2Mul(xx, xy, xx, xy); - (xxxx, xxxy) = _FQ2Mul(xxxx, xxxy, xx, xy); - (yyx, yyy) = _FQ2Sub(yyx, yyy, xxxx, xxxy); - (yyx, yyy) = _FQ2Sub(yyx, yyy, TWISTBX, TWISTBY); - return yyx == 0 && yyy == 0; - } - - function _modInv(uint256 a, uint256 n) internal view returns (uint256 result) { - bool success; - assembly { - let freemem := mload(0x40) - mstore(freemem, 0x20) - mstore(add(freemem, 0x20), 0x20) - mstore(add(freemem, 0x40), 0x20) - mstore(add(freemem, 0x60), a) - mstore(add(freemem, 0x80), sub(n, 2)) - mstore(add(freemem, 0xA0), n) - success := staticcall(sub(gas(), 2000), 5, freemem, 0xC0, freemem, 0x20) - result := mload(freemem) - } - require(success); - } - - function _fromJacobian( - uint256 pt1xx, - uint256 pt1xy, - uint256 pt1yx, - uint256 pt1yy, - uint256 pt1zx, - uint256 pt1zy - ) internal view returns (uint256 pt2xx, uint256 pt2xy, uint256 pt2yx, uint256 pt2yy) { - uint256 invzx; - uint256 invzy; - (invzx, invzy) = _FQ2Inv(pt1zx, pt1zy); - (pt2xx, pt2xy) = _FQ2Mul(pt1xx, pt1xy, invzx, invzy); - (pt2yx, pt2yy) = _FQ2Mul(pt1yx, pt1yy, invzx, invzy); - } - - function _ECTwistAddJacobian( - uint256 pt1xx, - uint256 pt1xy, - uint256 pt1yx, - uint256 pt1yy, - uint256 pt1zx, - uint256 pt1zy, - uint256 pt2xx, - uint256 pt2xy, - uint256 pt2yx, - uint256 pt2yy, - uint256 pt2zx, - uint256 pt2zy - ) internal pure returns (uint256[6] memory pt3) { - if (pt1zx == 0 && pt1zy == 0) { - (pt3[PTXX], pt3[PTXY], pt3[PTYX], pt3[PTYY], pt3[PTZX], pt3[PTZY]) = - (pt2xx, pt2xy, pt2yx, pt2yy, pt2zx, pt2zy); - return pt3; - } else if (pt2zx == 0 && pt2zy == 0) { - (pt3[PTXX], pt3[PTXY], pt3[PTYX], pt3[PTYY], pt3[PTZX], pt3[PTZY]) = - (pt1xx, pt1xy, pt1yx, pt1yy, pt1zx, pt1zy); - return pt3; - } - - (pt2yx, pt2yy) = _FQ2Mul(pt2yx, pt2yy, pt1zx, pt1zy); // U1 = y2 * z1 - (pt3[PTYX], pt3[PTYY]) = _FQ2Mul(pt1yx, pt1yy, pt2zx, pt2zy); // U2 = y1 * z2 - (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt1zx, pt1zy); // V1 = x2 * z1 - (pt3[PTZX], pt3[PTZY]) = _FQ2Mul(pt1xx, pt1xy, pt2zx, pt2zy); // V2 = x1 * z2 - - if (pt2xx == pt3[PTZX] && pt2xy == pt3[PTZY]) { - if (pt2yx == pt3[PTYX] && pt2yy == pt3[PTYY]) { - (pt3[PTXX], pt3[PTXY], pt3[PTYX], pt3[PTYY], pt3[PTZX], pt3[PTZY]) = - _ECTwistDoubleJacobian(pt1xx, pt1xy, pt1yx, pt1yy, pt1zx, pt1zy); - return pt3; - } - (pt3[PTXX], pt3[PTXY], pt3[PTYX], pt3[PTYY], pt3[PTZX], pt3[PTZY]) = (1, 0, 1, 0, 0, 0); - return pt3; - } - - (pt2zx, pt2zy) = _FQ2Mul(pt1zx, pt1zy, pt2zx, pt2zy); // W = z1 * z2 - (pt1xx, pt1xy) = _FQ2Sub(pt2yx, pt2yy, pt3[PTYX], pt3[PTYY]); // U = U1 - U2 - (pt1yx, pt1yy) = _FQ2Sub(pt2xx, pt2xy, pt3[PTZX], pt3[PTZY]); // V = V1 - V2 - (pt1zx, pt1zy) = _FQ2Mul(pt1yx, pt1yy, pt1yx, pt1yy); // V_squared = V * V - (pt2yx, pt2yy) = _FQ2Mul(pt1zx, pt1zy, pt3[PTZX], pt3[PTZY]); // V_squared_times_V2 = - // V_squared * V2 - (pt1zx, pt1zy) = _FQ2Mul(pt1zx, pt1zy, pt1yx, pt1yy); // V_cubed = V * V_squared - (pt3[PTZX], pt3[PTZY]) = _FQ2Mul(pt1zx, pt1zy, pt2zx, pt2zy); // newz = V_cubed * W - (pt2xx, pt2xy) = _FQ2Mul(pt1xx, pt1xy, pt1xx, pt1xy); // U * U - (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt2zx, pt2zy); // U * U * W - (pt2xx, pt2xy) = _FQ2Sub(pt2xx, pt2xy, pt1zx, pt1zy); // U * U * W - V_cubed - (pt2zx, pt2zy) = _FQ2Muc(pt2yx, pt2yy, 2); // 2 * V_squared_times_V2 - (pt2xx, pt2xy) = _FQ2Sub(pt2xx, pt2xy, pt2zx, pt2zy); // A = U * U * W - V_cubed - 2 * - // V_squared_times_V2 - (pt3[PTXX], pt3[PTXY]) = _FQ2Mul(pt1yx, pt1yy, pt2xx, pt2xy); // newx = V * A - (pt1yx, pt1yy) = _FQ2Sub(pt2yx, pt2yy, pt2xx, pt2xy); // V_squared_times_V2 - A - (pt1yx, pt1yy) = _FQ2Mul(pt1xx, pt1xy, pt1yx, pt1yy); // U * (V_squared_times_V2 - A) - (pt1xx, pt1xy) = _FQ2Mul(pt1zx, pt1zy, pt3[PTYX], pt3[PTYY]); // V_cubed * U2 - (pt3[PTYX], pt3[PTYY]) = _FQ2Sub(pt1yx, pt1yy, pt1xx, pt1xy); // newy = U * - // (V_squared_times_V2 - A) - V_cubed * - // U2 - } - - function _ECTwistDoubleJacobian( - uint256 pt1xx, - uint256 pt1xy, - uint256 pt1yx, - uint256 pt1yy, - uint256 pt1zx, - uint256 pt1zy - ) - internal - pure - returns ( - uint256 pt2xx, - uint256 pt2xy, - uint256 pt2yx, - uint256 pt2yy, - uint256 pt2zx, - uint256 pt2zy - ) - { - (pt2xx, pt2xy) = _FQ2Muc(pt1xx, pt1xy, 3); // 3 * x - (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt1xx, pt1xy); // W = 3 * x * x - (pt1zx, pt1zy) = _FQ2Mul(pt1yx, pt1yy, pt1zx, pt1zy); // S = y * z - (pt2yx, pt2yy) = _FQ2Mul(pt1xx, pt1xy, pt1yx, pt1yy); // x * y - (pt2yx, pt2yy) = _FQ2Mul(pt2yx, pt2yy, pt1zx, pt1zy); // B = x * y * S - (pt1xx, pt1xy) = _FQ2Mul(pt2xx, pt2xy, pt2xx, pt2xy); // W * W - (pt2zx, pt2zy) = _FQ2Muc(pt2yx, pt2yy, 8); // 8 * B - (pt1xx, pt1xy) = _FQ2Sub(pt1xx, pt1xy, pt2zx, pt2zy); // H = W * W - 8 * B - (pt2zx, pt2zy) = _FQ2Mul(pt1zx, pt1zy, pt1zx, pt1zy); // S_squared = S * S - (pt2yx, pt2yy) = _FQ2Muc(pt2yx, pt2yy, 4); // 4 * B - (pt2yx, pt2yy) = _FQ2Sub(pt2yx, pt2yy, pt1xx, pt1xy); // 4 * B - H - (pt2yx, pt2yy) = _FQ2Mul(pt2yx, pt2yy, pt2xx, pt2xy); // W * (4 * B - H) - (pt2xx, pt2xy) = _FQ2Muc(pt1yx, pt1yy, 8); // 8 * y - (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt1yx, pt1yy); // 8 * y * y - (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt2zx, pt2zy); // 8 * y * y * S_squared - (pt2yx, pt2yy) = _FQ2Sub(pt2yx, pt2yy, pt2xx, pt2xy); // newy = W * (4 * B - H) - 8 * y * y - // * S_squared - (pt2xx, pt2xy) = _FQ2Muc(pt1xx, pt1xy, 2); // 2 * H - (pt2xx, pt2xy) = _FQ2Mul(pt2xx, pt2xy, pt1zx, pt1zy); // newx = 2 * H * S - (pt2zx, pt2zy) = _FQ2Mul(pt1zx, pt1zy, pt2zx, pt2zy); // S * S_squared - (pt2zx, pt2zy) = _FQ2Muc(pt2zx, pt2zy, 8); // newz = 8 * S * S_squared - } - - function _ECTwistMulJacobian( - uint256 d, - uint256 pt1xx, - uint256 pt1xy, - uint256 pt1yx, - uint256 pt1yy, - uint256 pt1zx, - uint256 pt1zy - ) internal pure returns (uint256[6] memory pt2) { - while (d != 0) { - if ((d & 1) != 0) { - pt2 = _ECTwistAddJacobian( - pt2[PTXX], - pt2[PTXY], - pt2[PTYX], - pt2[PTYY], - pt2[PTZX], - pt2[PTZY], - pt1xx, - pt1xy, - pt1yx, - pt1yy, - pt1zx, - pt1zy - ); - } - (pt1xx, pt1xy, pt1yx, pt1yy, pt1zx, pt1zy) = - _ECTwistDoubleJacobian(pt1xx, pt1xy, pt1yx, pt1yy, pt1zx, pt1zy); - - d = d / 2; - } - } -} - -/* solhint-enable */ diff --git a/contracts/src/libraries/PlonkVerifier.sol b/contracts/src/libraries/PlonkVerifier.sol index 5b6e7c4880..e105dc331f 100644 --- a/contracts/src/libraries/PlonkVerifier.sol +++ b/contracts/src/libraries/PlonkVerifier.sol @@ -97,7 +97,7 @@ library PlonkVerifier { ) external view returns (bool) { _validateProof(proof); for (uint256 i = 0; i < publicInput.length; i++) { - BN254.validateScalarField(publicInput[i]); + BN254.validateScalarField(BN254.ScalarField.wrap(publicInput[i])); } PcsInfo[] memory pcsInfos = new PcsInfo[](1); pcsInfos[0] = _preparePcsInfo(verifyingKey, publicInput, proof, extraTranscriptInitMsg); @@ -129,7 +129,7 @@ library PlonkVerifier { _validateProof(proofs[i]); // validate public input are all proper scalar fields for (uint256 j = 0; j < publicInputs[i].length; j++) { - BN254.validateScalarField(publicInputs[i][j]); + BN254.validateScalarField(BN254.ScalarField.wrap(publicInputs[i][j])); } // prepare pcs info pcsInfos[i] = _preparePcsInfo( @@ -298,8 +298,8 @@ library PlonkVerifier { Poly.EvalData memory evalData ) internal pure returns (uint256 res) { uint256 p = BN254.R_MOD; - uint256 lagrangeOneEval = evalData.lagrangeOne; - uint256 piEval = evalData.piEval; + uint256 lagrangeOneEval = BN254.ScalarField.unwrap(evalData.lagrangeOne); + uint256 piEval = BN254.ScalarField.unwrap(evalData.piEval); uint256 perm = 1; assembly { @@ -474,11 +474,11 @@ library PlonkVerifier { // Compute A := A0 + r * A1 + ... + r^{m-1} * Am { - uint256[] memory scalars = new uint256[](2 * pcsLen); + BN254.ScalarField[] memory scalars = new BN254.ScalarField[](2 * pcsLen); BN254.G1Point[] memory bases = new BN254.G1Point[](2 * pcsLen); uint256 rBase = 1; for (uint256 i = 0; i < pcsLen; i++) { - scalars[2 * i] = rBase; + scalars[2 * i] = BN254.ScalarField.wrap(rBase); bases[2 * i] = pcsInfos[i].openingProof; { @@ -488,7 +488,7 @@ library PlonkVerifier { assembly { tmp := mulmod(rBase, u, p) } - scalars[2 * i + 1] = tmp; + scalars[2 * i + 1] = BN254.ScalarField.wrap(tmp); } bases[2 * i + 1] = pcsInfos[i].shiftedOpeningProof; @@ -501,13 +501,13 @@ library PlonkVerifier { // Compute B := B0 + r * B1 + ... + r^{m-1} * Bm { - uint256[] memory scalars; + BN254.ScalarField[] memory scalars; BN254.G1Point[] memory bases; { // variable scoping to avoid "Stack too deep" uint256 scalarsLenPerInfo = pcsInfos[0].commScalars.length; uint256 totalScalarsLen = (2 + scalarsLenPerInfo) * pcsInfos.length + 1; - scalars = new uint256[](totalScalarsLen); + scalars = new BN254.ScalarField[](totalScalarsLen); bases = new BN254.G1Point[](totalScalarsLen); } uint256 sumEvals = 0; @@ -523,7 +523,7 @@ library PlonkVerifier { // slither-disable-next-line variable-scope tmp := mulmod(rBase, s, p) } - scalars[idx] = tmp; + scalars[idx] = BN254.ScalarField.wrap(tmp); } bases[idx] = pcsInfos[i].commBases[j]; idx += 1; @@ -537,7 +537,7 @@ library PlonkVerifier { // slither-disable-next-line variable-scope tmp := mulmod(rBase, evalPoint, p) } - scalars[idx] = tmp; + scalars[idx] = BN254.ScalarField.wrap(tmp); } bases[idx] = pcsInfos[i].openingProof; idx += 1; @@ -552,7 +552,7 @@ library PlonkVerifier { // slither-disable-next-line variable-scope tmp := mulmod(rBase, mulmod(u, nextEvalPoint, p), p) } - scalars[idx] = tmp; + scalars[idx] = BN254.ScalarField.wrap(tmp); } bases[idx] = pcsInfos[i].shiftedOpeningProof; idx += 1; @@ -567,14 +567,19 @@ library PlonkVerifier { } } } - scalars[idx] = BN254.negate(sumEvals); + scalars[idx] = BN254.negate(BN254.ScalarField.wrap(sumEvals)); bases[idx] = BN254.P1(); b1 = BN254.negate(BN254.multiScalarMul(bases, scalars)); } // Check e(A, [x]2) ?= e(B, [1]2) - BN254.G2Point memory betaH = - BN254.G2Point({ x0: BETA_H_X0, x1: BETA_H_X1, y0: BETA_H_Y0, y1: BETA_H_Y1 }); + // TODO the tests pass but it feels wrong. + BN254.G2Point memory betaH = BN254.G2Point({ + x0: BN254.BaseField.wrap(BETA_H_X1), + x1: BN254.BaseField.wrap(BETA_H_X0), + y0: BN254.BaseField.wrap(BETA_H_Y1), + y1: BN254.BaseField.wrap(BETA_H_Y0) + }); return BN254.pairingProd2(a1, betaH, b1, BN254.P2()); } @@ -740,10 +745,10 @@ library PlonkVerifier { // q_lc // ============ // q_1...q_4 - scalars[2] = proof.wireEval0; - scalars[3] = proof.wireEval1; - scalars[4] = proof.wireEval2; - scalars[5] = proof.wireEval3; + scalars[2] = BN254.ScalarField.unwrap(proof.wireEval0); + scalars[3] = BN254.ScalarField.unwrap(proof.wireEval1); + scalars[4] = BN254.ScalarField.unwrap(proof.wireEval2); + scalars[5] = BN254.ScalarField.unwrap(proof.wireEval3); bases[2] = verifyingKey.q1; bases[3] = verifyingKey.q2; bases[4] = verifyingKey.q3; @@ -813,7 +818,7 @@ library PlonkVerifier { // q_o and q_c // ============ // q_o - scalars[12] = p - proof.wireEval4; + scalars[12] = p - BN254.ScalarField.unwrap(proof.wireEval4); bases[12] = verifyingKey.qO; // q_c scalars[13] = 1; @@ -837,7 +842,7 @@ library PlonkVerifier { // ============================================ // first one is 1-zeta^n - scalars[15] = p - evalData.vanishEval; + scalars[15] = p - BN254.ScalarField.unwrap(evalData.vanishEval); bases[15] = proof.split0; assembly { // tmp = zeta^{n+2} diff --git a/contracts/src/libraries/PolynomialEval.sol b/contracts/src/libraries/PolynomialEval.sol index 4dcc94562a..8f4537a677 100644 --- a/contracts/src/libraries/PolynomialEval.sol +++ b/contracts/src/libraries/PolynomialEval.sol @@ -23,9 +23,9 @@ library PolynomialEval { /// @dev stores vanishing poly, lagrange at 1, and Public input poly struct EvalData { - uint256 vanishEval; - uint256 lagrangeOne; - uint256 piEval; + BN254.ScalarField vanishEval; + BN254.ScalarField lagrangeOne; + BN254.ScalarField piEval; } /// @dev Create a new Radix2EvalDomain with `domainSize` which should be power of 2. @@ -103,13 +103,13 @@ library PolynomialEval { /// @dev Evaluate the lagrange polynomial at point `zeta` given the vanishing polynomial /// evaluation `vanish_eval`. - function evaluateLagrangeOne(EvalDomain memory self, uint256 zeta, uint256 vanishEval) - internal - view - returns (uint256 res) - { - if (vanishEval == 0) { - return 0; + function evaluateLagrangeOne( + EvalDomain memory self, + BN254.ScalarField zeta, + BN254.ScalarField vanishEval + ) internal view returns (BN254.ScalarField res) { + if (BN254.ScalarField.unwrap(vanishEval) == 0) { + return BN254.ScalarField.wrap(0); } uint256 p = BN254.R_MOD; @@ -126,7 +126,7 @@ library PolynomialEval { case 0 { divisor := sub(p, 1) } default { divisor := sub(zeta, 1) } } - divisor = BN254.invert(divisor); + divisor = BN254.ScalarField.unwrap((BN254.invert(BN254.ScalarField.wrap(divisor)))); assembly { res := mulmod(vanishEvalMulSizeInv, divisor, p) } @@ -192,7 +192,7 @@ library PolynomialEval { } // compute 1 / \prod_{i=0}^length (zeta - g^i) - divisorProd = BN254.invert(divisorProd); + divisorProd = BN254.ScalarField.unwrap(BN254.invert(BN254.ScalarField.wrap(divisorProd))); assembly { for { let i := 0 } lt(i, length) { i := add(i, 1) } { @@ -254,8 +254,11 @@ library PolynomialEval { view returns (EvalData memory evalData) { - evalData.vanishEval = evaluateVanishingPoly(self, zeta); - evalData.lagrangeOne = evaluateLagrangeOne(self, zeta, evalData.vanishEval); - evalData.piEval = evaluatePiPoly(self, publicInput, zeta, evalData.vanishEval); + evalData.vanishEval = BN254.ScalarField.wrap(evaluateVanishingPoly(self, zeta)); + evalData.lagrangeOne = + evaluateLagrangeOne(self, BN254.ScalarField.wrap(zeta), evalData.vanishEval); + evalData.piEval = BN254.ScalarField.wrap( + evaluatePiPoly(self, publicInput, zeta, BN254.ScalarField.unwrap(evalData.vanishEval)) + ); } } diff --git a/contracts/src/libraries/Transcript.sol b/contracts/src/libraries/Transcript.sol index e5d6a1f771..28e50b2b05 100644 --- a/contracts/src/libraries/Transcript.sol +++ b/contracts/src/libraries/Transcript.sol @@ -19,8 +19,13 @@ library Transcript { self.transcript = abi.encodePacked(self.transcript, message); } - function appendFieldElement(TranscriptData memory self, uint256 fieldElement) internal pure { - appendMessage(self, abi.encodePacked(Utils.reverseEndianness(fieldElement))); + function appendFieldElement(TranscriptData memory self, BN254.ScalarField fieldElement) + internal + pure + { + appendMessage( + self, abi.encodePacked(Utils.reverseEndianness(BN254.ScalarField.unwrap(fieldElement))) + ); } function appendGroupElement(TranscriptData memory self, BN254.G1Point memory comm) @@ -35,7 +40,7 @@ library Transcript { // Transcript APIs // ================================ function appendChallenge(TranscriptData memory self, uint256 challenge) internal pure { - appendFieldElement(self, challenge); + appendFieldElement(self, BN254.ScalarField.wrap(challenge)); } function appendCommitments(TranscriptData memory self, BN254.G1Point[] memory comms) @@ -98,11 +103,31 @@ library Transcript { // ===================== // Currently, K is hardcoded, and there are 5 of them since // # wire types == 5 - appendFieldElement(self, 0x1); // k0 = 1 - appendFieldElement(self, 0x2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a); // k1 - appendFieldElement(self, 0x1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb025); // k2 - appendFieldElement(self, 0x2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a); // k3 - appendFieldElement(self, 0x2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881); // k4 + appendFieldElement(self, BN254.ScalarField.wrap(0x1)); // k0 = 1 + appendFieldElement( + self, + BN254.ScalarField.wrap( + 0x2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a + ) + ); // k1 + appendFieldElement( + self, + BN254.ScalarField.wrap( + 0x1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb025 + ) + ); // k2 + appendFieldElement( + self, + BN254.ScalarField.wrap( + 0x2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a + ) + ); // k3 + appendFieldElement( + self, + BN254.ScalarField.wrap( + 0x2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881 + ) + ); // k4 // selectors appendGroupElement(self, verifyingKey.q1); @@ -128,7 +153,7 @@ library Transcript { // public inputs for (uint256 i = 0; i < publicInput.length; i++) { - appendFieldElement(self, publicInput[i]); + appendFieldElement(self, BN254.ScalarField.wrap(publicInput[i])); } } diff --git a/contracts/test/BLSSig.t.sol b/contracts/test/BLSSig.t.sol new file mode 100644 index 0000000000..394561b806 --- /dev/null +++ b/contracts/test/BLSSig.t.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: Unlicensed + +/* solhint-disable contract-name-camelcase, func-name-mixedcase, one-contract-per-file */ + +pragma solidity ^0.8.0; + +// Libraries +import "forge-std/Test.sol"; +import { BN254 } from "bn254/BN254.sol"; + +// Target contract +import { BLSSig } from "../src/libraries/BLSSig.sol"; + +contract BLSSig_Test is Test { + function genBLSSig(bytes memory message) + private + returns (BN254.G2Point memory, BN254.G1Point memory) + { + // Generate a BLS verification key and signature using rust code + string[] memory cmds = new string[](3); + cmds[0] = "diff-test"; + cmds[1] = "gen-bls-sig"; + cmds[2] = vm.toString(message); + + bytes memory result = vm.ffi(cmds); + + (BN254.G2Point memory vk, BN254.G1Point memory sig) = + abi.decode(result, (BN254.G2Point, BN254.G1Point)); + return (vk, sig); + } + + function testFuzz_BLS_hashes_computation(bytes memory input) external { + string[] memory cmds = new string[](3); + cmds[0] = "diff-test"; + cmds[1] = "gen-bls-hashes"; + cmds[2] = vm.toString(input); + + bytes memory result = vm.ffi(cmds); + + (uint256 fieldElem, BN254.G1Point memory hashToCurveElem) = + abi.decode(result, (uint256, BN254.G1Point)); + + assertEq(fieldElem, BLSSig.hashToField(input)); + assertEq(abi.encode(hashToCurveElem), abi.encode(BLSSig.hashToCurve(input))); + } + + function test_SigVerification_Succeeds() external { + bytes memory message = "Hi"; + (BN254.G2Point memory vk, BN254.G1Point memory sig) = genBLSSig(message); + BLSSig.verifyBlsSig(message, sig, vk); + } + + // This is due to a current limitation/bug of foundry. See + // https://github.com/foundry-rs/foundry/issues/4405 + // See https://github.com/EspressoSystems/espresso-sequencer/issues/847 + function wrapVerifyBlsSig( + bytes memory message, + BN254.G1Point memory sig, + BN254.G2Point memory vk + ) public view { + BLSSig.verifyBlsSig(message, sig, vk); + } + + function test_RevertWhen_SignatureIsInvalid() external { + bytes memory message = "Hi"; + + BN254.G1Point memory badSig = BN254.P1(); + (BN254.G2Point memory vk,) = genBLSSig(message); + vm.expectRevert(BLSSig.BLSSigVerificationFailed.selector); + this.wrapVerifyBlsSig(message, badSig, vk); + } + + function test_RevertWhen_usingWrongVK() external { + bytes memory message = "Hi"; + (BN254.G2Point memory vk, BN254.G1Point memory sig) = genBLSSig(message); + vk; // To avoid compiler warning + BN254.G2Point memory badVK = BN254.P2(); + vm.expectRevert(BLSSig.BLSSigVerificationFailed.selector); + this.wrapVerifyBlsSig(message, sig, badVK); + } +} diff --git a/contracts/test/PlonkVerifier.t.sol b/contracts/test/PlonkVerifier.t.sol index 9883396fb0..b4ff8c52a5 100644 --- a/contracts/test/PlonkVerifier.t.sol +++ b/contracts/test/PlonkVerifier.t.sol @@ -28,7 +28,7 @@ contract PlonkVerifierCommonTest is Test { /// @dev Sanitize a single value to be valid scalar field Bn254::Fr. function sanitizeScalarField(uint256 a) public view returns (uint256) { a = bound(a, 0, BN254.R_MOD - 1); - BN254.validateScalarField(a); + BN254.validateScalarField(BN254.ScalarField.wrap(a)); return a; } @@ -104,8 +104,8 @@ contract PlonkVerifierCommonTest is Test { /// Thin wrapper to ensure two G1 points are the same function assertEqG1Point(BN254.G1Point memory a, BN254.G1Point memory b) public { - assertEq(a.x, b.x); - assertEq(a.y, b.y); + assertEq(BN254.BaseField.unwrap(a.x), BN254.BaseField.unwrap(b.x)); + assertEq(BN254.BaseField.unwrap(a.y), BN254.BaseField.unwrap(b.y)); } } @@ -541,7 +541,12 @@ contract PlonkVerifier_preparePcsInfo_Test is PlonkVerifierCommonTest { assertEq(info.nextEvalPoint, nextEvalPoint); assertEq(info.eval, eval); // NOTE: since we cannot directly compare `struct ScalarsAndBases`, we compare their MSM - assertEqG1Point(BN254.multiScalarMul(info.commBases, info.commScalars), scalarsAndBasesProd); + uint256 l = info.commScalars.length; + BN254.ScalarField[] memory infoCommScalars = new BN254.ScalarField[](l); + for (uint256 i = 0; i < l; i++) { + infoCommScalars[i] = BN254.ScalarField.wrap(info.commScalars[i]); + } + assertEqG1Point(BN254.multiScalarMul(info.commBases, infoCommScalars), scalarsAndBasesProd); assertEqG1Point(info.openingProof, openingProof); assertEqG1Point(info.shiftedOpeningProof, shiftedOpeningProof); } diff --git a/contracts/test/PolynomialEval.t.sol b/contracts/test/PolynomialEval.t.sol index 28d159e0bd..f60718418f 100644 --- a/contracts/test/PolynomialEval.t.sol +++ b/contracts/test/PolynomialEval.t.sol @@ -78,17 +78,17 @@ contract PolynomialEval_evalDataGen_Test is Test { ) external { logSize = bound(logSize, 14, 17); zeta = bound(zeta, 0, BN254.R_MOD - 1); - BN254.validateScalarField(zeta); + BN254.validateScalarField(BN254.ScalarField.wrap(zeta)); // Since these user-provided `publicInputs` were checked outside before passing in via // `BN254.validateScalarField()`, it suffices to assume they are proper for our test here. for (uint256 i = 0; i < publicInput.length; i++) { publicInput[i] = bound(publicInput[i], 0, BN254.R_MOD - 1); - BN254.validateScalarField(publicInput[i]); + BN254.validateScalarField(BN254.ScalarField.wrap(publicInput[i])); } Poly.EvalDomain memory domain = Poly.newEvalDomain(2 ** logSize); // NOTE: since zeta comes from CRH via `computeChallenges`, we can assume it's hard to - // be specifically preimage attacked, or accidentially collide with these values. + // be specifically preimage attacked, or accidentally collide with these values. vm.assume(zeta != 1); // otherwise divisor of lagrange_1_poly would be zero vm.assume(zeta != domain.groupGenInv); // otherwise divisor of lagrange_n_poly would be zero @@ -104,8 +104,8 @@ contract PolynomialEval_evalDataGen_Test is Test { abi.decode(result, (uint256, uint256, uint256)); Poly.EvalData memory evalData = Poly.evalDataGen(domain, zeta, publicInput); - assertEq(vanishEval, evalData.vanishEval); - assertEq(lagrangeOne, evalData.lagrangeOne); - assertEq(piEval, evalData.piEval); + assertEq(vanishEval, BN254.ScalarField.unwrap(evalData.vanishEval)); + assertEq(lagrangeOne, BN254.ScalarField.unwrap(evalData.lagrangeOne)); + assertEq(piEval, BN254.ScalarField.unwrap(evalData.piEval)); } } diff --git a/contracts/test/StakeTable.t.sol b/contracts/test/StakeTable.t.sol index 939878a91d..49738ceadf 100644 --- a/contracts/test/StakeTable.t.sol +++ b/contracts/test/StakeTable.t.sol @@ -46,22 +46,16 @@ contract StakeTable_Test is Test { bytes memory result = vm.ffi(cmds); ( - uint256 blsSigX, - uint256 blsSigY, - uint256 blsVKx0, - uint256 blsVKx1, - uint256 blsVKy0, - uint256 blsVKy1, + BN254.G1Point memory blsSig, + BN254.G2Point memory blsVK, uint256 schnorrVKx, uint256 schnorrVKy - ) = abi.decode( - result, (uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256) - ); + ) = abi.decode(result, (BN254.G1Point, BN254.G2Point, uint256, uint256)); return ( - BN254.G2Point(blsVKx1, blsVKx0, blsVKy1, blsVKy0), // blsVK + blsVK, EdOnBN254.EdOnBN254Point(schnorrVKx, schnorrVKy), // schnorrVK - BN254.G1Point(blsSigX, blsSigY) // sig + blsSig ); } @@ -103,11 +97,11 @@ contract StakeTable_Test is Test { LightClient.LightClientState memory genesis = LightClient.LightClientState({ viewNum: 0, blockHeight: 0, - blockCommRoot: 0, - feeLedgerComm: 0, - stakeTableBlsKeyComm: 0, - stakeTableSchnorrKeyComm: 0, - stakeTableAmountComm: 0, + blockCommRoot: BN254.ScalarField.wrap(0), + feeLedgerComm: BN254.ScalarField.wrap(0), + stakeTableBlsKeyComm: BN254.ScalarField.wrap(0), + stakeTableSchnorrKeyComm: BN254.ScalarField.wrap(0), + stakeTableAmountComm: BN254.ScalarField.wrap(0), threshold: 0 }); lightClientContract = new LightClientTest(genesis, 10); @@ -142,7 +136,7 @@ contract StakeTable_Test is Test { ); } - function testFuzz_RevertWhen_InvalidBLSSig(uint256 scalar) external { + function testFuzz_RevertWhen_InvalidBLSSig(uint256 _scalar) external { uint64 depositAmount = 10; uint64 validUntilEpoch = 5; @@ -151,7 +145,7 @@ contract StakeTable_Test is Test { // Ensure the scalar is valid // Note: Apparently BN254.scalarMul is not well defined when the scalar is 0 - scalar = bound(scalar, 1, BN254.R_MOD - 1); + BN254.ScalarField scalar = BN254.ScalarField.wrap(bound(_scalar, 1, BN254.R_MOD - 1)); BN254.validateScalarField(scalar); BN254.G1Point memory badSig = BN254.scalarMul(BN254.P1(), scalar); BN254.validateG1Point(badSig); diff --git a/contracts/test/Transcript.t.sol b/contracts/test/Transcript.t.sol index ed0940ce36..54c5d53414 100644 --- a/contracts/test/Transcript.t.sol +++ b/contracts/test/Transcript.t.sol @@ -46,7 +46,7 @@ contract Transcript_appendFieldElement_Test is Test { uint256 fieldElement ) external { fieldElement = bound(fieldElement, 0, BN254.R_MOD - 1); - BN254.validateScalarField(fieldElement); + BN254.validateScalarField(BN254.ScalarField.wrap(fieldElement)); string[] memory cmds = new string[](4); cmds[0] = "diff-test"; @@ -57,7 +57,7 @@ contract Transcript_appendFieldElement_Test is Test { bytes memory result = vm.ffi(cmds); (T.TranscriptData memory updated) = abi.decode(result, (T.TranscriptData)); - transcript.appendFieldElement(fieldElement); + transcript.appendFieldElement(BN254.ScalarField.wrap(fieldElement)); assertEq(updated.transcript, transcript.transcript); assertEq(updated.state[0], transcript.state[0]); assertEq(updated.state[1], transcript.state[1]); @@ -73,8 +73,9 @@ contract Transcript_appendGroupElement_Test is Test { uint256 randScalar ) external { randScalar = bound(randScalar, 0, BN254.R_MOD - 1); - BN254.validateScalarField(randScalar); - BN254.G1Point memory randPoint = BN254.scalarMul(BN254.P1(), randScalar); + BN254.validateScalarField(BN254.ScalarField.wrap(randScalar)); + BN254.G1Point memory randPoint = + BN254.scalarMul(BN254.P1(), BN254.ScalarField.wrap(randScalar)); string[] memory cmds = new string[](4); cmds[0] = "diff-test"; @@ -93,7 +94,7 @@ contract Transcript_appendGroupElement_Test is Test { /// @dev Test special case where the identity point (or infinity) is appended. function test_appendInfinityPoint_succeeds(T.TranscriptData memory transcript) external { - BN254.G1Point memory infinity = BN254.G1Point(0, 0); + BN254.G1Point memory infinity = BN254.infinity(); assert(BN254.isInfinity(infinity)); string[] memory cmds = new string[](4); @@ -145,7 +146,7 @@ contract Transcript_appendVkAndPubInput_Test is Test { ) external { for (uint256 i = 0; i < publicInput.length; i++) { publicInput[i] = bound(publicInput[i], 0, BN254.R_MOD - 1); - BN254.validateScalarField(publicInput[i]); + BN254.validateScalarField(BN254.ScalarField.wrap(publicInput[i])); } IPlonkVerifier.VerifyingKey memory vk = VkTest.getVk(); diff --git a/sequencer/Cargo.toml b/sequencer/Cargo.toml index c7e448c2a5..f1d622c773 100644 --- a/sequencer/Cargo.toml +++ b/sequencer/Cargo.toml @@ -55,7 +55,6 @@ hotshot-query-service = { workspace = true } jf-primitives = { workspace = true } jf-utils = { workspace = true } # TODO temporary: used only for test_rng() -nll = { git = "https://github.com/EspressoSystems/nll" } rand = "0.8.5" sequencer-utils = { path = "../utils" } serde = { version = "1.0.192", features = ["derive"] }