diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 33a8b1b6..67624491 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -33,8 +33,6 @@ jobs: uses: foundry-rs/foundry-toolchain@v1 - name: Test backend - env: - SIGNATURE_VERIFICATION_MESSAGE: "Summa proof of solvency for CryptoExchange" run: | cd backend cargo test --release -- --nocapture diff --git a/backend/README.md b/backend/README.md index 3f04ef51..6a942994 100644 --- a/backend/README.md +++ b/backend/README.md @@ -41,7 +41,7 @@ To build the binary executable and test it ``` cargo build -SIGNATURE_VERIFICATION_MESSAGE="Summa proof of solvency for CryptoExchange" cargo test --release -- --nocapture +cargo test --release -- --nocapture ``` ## Important Notices diff --git a/backend/build.rs b/backend/build.rs index 6d3cc39d..0cc6e4a4 100644 --- a/backend/build.rs +++ b/backend/build.rs @@ -8,11 +8,6 @@ fn main() { "Summa", "Summa", ), - ( - "src/contracts/generated/solvency_verifier.rs", - "SolvencyVerifier", - "SolvencyVerifier", - ), ( "src/contracts/generated/inclusion_verifier.rs", "InclusionVerifier", diff --git a/backend/examples/summa_solvency_flow.rs b/backend/examples/summa_solvency_flow.rs index 172ccb74..9fcb6595 100644 --- a/backend/examples/summa_solvency_flow.rs +++ b/backend/examples/summa_solvency_flow.rs @@ -9,10 +9,10 @@ use summa_backend::{ address_ownership::AddressOwnership, round::{MstInclusionProof, Round}, }, - contracts::signer::AddressInput, + contracts::signer::{AddressInput, SummaSigner}, tests::initialize_test_env, }; -use summa_solvency::merkle_sum_tree::utils::generate_leaf_hash; +use summa_solvency::merkle_sum_tree::{utils::generate_leaf_hash, MerkleSumTree}; const N_ASSETS: usize = 2; const USER_INDEX: usize = 0; @@ -20,24 +20,30 @@ const USER_INDEX: usize = 0; #[tokio::main] async fn main() -> Result<(), Box> { // Initialize test environment without `address_ownership` instance from `initialize_test_env` function. - let (anvil, _, _, _, summa_contract) = initialize_test_env().await; + let (anvil, _, _, _, summa_contract) = initialize_test_env(None).await; // 1. Submit ownership proof // - // Each CEX prepares its own `signature` CSV file. - let signature_csv_path = "src/apis/csv/signatures.csv"; - - // Using AddressInput::Address to directly provide the summa_contract's address. - // For deployed contracts, if the address is stored in a config file, - // you can alternatively use AddressInput::Path to specify the file's path. - let mut address_ownership_client = AddressOwnership::new( + // The signer instance would be shared with `address_ownership` and `round` instances + // + // Using `AddressInput::Address`` to directly provide the summa_contract's address. + // + // If the address of a deployed contract is stored in a configuration file, + // you can use `AddressInput::Path` to provide the path to that file. + // + // For example, if the contract address is in "backend/src/contracts/deployments.json" located + // you would use `AddressInput::Path` as follows:`AddressInput::Path("backend/src/contracts/deployments.json".to_string())`. + // + let signer = SummaSigner::new( "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", - anvil.chain_id(), anvil.endpoint().as_str(), AddressInput::Address(summa_contract.address()), - signature_csv_path, ) - .unwrap(); + .await?; + + // Each CEX prepares its own `signature` CSV file. + let signature_csv_path = "src/apis/csv/signatures.csv"; + let mut address_ownership_client = AddressOwnership::new(&signer, signature_csv_path).unwrap(); // Dispatch the proof of address ownership. // the `dispatch_proof_of_address_ownership` function sends a transaction to the Summa contract. @@ -47,30 +53,29 @@ async fn main() -> Result<(), Box> { println!("1. Ownership proofs are submitted successfully!"); - // 2. Submit solvency proof + // 2. Submit Commitment // - // Initialize the `Round` instance to submit the proof of solvency. - let asset_csv = "src/apis/csv/assets.csv"; - let entry_csv = "../zk_prover/src/merkle_sum_tree/csv/entry_16.csv"; + // Initialize the `Round` instance to submit the liability commitment. let params_path = "ptau/hermez-raw-11"; + let assets_csv_path = "src/apis/csv/assets.csv"; + let entry_csv = "../zk_prover/src/merkle_sum_tree/csv/entry_16.csv"; + let mst = MerkleSumTree::new(entry_csv).unwrap(); - // Using the `round` instance, the solvency proof is dispatched to the Summa contract with the `dispatch_solvency_proof` method. + // Using the `round` instance, the commitment is dispatched to the Summa contract with the `dispatch_commitment` method. + let timestamp = 1u64; let mut round = Round::<4, 2, 14>::new( - "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil account [0] - anvil.chain_id(), - anvil.endpoint().as_str(), - AddressInput::Address(summa_contract.address()), - entry_csv, - asset_csv, + &signer, + Box::new(mst), + assets_csv_path, params_path, - 1, + timestamp, ) .unwrap(); - // Sends the solvency proof, which should ideally complete without errors. - round.dispatch_solvency_proof().await?; + // Sends the commitment, which should ideally complete without errors. + round.dispatch_commitment().await?; - println!("2. Solvency proof is submitted successfully!"); + println!("2. Commitment is submitted successfully!"); // 3. Generate Inclusion Proof // @@ -115,10 +120,10 @@ async fn main() -> Result<(), Box> { ); // Get `mst_root` from contract. the `mst_root` is disptached by CEX with specific time `snapshot_time`. - let mst_root = summa_contract.mst_roots(snapshot_time).call().await?; + let commitment = summa_contract.commitments(snapshot_time).call().await?; // Match the `mst_root` with the `root_hash` derived from the proof. - assert_eq!(mst_root, public_inputs[1]); + assert_eq!(commitment, public_inputs[1]); // Validate the inclusion proof using the contract verifier. let proof = inclusion_proof.get_proof(); diff --git a/backend/scripts/update_verifier_contracts.sh b/backend/scripts/update_verifier_contracts.sh index 4e5c8eec..1fed5197 100644 --- a/backend/scripts/update_verifier_contracts.sh +++ b/backend/scripts/update_verifier_contracts.sh @@ -5,7 +5,6 @@ set -e echo "1. Building verifier contracts" cd ../zk_prover cargo run --release --example gen_inclusion_verifier -cargo run --release --example gen_solvency_verifier # Deploy contracts to local environment echo "2. Deploying contracts to local environment" diff --git a/backend/src/apis/address_ownership.rs b/backend/src/apis/address_ownership.rs index 54233e86..42a405d1 100644 --- a/backend/src/apis/address_ownership.rs +++ b/backend/src/apis/address_ownership.rs @@ -1,29 +1,23 @@ -use crate::contracts::{ - generated::summa_contract::AddressOwnershipProof, - signer::{AddressInput, SummaSigner}, -}; +use crate::contracts::{generated::summa_contract::AddressOwnershipProof, signer::SummaSigner}; use std::{error::Error, result::Result}; use super::csv_parser::parse_signature_csv; -pub struct AddressOwnership { +pub struct AddressOwnership<'a> { address_ownership_proofs: Vec, - signer: SummaSigner, + signer: &'a SummaSigner, } -impl AddressOwnership { - pub fn new( - signer_key: &str, - chain_id: u64, - rpc_url: &str, - summa_address_input: AddressInput, +impl AddressOwnership<'_> { + pub fn new<'a>( + signer: &'a SummaSigner, signature_csv_path: &str, - ) -> Result> { + ) -> Result, Box> { let address_ownership_proofs = parse_signature_csv(signature_csv_path)?; Ok(AddressOwnership { address_ownership_proofs, - signer: SummaSigner::new(signer_key, chain_id, rpc_url, summa_address_input), + signer, }) } diff --git a/backend/src/apis/csv/assets.csv b/backend/src/apis/csv/assets.csv index bb2e38f0..0f3fc849 100644 --- a/backend/src/apis/csv/assets.csv +++ b/backend/src/apis/csv/assets.csv @@ -1,3 +1,3 @@ -chain;asset_name;amount -ETH;ETH;556863 -ETH;USDT;556863 +chain;asset_name +ETH;ETH +ETH;USDT diff --git a/backend/src/apis/csv_parser.rs b/backend/src/apis/csv_parser.rs index 3bde75e1..ca2467cb 100644 --- a/backend/src/apis/csv_parser.rs +++ b/backend/src/apis/csv_parser.rs @@ -1,9 +1,6 @@ use std::{error::Error, fs::File, path::Path}; -use ethers::{ - abi::AbiEncode, - types::{Bytes, U256}, -}; +use ethers::{abi::AbiEncode, types::Bytes}; use serde::{Deserialize, Serialize}; use crate::contracts::generated::summa_contract::{AddressOwnershipProof, Asset}; @@ -53,7 +50,6 @@ pub fn parse_signature_csv>( struct AssetRecord { chain: String, asset_name: String, - amount: String, } pub fn parse_asset_csv, const N_ASSETS: usize>( @@ -70,7 +66,6 @@ pub fn parse_asset_csv, const N_ASSETS: usize>( assets_vec.push(Asset { asset_name: record.asset_name, chain: record.chain, - amount: U256::from_dec_str(&record.amount)?, }); } @@ -114,7 +109,6 @@ mod tests { Asset { chain: "ETH".to_string(), asset_name: "ETH".to_string(), - amount: U256::from(556863), } ); assert_eq!( @@ -122,7 +116,6 @@ mod tests { Asset { chain: "ETH".to_string(), asset_name: "USDT".to_string(), - amount: U256::from(556863), } ); } diff --git a/backend/src/apis/round.rs b/backend/src/apis/round.rs index eba011d3..674d36f4 100644 --- a/backend/src/apis/round.rs +++ b/backend/src/apis/round.rs @@ -1,6 +1,6 @@ use ethers::types::{Bytes, U256}; use halo2_proofs::{ - halo2curves::bn256::{Bn256, Fr as Fp, G1Affine}, + halo2curves::bn256::{Bn256, G1Affine}, plonk::{ProvingKey, VerifyingKey}, poly::kzg::commitment::ParamsKZG, }; @@ -8,17 +8,13 @@ use serde::{Deserialize, Serialize}; use std::error::Error; use super::csv_parser::parse_asset_csv; -use crate::contracts::{ - generated::summa_contract::summa::Asset, - signer::{AddressInput, SummaSigner}, -}; +use crate::contracts::{generated::summa_contract::summa::Asset, signer::SummaSigner}; use summa_solvency::{ circuits::{ merkle_sum_tree::MstInclusionCircuit, - solvency::SolvencyCircuit, utils::{gen_proof_solidity_calldata, generate_setup_artifacts}, }, - merkle_sum_tree::MerkleSumTree, + merkle_sum_tree::Tree, }; pub(crate) type SetupArtifacts = ( @@ -60,42 +56,35 @@ impl MstInclusionProof { } pub struct Snapshot { - mst: MerkleSumTree, + mst: Box>, assets_state: [Asset; N_ASSETS], - trusted_setup: [SetupArtifacts; 2], + trusted_setup: SetupArtifacts, } -pub struct Round { +pub struct Round<'a, const LEVELS: usize, const N_ASSETS: usize, const N_BYTES: usize> { timestamp: u64, snapshot: Snapshot, - signer: SummaSigner, + signer: &'a SummaSigner, } impl - Round + Round<'_, LEVELS, N_ASSETS, N_BYTES> where [usize; N_ASSETS + 1]: Sized, [usize; 2 * (1 + N_ASSETS)]: Sized, { - pub fn new( - signer_key: &str, - chain_id: u64, - rpc_url: &str, - summa_address_input: AddressInput, - entry_csv_path: &str, + pub fn new<'a>( + signer: &'a SummaSigner, + mst: Box>, asset_csv_path: &str, params_path: &str, timestamp: u64, - ) -> Result, Box> { + ) -> Result, Box> { Ok(Round { timestamp, - snapshot: Snapshot::::new( - asset_csv_path, - entry_csv_path, - params_path, - ) - .unwrap(), - signer: SummaSigner::new(signer_key, chain_id, rpc_url, summa_address_input), + snapshot: Snapshot::::new(mst, asset_csv_path, params_path) + .unwrap(), + signer: &signer, }) } @@ -103,17 +92,22 @@ where self.timestamp } - pub async fn dispatch_solvency_proof(&mut self) -> Result<(), Box> { - let proof: SolvencyProof = match self.snapshot.generate_proof_of_solvency() { - Ok(p) => p, - Err(e) => return Err(format!("Failed to generate proof of solvency: {}", e).into()), - }; + pub async fn dispatch_commitment(&mut self) -> Result<(), Box> { + let root_str = format!("{:?}", self.snapshot.mst.root().hash); + let mst_root = U256::from_str_radix(&root_str, 16).unwrap(); + + let mut root_sums = Vec::::new(); + + for balance in self.snapshot.mst.root().balances.iter() { + let fp_str = format!("{:?}", balance); + root_sums.push(U256::from_str_radix(&fp_str, 16).unwrap()); + } self.signer - .submit_proof_of_solvency( - proof.public_inputs[0], + .submit_commitment( + mst_root, + root_sums, self.snapshot.assets_state.to_vec(), - proof.proof_calldata, U256::from(self.get_timestamp()), ) .await?; @@ -139,15 +133,13 @@ where [usize; 2 * (1 + N_ASSETS)]: Sized, { pub fn new( + mst: Box>, asset_csv_path: &str, - entry_csv_path: &str, params_path: &str, ) -> Result, Box> { let assets_state = parse_asset_csv::<&str, N_ASSETS>(asset_csv_path).unwrap(); - let mst = MerkleSumTree::::new(entry_csv_path).unwrap(); let mst_inclusion_circuit = MstInclusionCircuit::::init_empty(); - let solvency_circuit = SolvencyCircuit::::init_empty(); // get k from ptau file name let parts: Vec<&str> = params_path.split("-").collect(); @@ -157,40 +149,10 @@ where let mst_inclusion_setup_artifacts: SetupArtifacts = generate_setup_artifacts(k, Some(params_path), mst_inclusion_circuit).unwrap(); - let solvency_setup_artifacts_artifacts = - generate_setup_artifacts(10, Some(params_path), solvency_circuit).unwrap(); - - let trusted_setup = [ - mst_inclusion_setup_artifacts, - solvency_setup_artifacts_artifacts, - ]; - Ok(Snapshot { mst, assets_state, - trusted_setup, - }) - } - - pub fn generate_proof_of_solvency(&self) -> Result { - let asset_sums = self - .assets_state - .iter() - .map(|asset| Fp::from_raw(asset.amount.0) as Fp) - .collect::>() - .try_into() - .unwrap(); - let circuit = SolvencyCircuit::::init(self.mst.clone(), asset_sums); - - let calldata = gen_proof_solidity_calldata( - &self.trusted_setup[1].0, - &self.trusted_setup[1].1, - circuit, - ); - - Ok(SolvencyProof { - proof_calldata: calldata.0, - public_inputs: calldata.1, + trusted_setup: mst_inclusion_setup_artifacts, }) } @@ -198,13 +160,15 @@ where &self, user_index: usize, ) -> Result { + let merkle_proof = self.mst.generate_proof(user_index).unwrap(); + let user_entry = self.mst.get_entry(user_index).clone(); let circuit = - MstInclusionCircuit::::init(self.mst.clone(), user_index); + MstInclusionCircuit::::init(merkle_proof, user_entry); // Currently, default manner of generating a inclusion proof for solidity-verifier. let calldata = gen_proof_solidity_calldata( - &self.trusted_setup[0].0, - &self.trusted_setup[0].1, + &self.trusted_setup.0, + &self.trusted_setup.1, circuit.clone(), ); diff --git a/backend/src/contracts/abi/InclusionVerifier.json b/backend/src/contracts/abi/InclusionVerifier.json index e752b6e8..9fbf0f55 100644 --- a/backend/src/contracts/abi/InclusionVerifier.json +++ b/backend/src/contracts/abi/InclusionVerifier.json @@ -1 +1 @@ -{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/InclusionVerifier.sol","abi":[{"inputs":[{"internalType":"uint256[]","name":"pubInputs","type":"uint256[]"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50615467806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004615329565b610057565b604051901515815260200160405180910390f35b60006001610063615252565b6000805160206154128339815191526100d9565b6000805160206153f283398151915280831081831016908380096000805160206153f28339815191528384096000805160206153f283398151915284820990506000805160206153f28339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301527f2df16218a82d39831071e46956c233ee9aa79bb065b265871080d8643f2f52ab600083015260208501518060608401526040860151806080850152846101388284610077565b169450505060608501518060a084015260808601518060c08501528461015e8284610077565b169450505060a08501518060e084015260c086015180610100850152846101858284610077565b16945050506101206000830120610120830152610120820151818106610140840152806101608401525060e085015180610180840152610100860151806101a0850152846101d38284610077565b1694505050610120850151806101c0840152610140860151806101e0850152846101fd8284610077565b60a061016087012061020087018190528581066102208801526102408701521694506001915050610260830153602161024083012061026083018190528181066102808401526102a08301526101608501516102c083018190526101808601516102e08401819052846102708284610077565b16945050506101a0850151806103008401526101c0860151806103208501528461029a8284610077565b16945050506101e08501518061034084015261020086015180610360850152846102c48284610077565b169450505061022085015180610380840152610240860151806103a0850152846102ee8284610077565b16945050506101206102a08301206103c08301526103c08201518181066103e0840152806104008401525061026085015180610420840152610280860151806104408501528461033e8284610077565b16945050506102a0850151806104608401526102c086015180610480850152846103688284610077565b16945050506102e0850151806104a0840152610300860151806104c0850152846103928284610077565b1694505050610320850151806104e084015261034086015180610500850152846103bc8284610077565b16945050506103608501518061052084015261038086015180610540850152846103e68284610077565b1694505050610160610400830120610560830152610560820151818106610580840152806105a084015250806103a0860151066105c0830152806103c0860151066105e0830152806103e086015106610600830152806104008601510661062083015280610420860151066106408301528061044086015106610660830152806104608601510661068083015280610480860151066106a0830152806104a0860151066106c0830152806104c0860151066106e0830152806104e086015106610700830152806105008601510661072083015280610520860151066107408301528061054086015106610760830152806105608601510661078083015280610580860151066107a0830152806105a0860151066107c0830152806105c0860151066107e0830152806105e086015106610800830152806106008601510661082083015280610620860151066108408301528061064086015106610860830152806106608601510661088083015280610680860151066108a0830152806106a0860151066108c0830152806106c0860151066108e0830152806106e086015106610900830152806107008601510661092083015280610720860151066109408301528061074086015106610960830152806107608601510661098083015280610780860151066109a0830152806107a0860151066109c0830152806107c0860151066109e0830152806107e086015106610a008301526104806105a0830120610a20830152610a20820151818106610a4084015280610a60840152506001610a808301536021610a60830120610a808301819052818106610aa0840152610ac0830152610800850151610ae08301819052610820860151610b0084018190528461066f8284610077565b16945050506060610ac0830120610b20830152610b20820151818106610b4084015280610b608401525061084085015180610b8084015261086086015180610ba0850152846106be8284610077565b16945050508061058083015161058084015109610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830181905281908009610ce0830181905281908009610d00830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610d0084015108610d20830152807f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610d2084015109610d40830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d4084015109610d60830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff61058084015108610d80830152807f2498c2d3affa1baaf6419dbccb6a054bb87359c02eade5aeacd86c84757b9051610d4084015109610da0830152807f0bcb8b9f3137847ec20ea7f9b61753116fc08e884b0b8ae29709890f7a846fb061058084015108610dc0830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d4084015109610de0830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc61058084015108610e00830152807f28771071ab1633014eae27cfc16d5ebe08a8fe2fc9e85044e4a45f82c14cd825610d4084015109610e20830152807f07ed3e01361b6d2869a21de6c013f99f1f8aea18afd1204c5f3d96112eb327dc61058084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d4084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e61058084015108610e80830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610d4084015109610ea0830152807f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e761058084015108610ec0830152806001610d4084015109610ee0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058084015108610f00830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610d4084015109610f20830152807f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa261058084015108610f40830152610d808201518181610dc085015109905080610f608401528181610e0085015109905080610f808401528181610e4085015109905080610fa08401528181610e8085015109905080610fc08401528181610ec085015109905080610fe08401528181610f00850151099050806110008401528181610f40850151099050806110208401528181610d208501510990508061104084015250602061108083015260206110a083015260206110c08301526110408201516110e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6111008301526000805160206154128339815191526111208301528260016020611060850160c0611080870160055afa141692506110608201516000610d208401519050828261102086015109610d20850152828282099150610f408401519050828261100086015109610f40850152828282099150610f0084015190508282610fe086015109610f00850152828282099150610ec084015190508282610fc086015109610ec0850152828282099150610e8084015190508282610fa086015109610e80850152828282099150610e4084015190508282610f8086015109610e40850152828282099150610e0084015190508282610f6086015109610e00850152828282099150610dc084015190508282610d8086015109610dc085015282828209610d808501819052610d608501518493509091500961114083015280610dc0830151610da08401510961116083015280610e00830151610de08401510961118083015280610e40830151610e20840151096111a083015280610e80830151610e60840151096111c083015280610ec0830151610ea0840151096111e083015280610f00830151610ee08401510961120083015280610f40830151610f20840151096112208301528060208301516112008401510981818360408601516112208701510908611240840152506106e08201516105c0830151829190086112608301819052819080096112808301819052819080096112a0830152806112a0830151611260840151096112c0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad56112c0840151096112e0830152806107008301516105e0840151086113008301819052819080096113208301819052819080096113408301528061134083015161130084015109611360830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e861136084015109611380830152806113808301516112e0840151086113a08301528061060083015182036113a0840151086113c083018190526107808301518291096113e0830152806113e08301516103e084015109611400830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff96112c084015109611420830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113608401510961144083015280611440830151611420840151086114608301528061062083015182036114608401510861148083018190526107808301518291096114a0830152806114a0830151611400840151086114c0830152806114c08301516103e0840151096114e08301528061064083015182036112c08401510861150083018190526107a0830151829109611520830152806115208301516114e084015108611540830152806115408301516103e084015109611560830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561064084015109611580830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611300840151096115a0830152806115a0830151611580840151086115c083018190526106a08301518291086115e0830181905281908009611600830181905281908009611620830152806116208301516115e084015109611640830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e6661060084015109611660830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6106208401510961168083015280611680830151611660840151086116a0830152806116a08301518203611640840151086116c083018190526107a08301518291096116e0830152806116e083015161156084015108611700830152806117008301516103e084015109611720830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961064084015109611740830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c861130084015109611760830152806117608301516117408401510861178083018190526106c08301518291086117a0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610600840151096117c0830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be610620840151096117e0830152806117e08301516117c0840151086118008301528061180083015182036117a08401510861182083018190526107a08301518291096118408301528061184083015161172084015108611860830152806118608301516103e0840151096118808301528061076083015182036001086118a083018190526107608301518291096118c08301528061076083015182036002086118e083018190526118c08301518291096119008301528061076083015182036004086119208301819052611900830151829109611940830152806105c0830151610680840151086119608301528061060083015182036119608401510861198083018190526119408301518291096119a0830152806119a0830151611880840151086119c0830152806119c08301516103e0840151096119e083015280610620830151820361066084015108611a008301819052611940830151829109611a2083015280611a208301516119e084015108611a4083015280611a408301516103e084015109611a60830152806107c08301516113c084015109611a8083015280611a80830151611a6084015108611aa083015280611aa08301516103e084015109611ac0830152806107c083015161148084015109611ae083015280611ae0830151611ac084015108611b0083015280611b008301516103e084015109611b20830152806107e083015161150084015109611b4083015280611b40830151611b2084015108611b6083015280611b608301516103e084015109611b80830152806107e08301516116c084015109611ba083015280611ba0830151611b8084015108611bc083015280611bc08301516103e084015109611be0830152806107e083015161182084015109611c0083015280611c00830151611be084015108611c2083015280611c208301516103e084015109611c40830152806107608301518203600308611c608301819052611900830151829109611c8083015280611c8083015161198084015109611ca083015280611ca0830151611c4084015108611cc083015280611cc08301516103e084015109611ce083015280611c80830151611a0084015109611d0083015280611d00830151611ce084015108611d2083015280611d208301516103e084015109611d40830152806107608301516118e084015109611d6083015280611d60830151611c6084015109611d8083015280611d8083015161192084015109611da083015280611da083015161064084015109611dc0830152806106408301518203600108611de08301819052611dc0830151829109611e0083015280611e00830151611d4084015108611e2083015280611e208301516103e084015109611e4083015280610640830151600209611e60830152806105c083015182036105e084015108611e808301819052611e60830151829109611ea0830152806105c0830151820361060084015108611ec083015280611ec08301518203611ea084015108611ee08301528061062083015182036105e084015108611f0083015280611f008301518203611ee084015108611f208301819052611da0830151829109611f4083015280611f40830151611e4084015108611f6083015280611f608301516103e084015109611f80830152806118c0830151611c6084015109611fa083015280611fa083015161192084015109611fc0830152806105e08301516105c084015108611fe0830152806106408301518203611fe0840151086120008301819052611fc083015182910961202083015280612020830151611f8084015108612040830152806120408301516103e0840151096120608301819052612020830151829108612080830152806120808301516103e0840151096120a0830152806108e083015182036001086120c083018190526112008301518291096120e0830152806120e08301516120a084015108612100830152806121008301516103e0840151096121208301526109408201518190800961214083015280610940830151820361214084015108612160830181905261114083015182910961218083015280612180830151612120840151086121a0830152806121a08301516103e0840151096121c0830152806109208301518203610940840151086121e08301819052611200830151829109612200830152806122008301516121c084015108612220830152806122208301516103e084015109612240830152806111408301518203600108612260830152806111808301516111608401510861228083018190526111a08301518291086122a083018190526111c08301518291086122c083018190526111e08301518291086122e0830152806122e08301518203612260840151086123008301528061022083015161082084015109612320830152806123208301516106a08401510861234083018190526102808301518291086123608301528061022083015161084084015109612380830152806123808301516105c0840151086123a083018190526102808301518291086123c083018190526123608301518291096123e08301528061022083015161086084015109612400830152806124008301516105e084015108612420830181905261028083015182910861244083018190526123e08301518291096124608301528061022083015161088084015109612480830152806124808301516106c0840151086124a083018190526102808301518291086124c083018190526124608301518291096124e08301819052610900830151829109612500830152806102208301516001096125208301528061252083015161058084015109612540830152806125408301516106a0840151086125608301819052610280830151829108612580830152806102208301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096125a0830152806125a0830151610580840151096125c0830152806125c08301516105c0840151086125e083018190526102808301518291086126008301819052612580830151829109612620830152806102208301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096126408301528061264083015161058084015109612660830152806126608301516105e08401510861268083018190526102808301518291086126a083018190526126208301518291096126c0830152806102208301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e52096126e0830152806126e083015161058084015109612700830152806127008301516106c084015108612720830181905261028083015182910861274083018190526126c083015182910961276083018190526108e0830151829109612780830152806127808301518203612500840151086127a083018190526123008301518291096127c0830152806127c0830151612240840151086127e0830152806127e08301516103e084015109612800830152806102208301516108a08401510961282083015280612820830151610640840151086128408301819052610280830151829108612860830152806102208301516108c08401510961288083015280612880830151611240840151086128a083018190526102808301518291086128c083018190526128608301518291096128e08301819052610960830151829109612900830152806102208301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612920830152806129208301516105808401510961294083015280612940830151610640840151086129608301819052610280830151829108612980830152806102208301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d096129a0830152806129a0830151610580840151096129c0830152806129c0830151611240840151086129e08301819052610280830151829108612a008301819052612980830151829109612a208301819052610940830151829109612a4083015280612a40830151820361290084015108612a608301819052612300830151829109612a8083015280612a8083015161280084015108612aa083015280612aa08301516103e084015109612ac0830152806109808301518203600108612ae08301819052611200830151829109612b0083015280612b00830151612ac084015108612b2083015280612b208301516103e084015109612b4083015261098082015181908009612b60830152806109808301518203612b6084015108612b808301819052611140830151829109612ba083015280612ba0830151612b4084015108612bc083015280612bc08301516103e084015109612be0830152806102208301516109c084015108612c0083018190526109a0830151829109612c2083015280610280830151610a0084015108612c408301819052612c20830151829109612c608301528061060083015161010009612c8083015280612c8083015182036105c084015108612ca08301819052610740830151829109612cc08301819052610220830151829108612ce08301819052610980830151829109612d008301528061028083015161072084015108612d208301819052612d00830151829109612d4083015280612d408301518203612c6084015108612d608301819052612300830151829109612d8083015280612d80830151612be084015108612da083015280612da08301516103e084015109612dc083015280610a0083015182036109c084015108612de08301819052611200830151829109612e0083015280612e00830151612dc084015108612e2083015280612e208301516103e084015109612e4083015280612300830151612de084015109612e60830152806109e083015182036109c084015108612e808301819052612e60830151829109612ea083015280612ea0830151612e4084015108612ec0830152610d0082015181908009612ee08301819052610d00830151829109612f008301819052610d00830151829109612f208301819052610d00830151829109612f4083015280610d00830151600109612f6083015280612ee0830151600109612f8083015280612f00830151600109612fa083015280612f20830151600109612fc083015280610d20830151612ec084015109612fe083015280610580830151610bc08401510961300083015280600161058084015109613020830152806130208301518203610b4084015108613040830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f61058084015109613060830152806130608301518203610b4084015108613080830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610580840151096130a0830152806130a08301518203610b40840151086130c0830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610580840151096130e0830152806130e08301518203610b408401510861310083015280817f21054ce8b3cb9dc9b87af5c70c8f54994090ad8fa7e06caaf989ba5806b6798b610bc085015109610b4084015109818183847f0f5f018a2d66025fffd54fef74f203c3e7a33ab8d1d903e64a583b3be9498676610bc08801510961058087015109089050806131208401525080817f10ac009d2f31395e301635cd6d292978a4012197c24d6e63fb49943a70296136610bc085015109610b4084015109818183847f2696aa2788110c63ebbfd7f92b352ce93b28bbdae57b7cb94bc5885ee439e774610bc08801510961058087015109089050806131408401525080817f2510cae1618713ac17c9ef83f1a67645ed21f454d96bf1f072ca5b463e7f0c28610bc085015109610b4084015109818183847f0d6a07653c64f4112284cb8b23bf73adecaf4ee0fef51998549526f07b6defd7610bc088015109610580870151090861316084015250613040820151819060010961318083018190526130808301518291096131a083018190526131008301518291096131c0830152806001610b40840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058087015109089050806131e08401525080817f1d81b9bd5165d63a0d4a8370d37966eb243365d36ca235911564a783f8234cf2610bc085015109610b4084015109818183847f12e294b58fcbc9efab05c245ae07f172040082750d173b002e7d4e0ff7dcb30f610bc08801510961058087015109089050806132008401525080817f142f93c8919700eddb46a823a63f1726c05e6953fd8ba57ddf6ea70e7ebc8dcf610bc085015109610b4084015109818183847f2707d3cc5788c2cfc0ee9e5f5638da3b90cb6d8b97224a4521073ec9f10826fb610bc08801510961058087015109089050806132208401525080817f13d3d4db83b42c4d48afa6b5c9cbe3f49703d0caf1fdc301b0d4d3743ab60833610bc085015109610b4084015109818183847f223ed99d38075819043fa85ed3c54f3bfb5d62312139562ca82d9903b1b52e27610bc0880151096105808701510908613240840152506130c08201516131a08301518291900961326083015280817f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa361058085015109610b4084015109818183847f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e6105808801510961058087015109089050806132808401525080817f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e61058085015109610b4084015109818183847f1a514dd9f80de355133414990bffdc137169ffbf79f1b0988ce4dc4b27adb4e36105808801510961058087015109089050806132a08401525080817f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e861058085015109610b4084015109818183847f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d716196105808801510961058087015109089050806132c08401525080817f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161961058085015109610b4084015109818183847f20198517670312541561a1720d2538ac357df59dafa0d41bd7235a97f2f364376105808801510961058087015109086132e0840152506131008201516131808301518291900961330083015261312082015181816131408501510990508061332084015281816131608501510990508061334084015281816131e0850151099050806133608401528181613180850151099050806133808401528181613200850151099050806133a08401528181613220850151099050806133c08401528181613240850151099050806133e084015281816132608501510990508061340084015281816132808501510990508061342084015281816132a08501510990508061344084015281816131a08501510990508061346084015281816132c08501510990508061348084015281816132e0850151099050806134a08401528181613300850151099050806134c0840152506020613500830152602061352083015260206135408301526134c08201516135608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6135808301526000805160206154128339815191526135a083015282600160206134e0850160c0613500870160055afa141692506134e08201516000613300840151905082826134a0860151096133008501528282820991506132e084015190508282613480860151096132e08501528282820991506132c084015190508282613460860151096132c08501528282820991506131a084015190508282613440860151096131a08501528282820991506132a084015190508282613420860151096132a08501528282820991506132808401519050828261340086015109613280850152828282099150613260840151905082826133e086015109613260850152828282099150613240840151905082826133c086015109613240850152828282099150613220840151905082826133a086015109613220850152828282099150613200840151905082826133808601510961320085015282828209915061318084015190508282613360860151096131808501528282820991506131e084015190508282613340860151096131e08501528282820991506131608401519050828261332086015109613160850152828282099150613140840151905082826131208601510961314085015282828209613120850181905261314085015190925083915082900890508181613160850151086135c0840152506131808201516131c0830151829190096135e08301526131e08201518061360084015250806132608301516131c0840151096136208301526132008201518181613220850151089050818161324085015108613640840152506131a08201516131c08301518291900961366083015261328082015181816132a085015108613680840152506133008201516131c0830151829190096136a08301526132c082015181816132e0850151086136c0840152506135c082015161360083015182908290099050806136e084015281816136408501510990508061370084015281816136808501510990508061372084015281816136c08501510990508061374084015250602061378083015260206137a083015260206137c08301526137408201516137e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6138008301526000805160206154128339815191526138208301528260016020613760850160c0613780870160055afa1416925061376082015160006136c084015190508282613720860151096136c08501528282820991506136808401519050828261370086015109613680850152828282099150613640840151905082826136e086015109613640850152828282099150613600840151905082826135c086015109613600850152828282096135c085015250506136008201516135e08301518291900961384083015280613640830151613620840151096138608301528061368083015161366084015109613880830152806136c08301516136a0840151096138a0830152610a40820151819080096138c08301819052610a408301518291096138e08301819052610a408301518291096139008301819052610a408301518291096139208301819052610a408301518291096139408301819052610a408301518291096139608301819052610a408301518291096139808301819052610a408301518291096139a08301819052610a408301518291096139c08301819052610a408301518291096139e08301819052610a40830151829109613a008301819052610a40830151829109613a208301819052610a40830151829109613a408301819052610a40830151829109613a608301819052610a40830151829109613a808301819052610a40830151829109613aa08301819052610a40830151829109613ac08301819052610a40830151829109613ae08301819052610a40830151829109613b008301819052610a40830151829109613b20830152610aa082015181908009613b408301819052610aa0830151829109613b608301819052610aa0830151829109613b808301819052610aa0830151829109613ba0830152806131208301516105c084015109818183613140860151610600870151090890508181836131608601516106808701510908613bc084018190526135c08401518392509009613be0830152806001613be0840151830309613c00830152806131208301516105e084015109818183613140860151610620870151090890508181836131608601516106608701510908613c2084018190526135c08401518392509009613c408301819052610a408301518291820309613c6083015280610a40830151600109613c8083015280613c60830151613c0084015108613ca0830152806001613ca084015109613cc0830152806001613c8084015109613ce0830152806135e0830151600109613d00830152806131e083015161064084015109613d208301819052613840830151829109613d40830152806001613d40840151830309613d60830152806001613d0084015109613d80830152806131e0830151610a0084015109613da08301819052613840830151829109613dc08301819052610a408301518291820309613de083015280610a40830151613d0084015109613e0083015280613de0830151613d6084015108613e20830152806131e08301516106a084015109613e408301819052613840830151829109613e6083018190526138c08301518291820309613e80830152806138c0830151613d0084015109613ea083015280613e80830151613e2084015108613ec0830152806131e08301516106c084015109613ee08301819052613840830151829109613f0083018190526138e08301518291820309613f20830152806138e0830151613d0084015109613f4083015280613f20830151613ec084015108613f60830152806131e08301516106e084015109613f808301819052613840830151829109613fa083018190526139008301518291820309613fc083015280613900830151613d0084015109613fe083015280613fc0830151613f6084015108614000830152806131e08301516107008401510961402083018190526138408301518291096140408301819052613920830151829182030961406083015280613920830151613d008401510961408083015280614060830151614000840151086140a0830152806131e0830151610720840151096140c083018190526138408301518291096140e08301819052613940830151829182030961410083015280613940830151613d0084015109614120830152806141008301516140a084015108614140830152806131e0830151610740840151096141608301819052613840830151829109614180830181905261396083015182918203096141a083015280613960830151613d00840151096141c0830152806141a0830151614140840151086141e0830152806131e08301516107608401510961420083018190526138408301518291096142208301819052613980830151829182030961424083015280613980830151613d0084015109614260830152806142408301516141e084015108614280830152806131e0830151610780840151096142a083018190526138408301518291096142c083018190526139a083015182918203096142e0830152806139a0830151613d0084015109614300830152806142e083015161428084015108614320830152806131e08301516107a084015109614340830181905261384083015182910961436083018190526139c08301518291820309614380830152806139c0830151613d00840151096143a083015280614380830151614320840151086143c0830152806131e08301516107c0840151096143e0830181905261384083015182910961440083018190526139e08301518291820309614420830152806139e0830151613d0084015109614440830152806144208301516143c084015108614460830152806131e08301516107e08401510961448083018190526138408301518291096144a08301819052613a0083015182918203096144c083015280613a00830151613d00840151096144e0830152806144c083015161446084015108614500830152806131e08301516108208401510961452083018190526138408301518291096145408301819052613a20830151829182030961456083015280613a20830151613d008401510961458083015280614560830151614500840151086145a0830152806131e0830151610840840151096145c083018190526138408301518291096145e08301819052613a40830151829182030961460083015280613a40830151613d0084015109614620830152806146008301516145a084015108614640830152806131e08301516108608401510961466083018190526138408301518291096146808301819052613a6083015182918203096146a083015280613a60830151613d00840151096146c0830152806146a0830151614640840151086146e0830152806131e08301516108808401510961470083018190526138408301518291096147208301819052613a80830151829182030961474083015280613a80830151613d0084015109614760830152806147408301516146e084015108614780830152806131e08301516108a0840151096147a083018190526138408301518291096147c08301819052613aa083015182918203096147e083015280613aa0830151613d0084015109614800830152806147e083015161478084015108614820830152806131e08301516108c08401510961484083018190526138408301518291096148608301819052613ac0830151829182030961488083015280613ac0830151613d00840151096148a083015280614880830151614820840151086148c0830152806135e0830151612f60840151096148e0830152806135e0830151612f8084015109614900830152806135e0830151612fa084015109614920830152806135e0830151612fc084015109614940830152806131e0830151612fe08401510961496083018190526138408301518291096149808301819052613ae083015182918203096149a083015280613ae0830151613d00840151096149c083015280613ae08301516148e0840151096149e083015280613ae083015161490084015109614a0083015280613ae083015161492084015109614a2083015280613ae083015161494084015109614a40830152806149a08301516148c084015108614a60830152806131e083015161080084015109614a808301819052613840830151829109614aa08301819052613b008301518291820309614ac083015280613b00830151613d0084015109614ae083015280614ac0830151614a6084015108614b008301819052610aa0830151829109614b2083015280610aa0830151613d8084015109614b4083015280610aa0830151613e0084015109614b6083015280610aa0830151613ea084015109614b8083015280610aa0830151613f4084015109614ba083015280610aa0830151613fe084015109614bc083015280610aa083015161408084015109614be083015280610aa083015161412084015109614c0083015280610aa08301516141c084015109614c2083015280610aa083015161426084015109614c4083015280610aa083015161430084015109614c6083015280610aa08301516143a084015109614c8083015280610aa083015161444084015109614ca083015280610aa08301516144e084015109614cc083015280610aa083015161458084015109614ce083015280610aa083015161462084015109614d0083015280610aa08301516146c084015109614d2083015280610aa083015161476084015109614d4083015280610aa083015161480084015109614d6083015280610aa08301516148a084015109614d8083015280610aa08301516149c084015109614da083015280610aa08301516149e084015109614dc083015280610aa0830151614a0084015109614de083015280610aa0830151614a2084015109614e0083015280610aa0830151614a4084015109614e2083015280610aa0830151614ae084015109614e4083015280614b20830151613cc084015108614e6083015280613620830151600109614e80830152806132008301516108e084015109818183613220860151610900870151090890508181836132408601516109208701510908614ea084018190526138608401518392509009614ec0830152806001614ec0840151830309614ee0830152806001614e8084015109614f0083015280613b40830151614ee084015109614f2083015280613b40830151614f0084015109614f4083015280614f20830151614e6084015108614f6083015280613660830151600109614f8083015280613280830151610940840151098181836132a08601516109608701510908614fa084018190526138808401518392509009614fc0830152806001614fc0840151830309614fe0830152806001614f808401510961500083015280613280830151610980840151098181836132a08601516109a08701510908615020840181905261388084015183925090096150408301819052610a40830151829182030961506083015280610a40830151614f808401510961508083015280615060830151614fe0840151086150a08301819052613b608301518291096150c083015280613b60830151615000840151096150e083015280613b6083015161508084015109615100830152806150c0830151614f6084015108615120830152806136a0830151600109615140830152806132c08301516109c0840151098181836132e08601516109e0870151090861516084018190526138a084015183925090096151808301528060016151808401518303096151a0830152806001615140840151096151c083015280613b808301516151a0840151096151e083015280613b808301516151c084015109615200830152806151e083015161512084015108615220830152806131c083015160010961524083015280610b408301516001096152608301526001615280830181815260026152a08501526152208401516152c085015284919060409060608160075afa141692506152808201516152e08301526152a08201516153008301526060820151615320830152608082015161534083015282600160406152e0850160806152e0870160065afa1416925060a082015161536083015260c0820151615380830152613ce08201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa1416925060e0820151615440830152610100820151615460830152614b40820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692506101c08201516155208301526101e0820151615540830152614b60820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f291e4db43c260726b91c535917a801bde06be7f7cf45010909762313db4252906156008301527f154e7fe15847ac4d1cd93fa6c8209672cfccf45ad8e13ab82fc6b167ba1994fc615620830152614b80820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f176b10d402fac05bfc982234f50b305ad067e122f1682a4b9c4bd98bda91919d6156e08301527f1d62e78d655e3fc74188666738fca6524a712f1a3c4ccfdd0fa44f3e2c849c51615700830152614ba082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f019dd7ee531990d335aad8f64c26a1bc072b47a7efd4504404d2e95e202507596157c08301527f0c413dd8e50189a05a374679bae72f724f7b71e956c32c0881ea37694276ea836157e0830152614bc082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f0730799d5bfec1cefc5aaffcffe3f3dd491b2bfcaf9f553f94de6145ed4742af6158a08301527f24ad4af082e96b14b9a6da80f4fa1334f253c458add531c8d9f8b23c5ecb9c436158c0830152614be08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa46159808301527f0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c06159a0830152614c008201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f0b30fe9581a6c70064e3b35446b2433842db76e8fad547fbb1ee69916473f7ed615a608301527f286e0f87d619e3fedac8a3d7442ef34fb6566ce9af5a315758c0c2b8000c36cf615a80830152614c20820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f14e66a771ef08cca0551c26b3439d49d391ba21d91b706df2c4b1f177d7759e5615b408301527f0532723a26dc928f43033efaef8e4aa2732772ba414b1dadce1fe7d0b30d99d2615b60830152614c40820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f0474ae1c4230bdcdd25ce460ef73c689e4227edf0ec7c2be85ef8d75592e1b36615c208301527f2fd83e6e07cc35755a04337fd70af8aa31fc74de07a539b8a8756caa60d04890615c40830152614c60820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f1c6f93aef795f525c8b51bcb0234bb345942cc31782bf75096fff2707f3e4b9f615d008301527f1bf84b761871a3311b096d870534b0a4b095330cd45fbe7bbbf5b353a980c39d615d20830152614c80820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f07609ba791f0ed5d569091041c800974b8440bc5c0f97d9b6295a1632175116c615de08301527f1cdb0412f38e1a19531afbd1c9603146e7bd1c34a93df6be4c65b126e3537b68615e00830152614ca0820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f0e955b89eca5fc34d2172022f89dc467ac2e84c9929e1ce0c2a8ce831c5dd701615ec08301527f07cf929adce614b088c82cb3934f1eb7546dd2e48396e914b4ff06ec45de9e8a615ee0830152614cc0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f2d4531a47528e642f8f6954a3f3ff9f6072e38d30e2e0d108d1cac201d4b684d615fa08301527f154c409bbd1760ec55639d32d5817c9399e573b22a8fdda5f707c9b9de1d4ca6615fc0830152614ce0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f2402db4b1c7746dcd9fe7eab82ab3fa7ebb1bd352a9af94ef6811b2af9ab6f8e6160808301527f2a0047ec08a254753c466648f0dc6e077e88e5495829c3a845873b9058bf44076160a0830152614d008201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa141692507f0476c7f154f703672add74ffebc6ffa6159b4e527f0a4354b601facd57ff1a1a6161608301527f27c10290f730edad9bcb2538056f755efea924b0a69d86d5c9c833717e730e28616180830152614d208201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692507f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c4529746162408301527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3616260830152614d40820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692507f1e87eb88577795c9f28c423b4d2c3ec1e890164466ea9742d9996ae5c3b80a2a6163208301527eb004814b24c7c7a9dc56ffa03d4f2b7e0f5605f3bb18deddf9e63978abbc56616340830152614d60820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa141692507f2903a763c1c6b78667f906b6fe2b4ad197b55587c90e14e8502446da8c45ef7d6164008301527f13ea57986f9295e92def3303aef53f2b4f625ba985531201ab53dc7307f46b69616420830152614d80820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506104208201516164e0830152610440820151616500830152614da082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506104608201516165c08301526104808201516165e0830152614dc082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa141692506104a08201516166a08301526104c08201516166c0830152614de08201516166e083015282600160406166a0850160606166a0870160075afa141692506166208201516167008301526166408201516167208301526166a08201516167408301526166c0820151616760830152826001604061670085016080616700870160065afa141692506104e08201516167808301526105008201516167a0830152614e008201516167c0830152826001604061678085016060616780870160075afa141692506167008201516167e08301526167208201516168008301526167808201516168208301526167a082015161684083015282600160406167e0850160806167e0870160065afa14169250610520820151616860830152610540820151616880830152614e208201516168a0830152826001604061686085016060616860870160075afa141692506167e08201516168c08301526168008201516168e083015261686082015161690083015261688082015161692083015282600160406168c0850160806168c0870160065afa141692506103808201516169408301526103a0820151616960830152614e40820151616980830152826001604061694085016060616940870160075afa141692506168c08201516169a08301526168e08201516169c08301526169408201516169e0830152616960820151616a0083015282600160406169a0850160806169a0870160065afa141692506102c0820151616a208301526102e0820151616a40830152614f40820151616a608301528260016040616a2085016060616a20870160075afa141692506169a0820151616a808301526169c0820151616aa0830152616a20820151616ac0830152616a40820151616ae08301528260016040616a8085016080616a80870160065afa14169250610300820151616b00830152610320820151616b208301526150e0820151616b408301528260016040616b0085016060616b00870160075afa14169250616a80820151616b60830152616aa0820151616b80830152616b00820151616ba0830152616b20820151616bc08301528260016040616b6085016080616b60870160065afa14169250610340820151616be0830152610360820151616c00830152615100820151616c208301528260016040616be085016060616be0870160075afa14169250616b60820151616c40830152616b80820151616c60830152616be0820151616c80830152616c00820151616ca08301528260016040616c4085016080616c40870160065afa14169250610180820151616cc08301526101a0820151616ce0830152615200820151616d008301528260016040616cc085016060616cc0870160075afa14169250616c40820151616d20830152616c60820151616d40830152616cc0820151616d60830152616ce0820151616d808301528260016040616d2085016080616d20870160065afa14169250610ae0820151616da0830152610b00820151616dc08301526152408201518103616de0830152508160016040616da084016060616da0860160075afa14169150616d20810151616e00820152616d40810151616e20820152616da0810151616e40820152616dc0810151616e608201528160016040616e0084016080616e00860160065afa14169150610b80810151616e80820152610ba0810151616ea0820152615260810151616ec08201528160016040616e8084016060616e80860160075afa14169150616e00810151616ee0820152616e20810151616f00820152616e80810151616f20820152616ea0810151616f408201528160016040616ee084016080616ee0860160065afa14169150616ee0810151616f60820152616f00810151616f808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2616fa08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616fc08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616fe08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa617000820152610b80810151617020820152610ba08101516170408201527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6170608201527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6170808201527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c1456170a08201527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff6170c08201528160016020616f608401610180616f60860160085afa616f6093909301516001149214161691505092915050565b604051806170c00160405280610386906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156152b1576152b1615272565b604052919050565b600082601f8301126152ca57600080fd5b813567ffffffffffffffff8111156152e4576152e4615272565b6152f7601f8201601f1916602001615288565b81815284602083860101111561530c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561533c57600080fd5b823567ffffffffffffffff8082111561535457600080fd5b818501915085601f83011261536857600080fd5b813560208282111561537c5761537c615272565b8160051b61538b828201615288565b928352848101820192828101908a8511156153a557600080fd5b958301955b848710156153c3578635825295830195908301906153aa565b97505050860135925050808211156153da57600080fd5b506153e7858286016152b9565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212208f0f08c113d71e9affd04a930a0ccffff41cc79e358932cfa7ac1395c242440564736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004615329565b610057565b604051901515815260200160405180910390f35b60006001610063615252565b6000805160206154128339815191526100d9565b6000805160206153f283398151915280831081831016908380096000805160206153f28339815191528384096000805160206153f283398151915284820990506000805160206153f28339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301527f2df16218a82d39831071e46956c233ee9aa79bb065b265871080d8643f2f52ab600083015260208501518060608401526040860151806080850152846101388284610077565b169450505060608501518060a084015260808601518060c08501528461015e8284610077565b169450505060a08501518060e084015260c086015180610100850152846101858284610077565b16945050506101206000830120610120830152610120820151818106610140840152806101608401525060e085015180610180840152610100860151806101a0850152846101d38284610077565b1694505050610120850151806101c0840152610140860151806101e0850152846101fd8284610077565b60a061016087012061020087018190528581066102208801526102408701521694506001915050610260830153602161024083012061026083018190528181066102808401526102a08301526101608501516102c083018190526101808601516102e08401819052846102708284610077565b16945050506101a0850151806103008401526101c0860151806103208501528461029a8284610077565b16945050506101e08501518061034084015261020086015180610360850152846102c48284610077565b169450505061022085015180610380840152610240860151806103a0850152846102ee8284610077565b16945050506101206102a08301206103c08301526103c08201518181066103e0840152806104008401525061026085015180610420840152610280860151806104408501528461033e8284610077565b16945050506102a0850151806104608401526102c086015180610480850152846103688284610077565b16945050506102e0850151806104a0840152610300860151806104c0850152846103928284610077565b1694505050610320850151806104e084015261034086015180610500850152846103bc8284610077565b16945050506103608501518061052084015261038086015180610540850152846103e68284610077565b1694505050610160610400830120610560830152610560820151818106610580840152806105a084015250806103a0860151066105c0830152806103c0860151066105e0830152806103e086015106610600830152806104008601510661062083015280610420860151066106408301528061044086015106610660830152806104608601510661068083015280610480860151066106a0830152806104a0860151066106c0830152806104c0860151066106e0830152806104e086015106610700830152806105008601510661072083015280610520860151066107408301528061054086015106610760830152806105608601510661078083015280610580860151066107a0830152806105a0860151066107c0830152806105c0860151066107e0830152806105e086015106610800830152806106008601510661082083015280610620860151066108408301528061064086015106610860830152806106608601510661088083015280610680860151066108a0830152806106a0860151066108c0830152806106c0860151066108e0830152806106e086015106610900830152806107008601510661092083015280610720860151066109408301528061074086015106610960830152806107608601510661098083015280610780860151066109a0830152806107a0860151066109c0830152806107c0860151066109e0830152806107e086015106610a008301526104806105a0830120610a20830152610a20820151818106610a4084015280610a60840152506001610a808301536021610a60830120610a808301819052818106610aa0840152610ac0830152610800850151610ae08301819052610820860151610b0084018190528461066f8284610077565b16945050506060610ac0830120610b20830152610b20820151818106610b4084015280610b608401525061084085015180610b8084015261086086015180610ba0850152846106be8284610077565b16945050508061058083015161058084015109610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830181905281908009610ce0830181905281908009610d00830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610d0084015108610d20830152807f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610d2084015109610d40830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d4084015109610d60830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff61058084015108610d80830152807f2498c2d3affa1baaf6419dbccb6a054bb87359c02eade5aeacd86c84757b9051610d4084015109610da0830152807f0bcb8b9f3137847ec20ea7f9b61753116fc08e884b0b8ae29709890f7a846fb061058084015108610dc0830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d4084015109610de0830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc61058084015108610e00830152807f28771071ab1633014eae27cfc16d5ebe08a8fe2fc9e85044e4a45f82c14cd825610d4084015109610e20830152807f07ed3e01361b6d2869a21de6c013f99f1f8aea18afd1204c5f3d96112eb327dc61058084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d4084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e61058084015108610e80830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610d4084015109610ea0830152807f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e761058084015108610ec0830152806001610d4084015109610ee0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058084015108610f00830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610d4084015109610f20830152807f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa261058084015108610f40830152610d808201518181610dc085015109905080610f608401528181610e0085015109905080610f808401528181610e4085015109905080610fa08401528181610e8085015109905080610fc08401528181610ec085015109905080610fe08401528181610f00850151099050806110008401528181610f40850151099050806110208401528181610d208501510990508061104084015250602061108083015260206110a083015260206110c08301526110408201516110e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6111008301526000805160206154128339815191526111208301528260016020611060850160c0611080870160055afa141692506110608201516000610d208401519050828261102086015109610d20850152828282099150610f408401519050828261100086015109610f40850152828282099150610f0084015190508282610fe086015109610f00850152828282099150610ec084015190508282610fc086015109610ec0850152828282099150610e8084015190508282610fa086015109610e80850152828282099150610e4084015190508282610f8086015109610e40850152828282099150610e0084015190508282610f6086015109610e00850152828282099150610dc084015190508282610d8086015109610dc085015282828209610d808501819052610d608501518493509091500961114083015280610dc0830151610da08401510961116083015280610e00830151610de08401510961118083015280610e40830151610e20840151096111a083015280610e80830151610e60840151096111c083015280610ec0830151610ea0840151096111e083015280610f00830151610ee08401510961120083015280610f40830151610f20840151096112208301528060208301516112008401510981818360408601516112208701510908611240840152506106e08201516105c0830151829190086112608301819052819080096112808301819052819080096112a0830152806112a0830151611260840151096112c0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad56112c0840151096112e0830152806107008301516105e0840151086113008301819052819080096113208301819052819080096113408301528061134083015161130084015109611360830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e861136084015109611380830152806113808301516112e0840151086113a08301528061060083015182036113a0840151086113c083018190526107808301518291096113e0830152806113e08301516103e084015109611400830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff96112c084015109611420830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113608401510961144083015280611440830151611420840151086114608301528061062083015182036114608401510861148083018190526107808301518291096114a0830152806114a0830151611400840151086114c0830152806114c08301516103e0840151096114e08301528061064083015182036112c08401510861150083018190526107a0830151829109611520830152806115208301516114e084015108611540830152806115408301516103e084015109611560830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561064084015109611580830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611300840151096115a0830152806115a0830151611580840151086115c083018190526106a08301518291086115e0830181905281908009611600830181905281908009611620830152806116208301516115e084015109611640830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e6661060084015109611660830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6106208401510961168083015280611680830151611660840151086116a0830152806116a08301518203611640840151086116c083018190526107a08301518291096116e0830152806116e083015161156084015108611700830152806117008301516103e084015109611720830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961064084015109611740830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c861130084015109611760830152806117608301516117408401510861178083018190526106c08301518291086117a0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610600840151096117c0830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be610620840151096117e0830152806117e08301516117c0840151086118008301528061180083015182036117a08401510861182083018190526107a08301518291096118408301528061184083015161172084015108611860830152806118608301516103e0840151096118808301528061076083015182036001086118a083018190526107608301518291096118c08301528061076083015182036002086118e083018190526118c08301518291096119008301528061076083015182036004086119208301819052611900830151829109611940830152806105c0830151610680840151086119608301528061060083015182036119608401510861198083018190526119408301518291096119a0830152806119a0830151611880840151086119c0830152806119c08301516103e0840151096119e083015280610620830151820361066084015108611a008301819052611940830151829109611a2083015280611a208301516119e084015108611a4083015280611a408301516103e084015109611a60830152806107c08301516113c084015109611a8083015280611a80830151611a6084015108611aa083015280611aa08301516103e084015109611ac0830152806107c083015161148084015109611ae083015280611ae0830151611ac084015108611b0083015280611b008301516103e084015109611b20830152806107e083015161150084015109611b4083015280611b40830151611b2084015108611b6083015280611b608301516103e084015109611b80830152806107e08301516116c084015109611ba083015280611ba0830151611b8084015108611bc083015280611bc08301516103e084015109611be0830152806107e083015161182084015109611c0083015280611c00830151611be084015108611c2083015280611c208301516103e084015109611c40830152806107608301518203600308611c608301819052611900830151829109611c8083015280611c8083015161198084015109611ca083015280611ca0830151611c4084015108611cc083015280611cc08301516103e084015109611ce083015280611c80830151611a0084015109611d0083015280611d00830151611ce084015108611d2083015280611d208301516103e084015109611d40830152806107608301516118e084015109611d6083015280611d60830151611c6084015109611d8083015280611d8083015161192084015109611da083015280611da083015161064084015109611dc0830152806106408301518203600108611de08301819052611dc0830151829109611e0083015280611e00830151611d4084015108611e2083015280611e208301516103e084015109611e4083015280610640830151600209611e60830152806105c083015182036105e084015108611e808301819052611e60830151829109611ea0830152806105c0830151820361060084015108611ec083015280611ec08301518203611ea084015108611ee08301528061062083015182036105e084015108611f0083015280611f008301518203611ee084015108611f208301819052611da0830151829109611f4083015280611f40830151611e4084015108611f6083015280611f608301516103e084015109611f80830152806118c0830151611c6084015109611fa083015280611fa083015161192084015109611fc0830152806105e08301516105c084015108611fe0830152806106408301518203611fe0840151086120008301819052611fc083015182910961202083015280612020830151611f8084015108612040830152806120408301516103e0840151096120608301819052612020830151829108612080830152806120808301516103e0840151096120a0830152806108e083015182036001086120c083018190526112008301518291096120e0830152806120e08301516120a084015108612100830152806121008301516103e0840151096121208301526109408201518190800961214083015280610940830151820361214084015108612160830181905261114083015182910961218083015280612180830151612120840151086121a0830152806121a08301516103e0840151096121c0830152806109208301518203610940840151086121e08301819052611200830151829109612200830152806122008301516121c084015108612220830152806122208301516103e084015109612240830152806111408301518203600108612260830152806111808301516111608401510861228083018190526111a08301518291086122a083018190526111c08301518291086122c083018190526111e08301518291086122e0830152806122e08301518203612260840151086123008301528061022083015161082084015109612320830152806123208301516106a08401510861234083018190526102808301518291086123608301528061022083015161084084015109612380830152806123808301516105c0840151086123a083018190526102808301518291086123c083018190526123608301518291096123e08301528061022083015161086084015109612400830152806124008301516105e084015108612420830181905261028083015182910861244083018190526123e08301518291096124608301528061022083015161088084015109612480830152806124808301516106c0840151086124a083018190526102808301518291086124c083018190526124608301518291096124e08301819052610900830151829109612500830152806102208301516001096125208301528061252083015161058084015109612540830152806125408301516106a0840151086125608301819052610280830151829108612580830152806102208301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096125a0830152806125a0830151610580840151096125c0830152806125c08301516105c0840151086125e083018190526102808301518291086126008301819052612580830151829109612620830152806102208301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096126408301528061264083015161058084015109612660830152806126608301516105e08401510861268083018190526102808301518291086126a083018190526126208301518291096126c0830152806102208301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e52096126e0830152806126e083015161058084015109612700830152806127008301516106c084015108612720830181905261028083015182910861274083018190526126c083015182910961276083018190526108e0830151829109612780830152806127808301518203612500840151086127a083018190526123008301518291096127c0830152806127c0830151612240840151086127e0830152806127e08301516103e084015109612800830152806102208301516108a08401510961282083015280612820830151610640840151086128408301819052610280830151829108612860830152806102208301516108c08401510961288083015280612880830151611240840151086128a083018190526102808301518291086128c083018190526128608301518291096128e08301819052610960830151829109612900830152806102208301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612920830152806129208301516105808401510961294083015280612940830151610640840151086129608301819052610280830151829108612980830152806102208301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d096129a0830152806129a0830151610580840151096129c0830152806129c0830151611240840151086129e08301819052610280830151829108612a008301819052612980830151829109612a208301819052610940830151829109612a4083015280612a40830151820361290084015108612a608301819052612300830151829109612a8083015280612a8083015161280084015108612aa083015280612aa08301516103e084015109612ac0830152806109808301518203600108612ae08301819052611200830151829109612b0083015280612b00830151612ac084015108612b2083015280612b208301516103e084015109612b4083015261098082015181908009612b60830152806109808301518203612b6084015108612b808301819052611140830151829109612ba083015280612ba0830151612b4084015108612bc083015280612bc08301516103e084015109612be0830152806102208301516109c084015108612c0083018190526109a0830151829109612c2083015280610280830151610a0084015108612c408301819052612c20830151829109612c608301528061060083015161010009612c8083015280612c8083015182036105c084015108612ca08301819052610740830151829109612cc08301819052610220830151829108612ce08301819052610980830151829109612d008301528061028083015161072084015108612d208301819052612d00830151829109612d4083015280612d408301518203612c6084015108612d608301819052612300830151829109612d8083015280612d80830151612be084015108612da083015280612da08301516103e084015109612dc083015280610a0083015182036109c084015108612de08301819052611200830151829109612e0083015280612e00830151612dc084015108612e2083015280612e208301516103e084015109612e4083015280612300830151612de084015109612e60830152806109e083015182036109c084015108612e808301819052612e60830151829109612ea083015280612ea0830151612e4084015108612ec0830152610d0082015181908009612ee08301819052610d00830151829109612f008301819052610d00830151829109612f208301819052610d00830151829109612f4083015280610d00830151600109612f6083015280612ee0830151600109612f8083015280612f00830151600109612fa083015280612f20830151600109612fc083015280610d20830151612ec084015109612fe083015280610580830151610bc08401510961300083015280600161058084015109613020830152806130208301518203610b4084015108613040830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f61058084015109613060830152806130608301518203610b4084015108613080830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610580840151096130a0830152806130a08301518203610b40840151086130c0830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610580840151096130e0830152806130e08301518203610b408401510861310083015280817f21054ce8b3cb9dc9b87af5c70c8f54994090ad8fa7e06caaf989ba5806b6798b610bc085015109610b4084015109818183847f0f5f018a2d66025fffd54fef74f203c3e7a33ab8d1d903e64a583b3be9498676610bc08801510961058087015109089050806131208401525080817f10ac009d2f31395e301635cd6d292978a4012197c24d6e63fb49943a70296136610bc085015109610b4084015109818183847f2696aa2788110c63ebbfd7f92b352ce93b28bbdae57b7cb94bc5885ee439e774610bc08801510961058087015109089050806131408401525080817f2510cae1618713ac17c9ef83f1a67645ed21f454d96bf1f072ca5b463e7f0c28610bc085015109610b4084015109818183847f0d6a07653c64f4112284cb8b23bf73adecaf4ee0fef51998549526f07b6defd7610bc088015109610580870151090861316084015250613040820151819060010961318083018190526130808301518291096131a083018190526131008301518291096131c0830152806001610b40840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058087015109089050806131e08401525080817f1d81b9bd5165d63a0d4a8370d37966eb243365d36ca235911564a783f8234cf2610bc085015109610b4084015109818183847f12e294b58fcbc9efab05c245ae07f172040082750d173b002e7d4e0ff7dcb30f610bc08801510961058087015109089050806132008401525080817f142f93c8919700eddb46a823a63f1726c05e6953fd8ba57ddf6ea70e7ebc8dcf610bc085015109610b4084015109818183847f2707d3cc5788c2cfc0ee9e5f5638da3b90cb6d8b97224a4521073ec9f10826fb610bc08801510961058087015109089050806132208401525080817f13d3d4db83b42c4d48afa6b5c9cbe3f49703d0caf1fdc301b0d4d3743ab60833610bc085015109610b4084015109818183847f223ed99d38075819043fa85ed3c54f3bfb5d62312139562ca82d9903b1b52e27610bc0880151096105808701510908613240840152506130c08201516131a08301518291900961326083015280817f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa361058085015109610b4084015109818183847f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e6105808801510961058087015109089050806132808401525080817f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e61058085015109610b4084015109818183847f1a514dd9f80de355133414990bffdc137169ffbf79f1b0988ce4dc4b27adb4e36105808801510961058087015109089050806132a08401525080817f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e861058085015109610b4084015109818183847f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d716196105808801510961058087015109089050806132c08401525080817f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161961058085015109610b4084015109818183847f20198517670312541561a1720d2538ac357df59dafa0d41bd7235a97f2f364376105808801510961058087015109086132e0840152506131008201516131808301518291900961330083015261312082015181816131408501510990508061332084015281816131608501510990508061334084015281816131e0850151099050806133608401528181613180850151099050806133808401528181613200850151099050806133a08401528181613220850151099050806133c08401528181613240850151099050806133e084015281816132608501510990508061340084015281816132808501510990508061342084015281816132a08501510990508061344084015281816131a08501510990508061346084015281816132c08501510990508061348084015281816132e0850151099050806134a08401528181613300850151099050806134c0840152506020613500830152602061352083015260206135408301526134c08201516135608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6135808301526000805160206154128339815191526135a083015282600160206134e0850160c0613500870160055afa141692506134e08201516000613300840151905082826134a0860151096133008501528282820991506132e084015190508282613480860151096132e08501528282820991506132c084015190508282613460860151096132c08501528282820991506131a084015190508282613440860151096131a08501528282820991506132a084015190508282613420860151096132a08501528282820991506132808401519050828261340086015109613280850152828282099150613260840151905082826133e086015109613260850152828282099150613240840151905082826133c086015109613240850152828282099150613220840151905082826133a086015109613220850152828282099150613200840151905082826133808601510961320085015282828209915061318084015190508282613360860151096131808501528282820991506131e084015190508282613340860151096131e08501528282820991506131608401519050828261332086015109613160850152828282099150613140840151905082826131208601510961314085015282828209613120850181905261314085015190925083915082900890508181613160850151086135c0840152506131808201516131c0830151829190096135e08301526131e08201518061360084015250806132608301516131c0840151096136208301526132008201518181613220850151089050818161324085015108613640840152506131a08201516131c08301518291900961366083015261328082015181816132a085015108613680840152506133008201516131c0830151829190096136a08301526132c082015181816132e0850151086136c0840152506135c082015161360083015182908290099050806136e084015281816136408501510990508061370084015281816136808501510990508061372084015281816136c08501510990508061374084015250602061378083015260206137a083015260206137c08301526137408201516137e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6138008301526000805160206154128339815191526138208301528260016020613760850160c0613780870160055afa1416925061376082015160006136c084015190508282613720860151096136c08501528282820991506136808401519050828261370086015109613680850152828282099150613640840151905082826136e086015109613640850152828282099150613600840151905082826135c086015109613600850152828282096135c085015250506136008201516135e08301518291900961384083015280613640830151613620840151096138608301528061368083015161366084015109613880830152806136c08301516136a0840151096138a0830152610a40820151819080096138c08301819052610a408301518291096138e08301819052610a408301518291096139008301819052610a408301518291096139208301819052610a408301518291096139408301819052610a408301518291096139608301819052610a408301518291096139808301819052610a408301518291096139a08301819052610a408301518291096139c08301819052610a408301518291096139e08301819052610a40830151829109613a008301819052610a40830151829109613a208301819052610a40830151829109613a408301819052610a40830151829109613a608301819052610a40830151829109613a808301819052610a40830151829109613aa08301819052610a40830151829109613ac08301819052610a40830151829109613ae08301819052610a40830151829109613b008301819052610a40830151829109613b20830152610aa082015181908009613b408301819052610aa0830151829109613b608301819052610aa0830151829109613b808301819052610aa0830151829109613ba0830152806131208301516105c084015109818183613140860151610600870151090890508181836131608601516106808701510908613bc084018190526135c08401518392509009613be0830152806001613be0840151830309613c00830152806131208301516105e084015109818183613140860151610620870151090890508181836131608601516106608701510908613c2084018190526135c08401518392509009613c408301819052610a408301518291820309613c6083015280610a40830151600109613c8083015280613c60830151613c0084015108613ca0830152806001613ca084015109613cc0830152806001613c8084015109613ce0830152806135e0830151600109613d00830152806131e083015161064084015109613d208301819052613840830151829109613d40830152806001613d40840151830309613d60830152806001613d0084015109613d80830152806131e0830151610a0084015109613da08301819052613840830151829109613dc08301819052610a408301518291820309613de083015280610a40830151613d0084015109613e0083015280613de0830151613d6084015108613e20830152806131e08301516106a084015109613e408301819052613840830151829109613e6083018190526138c08301518291820309613e80830152806138c0830151613d0084015109613ea083015280613e80830151613e2084015108613ec0830152806131e08301516106c084015109613ee08301819052613840830151829109613f0083018190526138e08301518291820309613f20830152806138e0830151613d0084015109613f4083015280613f20830151613ec084015108613f60830152806131e08301516106e084015109613f808301819052613840830151829109613fa083018190526139008301518291820309613fc083015280613900830151613d0084015109613fe083015280613fc0830151613f6084015108614000830152806131e08301516107008401510961402083018190526138408301518291096140408301819052613920830151829182030961406083015280613920830151613d008401510961408083015280614060830151614000840151086140a0830152806131e0830151610720840151096140c083018190526138408301518291096140e08301819052613940830151829182030961410083015280613940830151613d0084015109614120830152806141008301516140a084015108614140830152806131e0830151610740840151096141608301819052613840830151829109614180830181905261396083015182918203096141a083015280613960830151613d00840151096141c0830152806141a0830151614140840151086141e0830152806131e08301516107608401510961420083018190526138408301518291096142208301819052613980830151829182030961424083015280613980830151613d0084015109614260830152806142408301516141e084015108614280830152806131e0830151610780840151096142a083018190526138408301518291096142c083018190526139a083015182918203096142e0830152806139a0830151613d0084015109614300830152806142e083015161428084015108614320830152806131e08301516107a084015109614340830181905261384083015182910961436083018190526139c08301518291820309614380830152806139c0830151613d00840151096143a083015280614380830151614320840151086143c0830152806131e08301516107c0840151096143e0830181905261384083015182910961440083018190526139e08301518291820309614420830152806139e0830151613d0084015109614440830152806144208301516143c084015108614460830152806131e08301516107e08401510961448083018190526138408301518291096144a08301819052613a0083015182918203096144c083015280613a00830151613d00840151096144e0830152806144c083015161446084015108614500830152806131e08301516108208401510961452083018190526138408301518291096145408301819052613a20830151829182030961456083015280613a20830151613d008401510961458083015280614560830151614500840151086145a0830152806131e0830151610840840151096145c083018190526138408301518291096145e08301819052613a40830151829182030961460083015280613a40830151613d0084015109614620830152806146008301516145a084015108614640830152806131e08301516108608401510961466083018190526138408301518291096146808301819052613a6083015182918203096146a083015280613a60830151613d00840151096146c0830152806146a0830151614640840151086146e0830152806131e08301516108808401510961470083018190526138408301518291096147208301819052613a80830151829182030961474083015280613a80830151613d0084015109614760830152806147408301516146e084015108614780830152806131e08301516108a0840151096147a083018190526138408301518291096147c08301819052613aa083015182918203096147e083015280613aa0830151613d0084015109614800830152806147e083015161478084015108614820830152806131e08301516108c08401510961484083018190526138408301518291096148608301819052613ac0830151829182030961488083015280613ac0830151613d00840151096148a083015280614880830151614820840151086148c0830152806135e0830151612f60840151096148e0830152806135e0830151612f8084015109614900830152806135e0830151612fa084015109614920830152806135e0830151612fc084015109614940830152806131e0830151612fe08401510961496083018190526138408301518291096149808301819052613ae083015182918203096149a083015280613ae0830151613d00840151096149c083015280613ae08301516148e0840151096149e083015280613ae083015161490084015109614a0083015280613ae083015161492084015109614a2083015280613ae083015161494084015109614a40830152806149a08301516148c084015108614a60830152806131e083015161080084015109614a808301819052613840830151829109614aa08301819052613b008301518291820309614ac083015280613b00830151613d0084015109614ae083015280614ac0830151614a6084015108614b008301819052610aa0830151829109614b2083015280610aa0830151613d8084015109614b4083015280610aa0830151613e0084015109614b6083015280610aa0830151613ea084015109614b8083015280610aa0830151613f4084015109614ba083015280610aa0830151613fe084015109614bc083015280610aa083015161408084015109614be083015280610aa083015161412084015109614c0083015280610aa08301516141c084015109614c2083015280610aa083015161426084015109614c4083015280610aa083015161430084015109614c6083015280610aa08301516143a084015109614c8083015280610aa083015161444084015109614ca083015280610aa08301516144e084015109614cc083015280610aa083015161458084015109614ce083015280610aa083015161462084015109614d0083015280610aa08301516146c084015109614d2083015280610aa083015161476084015109614d4083015280610aa083015161480084015109614d6083015280610aa08301516148a084015109614d8083015280610aa08301516149c084015109614da083015280610aa08301516149e084015109614dc083015280610aa0830151614a0084015109614de083015280610aa0830151614a2084015109614e0083015280610aa0830151614a4084015109614e2083015280610aa0830151614ae084015109614e4083015280614b20830151613cc084015108614e6083015280613620830151600109614e80830152806132008301516108e084015109818183613220860151610900870151090890508181836132408601516109208701510908614ea084018190526138608401518392509009614ec0830152806001614ec0840151830309614ee0830152806001614e8084015109614f0083015280613b40830151614ee084015109614f2083015280613b40830151614f0084015109614f4083015280614f20830151614e6084015108614f6083015280613660830151600109614f8083015280613280830151610940840151098181836132a08601516109608701510908614fa084018190526138808401518392509009614fc0830152806001614fc0840151830309614fe0830152806001614f808401510961500083015280613280830151610980840151098181836132a08601516109a08701510908615020840181905261388084015183925090096150408301819052610a40830151829182030961506083015280610a40830151614f808401510961508083015280615060830151614fe0840151086150a08301819052613b608301518291096150c083015280613b60830151615000840151096150e083015280613b6083015161508084015109615100830152806150c0830151614f6084015108615120830152806136a0830151600109615140830152806132c08301516109c0840151098181836132e08601516109e0870151090861516084018190526138a084015183925090096151808301528060016151808401518303096151a0830152806001615140840151096151c083015280613b808301516151a0840151096151e083015280613b808301516151c084015109615200830152806151e083015161512084015108615220830152806131c083015160010961524083015280610b408301516001096152608301526001615280830181815260026152a08501526152208401516152c085015284919060409060608160075afa141692506152808201516152e08301526152a08201516153008301526060820151615320830152608082015161534083015282600160406152e0850160806152e0870160065afa1416925060a082015161536083015260c0820151615380830152613ce08201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa1416925060e0820151615440830152610100820151615460830152614b40820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692506101c08201516155208301526101e0820151615540830152614b60820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f291e4db43c260726b91c535917a801bde06be7f7cf45010909762313db4252906156008301527f154e7fe15847ac4d1cd93fa6c8209672cfccf45ad8e13ab82fc6b167ba1994fc615620830152614b80820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f176b10d402fac05bfc982234f50b305ad067e122f1682a4b9c4bd98bda91919d6156e08301527f1d62e78d655e3fc74188666738fca6524a712f1a3c4ccfdd0fa44f3e2c849c51615700830152614ba082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f019dd7ee531990d335aad8f64c26a1bc072b47a7efd4504404d2e95e202507596157c08301527f0c413dd8e50189a05a374679bae72f724f7b71e956c32c0881ea37694276ea836157e0830152614bc082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f0730799d5bfec1cefc5aaffcffe3f3dd491b2bfcaf9f553f94de6145ed4742af6158a08301527f24ad4af082e96b14b9a6da80f4fa1334f253c458add531c8d9f8b23c5ecb9c436158c0830152614be08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa46159808301527f0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c06159a0830152614c008201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f0b30fe9581a6c70064e3b35446b2433842db76e8fad547fbb1ee69916473f7ed615a608301527f286e0f87d619e3fedac8a3d7442ef34fb6566ce9af5a315758c0c2b8000c36cf615a80830152614c20820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f14e66a771ef08cca0551c26b3439d49d391ba21d91b706df2c4b1f177d7759e5615b408301527f0532723a26dc928f43033efaef8e4aa2732772ba414b1dadce1fe7d0b30d99d2615b60830152614c40820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f0474ae1c4230bdcdd25ce460ef73c689e4227edf0ec7c2be85ef8d75592e1b36615c208301527f2fd83e6e07cc35755a04337fd70af8aa31fc74de07a539b8a8756caa60d04890615c40830152614c60820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f1c6f93aef795f525c8b51bcb0234bb345942cc31782bf75096fff2707f3e4b9f615d008301527f1bf84b761871a3311b096d870534b0a4b095330cd45fbe7bbbf5b353a980c39d615d20830152614c80820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f07609ba791f0ed5d569091041c800974b8440bc5c0f97d9b6295a1632175116c615de08301527f1cdb0412f38e1a19531afbd1c9603146e7bd1c34a93df6be4c65b126e3537b68615e00830152614ca0820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f0e955b89eca5fc34d2172022f89dc467ac2e84c9929e1ce0c2a8ce831c5dd701615ec08301527f07cf929adce614b088c82cb3934f1eb7546dd2e48396e914b4ff06ec45de9e8a615ee0830152614cc0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f2d4531a47528e642f8f6954a3f3ff9f6072e38d30e2e0d108d1cac201d4b684d615fa08301527f154c409bbd1760ec55639d32d5817c9399e573b22a8fdda5f707c9b9de1d4ca6615fc0830152614ce0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f2402db4b1c7746dcd9fe7eab82ab3fa7ebb1bd352a9af94ef6811b2af9ab6f8e6160808301527f2a0047ec08a254753c466648f0dc6e077e88e5495829c3a845873b9058bf44076160a0830152614d008201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa141692507f0476c7f154f703672add74ffebc6ffa6159b4e527f0a4354b601facd57ff1a1a6161608301527f27c10290f730edad9bcb2538056f755efea924b0a69d86d5c9c833717e730e28616180830152614d208201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692507f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c4529746162408301527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3616260830152614d40820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692507f1e87eb88577795c9f28c423b4d2c3ec1e890164466ea9742d9996ae5c3b80a2a6163208301527eb004814b24c7c7a9dc56ffa03d4f2b7e0f5605f3bb18deddf9e63978abbc56616340830152614d60820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa141692507f2903a763c1c6b78667f906b6fe2b4ad197b55587c90e14e8502446da8c45ef7d6164008301527f13ea57986f9295e92def3303aef53f2b4f625ba985531201ab53dc7307f46b69616420830152614d80820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506104208201516164e0830152610440820151616500830152614da082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506104608201516165c08301526104808201516165e0830152614dc082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa141692506104a08201516166a08301526104c08201516166c0830152614de08201516166e083015282600160406166a0850160606166a0870160075afa141692506166208201516167008301526166408201516167208301526166a08201516167408301526166c0820151616760830152826001604061670085016080616700870160065afa141692506104e08201516167808301526105008201516167a0830152614e008201516167c0830152826001604061678085016060616780870160075afa141692506167008201516167e08301526167208201516168008301526167808201516168208301526167a082015161684083015282600160406167e0850160806167e0870160065afa14169250610520820151616860830152610540820151616880830152614e208201516168a0830152826001604061686085016060616860870160075afa141692506167e08201516168c08301526168008201516168e083015261686082015161690083015261688082015161692083015282600160406168c0850160806168c0870160065afa141692506103808201516169408301526103a0820151616960830152614e40820151616980830152826001604061694085016060616940870160075afa141692506168c08201516169a08301526168e08201516169c08301526169408201516169e0830152616960820151616a0083015282600160406169a0850160806169a0870160065afa141692506102c0820151616a208301526102e0820151616a40830152614f40820151616a608301528260016040616a2085016060616a20870160075afa141692506169a0820151616a808301526169c0820151616aa0830152616a20820151616ac0830152616a40820151616ae08301528260016040616a8085016080616a80870160065afa14169250610300820151616b00830152610320820151616b208301526150e0820151616b408301528260016040616b0085016060616b00870160075afa14169250616a80820151616b60830152616aa0820151616b80830152616b00820151616ba0830152616b20820151616bc08301528260016040616b6085016080616b60870160065afa14169250610340820151616be0830152610360820151616c00830152615100820151616c208301528260016040616be085016060616be0870160075afa14169250616b60820151616c40830152616b80820151616c60830152616be0820151616c80830152616c00820151616ca08301528260016040616c4085016080616c40870160065afa14169250610180820151616cc08301526101a0820151616ce0830152615200820151616d008301528260016040616cc085016060616cc0870160075afa14169250616c40820151616d20830152616c60820151616d40830152616cc0820151616d60830152616ce0820151616d808301528260016040616d2085016080616d20870160065afa14169250610ae0820151616da0830152610b00820151616dc08301526152408201518103616de0830152508160016040616da084016060616da0860160075afa14169150616d20810151616e00820152616d40810151616e20820152616da0810151616e40820152616dc0810151616e608201528160016040616e0084016080616e00860160065afa14169150610b80810151616e80820152610ba0810151616ea0820152615260810151616ec08201528160016040616e8084016060616e80860160075afa14169150616e00810151616ee0820152616e20810151616f00820152616e80810151616f20820152616ea0810151616f408201528160016040616ee084016080616ee0860160065afa14169150616ee0810151616f60820152616f00810151616f808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2616fa08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616fc08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616fe08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa617000820152610b80810151617020820152610ba08101516170408201527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6170608201527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6170808201527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c1456170a08201527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff6170c08201528160016020616f608401610180616f60860160085afa616f6093909301516001149214161691505092915050565b604051806170c00160405280610386906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156152b1576152b1615272565b604052919050565b600082601f8301126152ca57600080fd5b813567ffffffffffffffff8111156152e4576152e4615272565b6152f7601f8201601f1916602001615288565b81815284602083860101111561530c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561533c57600080fd5b823567ffffffffffffffff8082111561535457600080fd5b818501915085601f83011261536857600080fd5b813560208282111561537c5761537c615272565b8160051b61538b828201615288565b928352848101820192828101908a8511156153a557600080fd5b958301955b848710156153c3578635825295830195908301906153aa565b97505050860135925050808211156153da57600080fd5b506153e7858286016152b9565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212208f0f08c113d71e9affd04a930a0ccffff41cc79e358932cfa7ac1395c242440564736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} +{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/InclusionVerifier.sol","abi":[{"inputs":[{"internalType":"uint256[]","name":"pubInputs","type":"uint256[]"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50615467806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004615329565b610057565b604051901515815260200160405180910390f35b60006001610063615252565b6000805160206154128339815191526100d9565b6000805160206153f283398151915280831081831016908380096000805160206153f28339815191528384096000805160206153f283398151915284820990506000805160206153f28339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301527f2df16218a82d39831071e46956c233ee9aa79bb065b265871080d8643f2f52ab600083015260208501518060608401526040860151806080850152846101388284610077565b169450505060608501518060a084015260808601518060c08501528461015e8284610077565b169450505060a08501518060e084015260c086015180610100850152846101858284610077565b16945050506101206000830120610120830152610120820151818106610140840152806101608401525060e085015180610180840152610100860151806101a0850152846101d38284610077565b1694505050610120850151806101c0840152610140860151806101e0850152846101fd8284610077565b60a061016087012061020087018190528581066102208801526102408701521694506001915050610260830153602161024083012061026083018190528181066102808401526102a08301526101608501516102c083018190526101808601516102e08401819052846102708284610077565b16945050506101a0850151806103008401526101c0860151806103208501528461029a8284610077565b16945050506101e08501518061034084015261020086015180610360850152846102c48284610077565b169450505061022085015180610380840152610240860151806103a0850152846102ee8284610077565b16945050506101206102a08301206103c08301526103c08201518181066103e0840152806104008401525061026085015180610420840152610280860151806104408501528461033e8284610077565b16945050506102a0850151806104608401526102c086015180610480850152846103688284610077565b16945050506102e0850151806104a0840152610300860151806104c0850152846103928284610077565b1694505050610320850151806104e084015261034086015180610500850152846103bc8284610077565b16945050506103608501518061052084015261038086015180610540850152846103e68284610077565b1694505050610160610400830120610560830152610560820151818106610580840152806105a084015250806103a0860151066105c0830152806103c0860151066105e0830152806103e086015106610600830152806104008601510661062083015280610420860151066106408301528061044086015106610660830152806104608601510661068083015280610480860151066106a0830152806104a0860151066106c0830152806104c0860151066106e0830152806104e086015106610700830152806105008601510661072083015280610520860151066107408301528061054086015106610760830152806105608601510661078083015280610580860151066107a0830152806105a0860151066107c0830152806105c0860151066107e0830152806105e086015106610800830152806106008601510661082083015280610620860151066108408301528061064086015106610860830152806106608601510661088083015280610680860151066108a0830152806106a0860151066108c0830152806106c0860151066108e0830152806106e086015106610900830152806107008601510661092083015280610720860151066109408301528061074086015106610960830152806107608601510661098083015280610780860151066109a0830152806107a0860151066109c0830152806107c0860151066109e0830152806107e086015106610a008301526104806105a0830120610a20830152610a20820151818106610a4084015280610a60840152506001610a808301536021610a60830120610a808301819052818106610aa0840152610ac0830152610800850151610ae08301819052610820860151610b0084018190528461066f8284610077565b16945050506060610ac0830120610b20830152610b20820151818106610b4084015280610b608401525061084085015180610b8084015261086086015180610ba0850152846106be8284610077565b16945050508061058083015161058084015109610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830181905281908009610ce0830181905281908009610d00830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610d0084015108610d20830152807f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610d2084015109610d40830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d4084015109610d60830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff61058084015108610d80830152807f2498c2d3affa1baaf6419dbccb6a054bb87359c02eade5aeacd86c84757b9051610d4084015109610da0830152807f0bcb8b9f3137847ec20ea7f9b61753116fc08e884b0b8ae29709890f7a846fb061058084015108610dc0830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d4084015109610de0830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc61058084015108610e00830152807f28771071ab1633014eae27cfc16d5ebe08a8fe2fc9e85044e4a45f82c14cd825610d4084015109610e20830152807f07ed3e01361b6d2869a21de6c013f99f1f8aea18afd1204c5f3d96112eb327dc61058084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d4084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e61058084015108610e80830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610d4084015109610ea0830152807f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e761058084015108610ec0830152806001610d4084015109610ee0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058084015108610f00830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610d4084015109610f20830152807f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa261058084015108610f40830152610d808201518181610dc085015109905080610f608401528181610e0085015109905080610f808401528181610e4085015109905080610fa08401528181610e8085015109905080610fc08401528181610ec085015109905080610fe08401528181610f00850151099050806110008401528181610f40850151099050806110208401528181610d208501510990508061104084015250602061108083015260206110a083015260206110c08301526110408201516110e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6111008301526000805160206154128339815191526111208301528260016020611060850160c0611080870160055afa141692506110608201516000610d208401519050828261102086015109610d20850152828282099150610f408401519050828261100086015109610f40850152828282099150610f0084015190508282610fe086015109610f00850152828282099150610ec084015190508282610fc086015109610ec0850152828282099150610e8084015190508282610fa086015109610e80850152828282099150610e4084015190508282610f8086015109610e40850152828282099150610e0084015190508282610f6086015109610e00850152828282099150610dc084015190508282610d8086015109610dc085015282828209610d808501819052610d608501518493509091500961114083015280610dc0830151610da08401510961116083015280610e00830151610de08401510961118083015280610e40830151610e20840151096111a083015280610e80830151610e60840151096111c083015280610ec0830151610ea0840151096111e083015280610f00830151610ee08401510961120083015280610f40830151610f20840151096112208301528060208301516112008401510981818360408601516112208701510908611240840152506106e08201516105c0830151829190086112608301819052819080096112808301819052819080096112a0830152806112a0830151611260840151096112c0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad56112c0840151096112e0830152806107008301516105e0840151086113008301819052819080096113208301819052819080096113408301528061134083015161130084015109611360830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e861136084015109611380830152806113808301516112e0840151086113a08301528061060083015182036113a0840151086113c083018190526107808301518291096113e0830152806113e08301516103e084015109611400830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff96112c084015109611420830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113608401510961144083015280611440830151611420840151086114608301528061062083015182036114608401510861148083018190526107808301518291096114a0830152806114a0830151611400840151086114c0830152806114c08301516103e0840151096114e08301528061064083015182036112c08401510861150083018190526107a0830151829109611520830152806115208301516114e084015108611540830152806115408301516103e084015109611560830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561064084015109611580830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611300840151096115a0830152806115a0830151611580840151086115c083018190526106a08301518291086115e0830181905281908009611600830181905281908009611620830152806116208301516115e084015109611640830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e6661060084015109611660830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6106208401510961168083015280611680830151611660840151086116a0830152806116a08301518203611640840151086116c083018190526107a08301518291096116e0830152806116e083015161156084015108611700830152806117008301516103e084015109611720830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961064084015109611740830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c861130084015109611760830152806117608301516117408401510861178083018190526106c08301518291086117a0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610600840151096117c0830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be610620840151096117e0830152806117e08301516117c0840151086118008301528061180083015182036117a08401510861182083018190526107a08301518291096118408301528061184083015161172084015108611860830152806118608301516103e0840151096118808301528061076083015182036001086118a083018190526107608301518291096118c08301528061076083015182036002086118e083018190526118c08301518291096119008301528061076083015182036004086119208301819052611900830151829109611940830152806105c0830151610680840151086119608301528061060083015182036119608401510861198083018190526119408301518291096119a0830152806119a0830151611880840151086119c0830152806119c08301516103e0840151096119e083015280610620830151820361066084015108611a008301819052611940830151829109611a2083015280611a208301516119e084015108611a4083015280611a408301516103e084015109611a60830152806107c08301516113c084015109611a8083015280611a80830151611a6084015108611aa083015280611aa08301516103e084015109611ac0830152806107c083015161148084015109611ae083015280611ae0830151611ac084015108611b0083015280611b008301516103e084015109611b20830152806107e083015161150084015109611b4083015280611b40830151611b2084015108611b6083015280611b608301516103e084015109611b80830152806107e08301516116c084015109611ba083015280611ba0830151611b8084015108611bc083015280611bc08301516103e084015109611be0830152806107e083015161182084015109611c0083015280611c00830151611be084015108611c2083015280611c208301516103e084015109611c40830152806107608301518203600308611c608301819052611900830151829109611c8083015280611c8083015161198084015109611ca083015280611ca0830151611c4084015108611cc083015280611cc08301516103e084015109611ce083015280611c80830151611a0084015109611d0083015280611d00830151611ce084015108611d2083015280611d208301516103e084015109611d40830152806107608301516118e084015109611d6083015280611d60830151611c6084015109611d8083015280611d8083015161192084015109611da083015280611da083015161064084015109611dc0830152806106408301518203600108611de08301819052611dc0830151829109611e0083015280611e00830151611d4084015108611e2083015280611e208301516103e084015109611e4083015280610640830151600209611e60830152806105c083015182036105e084015108611e808301819052611e60830151829109611ea0830152806105c0830151820361060084015108611ec083015280611ec08301518203611ea084015108611ee08301528061062083015182036105e084015108611f0083015280611f008301518203611ee084015108611f208301819052611da0830151829109611f4083015280611f40830151611e4084015108611f6083015280611f608301516103e084015109611f80830152806118c0830151611c6084015109611fa083015280611fa083015161192084015109611fc0830152806105e08301516105c084015108611fe0830152806106408301518203611fe0840151086120008301819052611fc083015182910961202083015280612020830151611f8084015108612040830152806120408301516103e0840151096120608301819052612020830151829108612080830152806120808301516103e0840151096120a0830152806108e083015182036001086120c083018190526112008301518291096120e0830152806120e08301516120a084015108612100830152806121008301516103e0840151096121208301526109408201518190800961214083015280610940830151820361214084015108612160830181905261114083015182910961218083015280612180830151612120840151086121a0830152806121a08301516103e0840151096121c0830152806109208301518203610940840151086121e08301819052611200830151829109612200830152806122008301516121c084015108612220830152806122208301516103e084015109612240830152806111408301518203600108612260830152806111808301516111608401510861228083018190526111a08301518291086122a083018190526111c08301518291086122c083018190526111e08301518291086122e0830152806122e08301518203612260840151086123008301528061022083015161082084015109612320830152806123208301516106a08401510861234083018190526102808301518291086123608301528061022083015161084084015109612380830152806123808301516105c0840151086123a083018190526102808301518291086123c083018190526123608301518291096123e08301528061022083015161086084015109612400830152806124008301516105e084015108612420830181905261028083015182910861244083018190526123e08301518291096124608301528061022083015161088084015109612480830152806124808301516106c0840151086124a083018190526102808301518291086124c083018190526124608301518291096124e08301819052610900830151829109612500830152806102208301516001096125208301528061252083015161058084015109612540830152806125408301516106a0840151086125608301819052610280830151829108612580830152806102208301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096125a0830152806125a0830151610580840151096125c0830152806125c08301516105c0840151086125e083018190526102808301518291086126008301819052612580830151829109612620830152806102208301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096126408301528061264083015161058084015109612660830152806126608301516105e08401510861268083018190526102808301518291086126a083018190526126208301518291096126c0830152806102208301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e52096126e0830152806126e083015161058084015109612700830152806127008301516106c084015108612720830181905261028083015182910861274083018190526126c083015182910961276083018190526108e0830151829109612780830152806127808301518203612500840151086127a083018190526123008301518291096127c0830152806127c0830151612240840151086127e0830152806127e08301516103e084015109612800830152806102208301516108a08401510961282083015280612820830151610640840151086128408301819052610280830151829108612860830152806102208301516108c08401510961288083015280612880830151611240840151086128a083018190526102808301518291086128c083018190526128608301518291096128e08301819052610960830151829109612900830152806102208301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612920830152806129208301516105808401510961294083015280612940830151610640840151086129608301819052610280830151829108612980830152806102208301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d096129a0830152806129a0830151610580840151096129c0830152806129c0830151611240840151086129e08301819052610280830151829108612a008301819052612980830151829109612a208301819052610940830151829109612a4083015280612a40830151820361290084015108612a608301819052612300830151829109612a8083015280612a8083015161280084015108612aa083015280612aa08301516103e084015109612ac0830152806109808301518203600108612ae08301819052611200830151829109612b0083015280612b00830151612ac084015108612b2083015280612b208301516103e084015109612b4083015261098082015181908009612b60830152806109808301518203612b6084015108612b808301819052611140830151829109612ba083015280612ba0830151612b4084015108612bc083015280612bc08301516103e084015109612be0830152806102208301516109c084015108612c0083018190526109a0830151829109612c2083015280610280830151610a0084015108612c408301819052612c20830151829109612c608301528061060083015161010009612c8083015280612c8083015182036105c084015108612ca08301819052610740830151829109612cc08301819052610220830151829108612ce08301819052610980830151829109612d008301528061028083015161072084015108612d208301819052612d00830151829109612d4083015280612d408301518203612c6084015108612d608301819052612300830151829109612d8083015280612d80830151612be084015108612da083015280612da08301516103e084015109612dc083015280610a0083015182036109c084015108612de08301819052611200830151829109612e0083015280612e00830151612dc084015108612e2083015280612e208301516103e084015109612e4083015280612300830151612de084015109612e60830152806109e083015182036109c084015108612e808301819052612e60830151829109612ea083015280612ea0830151612e4084015108612ec0830152610d0082015181908009612ee08301819052610d00830151829109612f008301819052610d00830151829109612f208301819052610d00830151829109612f4083015280610d00830151600109612f6083015280612ee0830151600109612f8083015280612f00830151600109612fa083015280612f20830151600109612fc083015280610d20830151612ec084015109612fe083015280610580830151610bc08401510961300083015280600161058084015109613020830152806130208301518203610b4084015108613040830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f61058084015109613060830152806130608301518203610b4084015108613080830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610580840151096130a0830152806130a08301518203610b40840151086130c0830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610580840151096130e0830152806130e08301518203610b408401510861310083015280817f21054ce8b3cb9dc9b87af5c70c8f54994090ad8fa7e06caaf989ba5806b6798b610bc085015109610b4084015109818183847f0f5f018a2d66025fffd54fef74f203c3e7a33ab8d1d903e64a583b3be9498676610bc08801510961058087015109089050806131208401525080817f10ac009d2f31395e301635cd6d292978a4012197c24d6e63fb49943a70296136610bc085015109610b4084015109818183847f2696aa2788110c63ebbfd7f92b352ce93b28bbdae57b7cb94bc5885ee439e774610bc08801510961058087015109089050806131408401525080817f2510cae1618713ac17c9ef83f1a67645ed21f454d96bf1f072ca5b463e7f0c28610bc085015109610b4084015109818183847f0d6a07653c64f4112284cb8b23bf73adecaf4ee0fef51998549526f07b6defd7610bc088015109610580870151090861316084015250613040820151819060010961318083018190526130808301518291096131a083018190526131008301518291096131c0830152806001610b40840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058087015109089050806131e08401525080817f1d81b9bd5165d63a0d4a8370d37966eb243365d36ca235911564a783f8234cf2610bc085015109610b4084015109818183847f12e294b58fcbc9efab05c245ae07f172040082750d173b002e7d4e0ff7dcb30f610bc08801510961058087015109089050806132008401525080817f142f93c8919700eddb46a823a63f1726c05e6953fd8ba57ddf6ea70e7ebc8dcf610bc085015109610b4084015109818183847f2707d3cc5788c2cfc0ee9e5f5638da3b90cb6d8b97224a4521073ec9f10826fb610bc08801510961058087015109089050806132208401525080817f13d3d4db83b42c4d48afa6b5c9cbe3f49703d0caf1fdc301b0d4d3743ab60833610bc085015109610b4084015109818183847f223ed99d38075819043fa85ed3c54f3bfb5d62312139562ca82d9903b1b52e27610bc0880151096105808701510908613240840152506130c08201516131a08301518291900961326083015280817f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa361058085015109610b4084015109818183847f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e6105808801510961058087015109089050806132808401525080817f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e61058085015109610b4084015109818183847f1a514dd9f80de355133414990bffdc137169ffbf79f1b0988ce4dc4b27adb4e36105808801510961058087015109089050806132a08401525080817f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e861058085015109610b4084015109818183847f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d716196105808801510961058087015109089050806132c08401525080817f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161961058085015109610b4084015109818183847f20198517670312541561a1720d2538ac357df59dafa0d41bd7235a97f2f364376105808801510961058087015109086132e0840152506131008201516131808301518291900961330083015261312082015181816131408501510990508061332084015281816131608501510990508061334084015281816131e0850151099050806133608401528181613180850151099050806133808401528181613200850151099050806133a08401528181613220850151099050806133c08401528181613240850151099050806133e084015281816132608501510990508061340084015281816132808501510990508061342084015281816132a08501510990508061344084015281816131a08501510990508061346084015281816132c08501510990508061348084015281816132e0850151099050806134a08401528181613300850151099050806134c0840152506020613500830152602061352083015260206135408301526134c08201516135608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6135808301526000805160206154128339815191526135a083015282600160206134e0850160c0613500870160055afa141692506134e08201516000613300840151905082826134a0860151096133008501528282820991506132e084015190508282613480860151096132e08501528282820991506132c084015190508282613460860151096132c08501528282820991506131a084015190508282613440860151096131a08501528282820991506132a084015190508282613420860151096132a08501528282820991506132808401519050828261340086015109613280850152828282099150613260840151905082826133e086015109613260850152828282099150613240840151905082826133c086015109613240850152828282099150613220840151905082826133a086015109613220850152828282099150613200840151905082826133808601510961320085015282828209915061318084015190508282613360860151096131808501528282820991506131e084015190508282613340860151096131e08501528282820991506131608401519050828261332086015109613160850152828282099150613140840151905082826131208601510961314085015282828209613120850181905261314085015190925083915082900890508181613160850151086135c0840152506131808201516131c0830151829190096135e08301526131e08201518061360084015250806132608301516131c0840151096136208301526132008201518181613220850151089050818161324085015108613640840152506131a08201516131c08301518291900961366083015261328082015181816132a085015108613680840152506133008201516131c0830151829190096136a08301526132c082015181816132e0850151086136c0840152506135c082015161360083015182908290099050806136e084015281816136408501510990508061370084015281816136808501510990508061372084015281816136c08501510990508061374084015250602061378083015260206137a083015260206137c08301526137408201516137e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6138008301526000805160206154128339815191526138208301528260016020613760850160c0613780870160055afa1416925061376082015160006136c084015190508282613720860151096136c08501528282820991506136808401519050828261370086015109613680850152828282099150613640840151905082826136e086015109613640850152828282099150613600840151905082826135c086015109613600850152828282096135c085015250506136008201516135e08301518291900961384083015280613640830151613620840151096138608301528061368083015161366084015109613880830152806136c08301516136a0840151096138a0830152610a40820151819080096138c08301819052610a408301518291096138e08301819052610a408301518291096139008301819052610a408301518291096139208301819052610a408301518291096139408301819052610a408301518291096139608301819052610a408301518291096139808301819052610a408301518291096139a08301819052610a408301518291096139c08301819052610a408301518291096139e08301819052610a40830151829109613a008301819052610a40830151829109613a208301819052610a40830151829109613a408301819052610a40830151829109613a608301819052610a40830151829109613a808301819052610a40830151829109613aa08301819052610a40830151829109613ac08301819052610a40830151829109613ae08301819052610a40830151829109613b008301819052610a40830151829109613b20830152610aa082015181908009613b408301819052610aa0830151829109613b608301819052610aa0830151829109613b808301819052610aa0830151829109613ba0830152806131208301516105c084015109818183613140860151610600870151090890508181836131608601516106808701510908613bc084018190526135c08401518392509009613be0830152806001613be0840151830309613c00830152806131208301516105e084015109818183613140860151610620870151090890508181836131608601516106608701510908613c2084018190526135c08401518392509009613c408301819052610a408301518291820309613c6083015280610a40830151600109613c8083015280613c60830151613c0084015108613ca0830152806001613ca084015109613cc0830152806001613c8084015109613ce0830152806135e0830151600109613d00830152806131e083015161064084015109613d208301819052613840830151829109613d40830152806001613d40840151830309613d60830152806001613d0084015109613d80830152806131e0830151610a0084015109613da08301819052613840830151829109613dc08301819052610a408301518291820309613de083015280610a40830151613d0084015109613e0083015280613de0830151613d6084015108613e20830152806131e08301516106a084015109613e408301819052613840830151829109613e6083018190526138c08301518291820309613e80830152806138c0830151613d0084015109613ea083015280613e80830151613e2084015108613ec0830152806131e08301516106c084015109613ee08301819052613840830151829109613f0083018190526138e08301518291820309613f20830152806138e0830151613d0084015109613f4083015280613f20830151613ec084015108613f60830152806131e08301516106e084015109613f808301819052613840830151829109613fa083018190526139008301518291820309613fc083015280613900830151613d0084015109613fe083015280613fc0830151613f6084015108614000830152806131e08301516107008401510961402083018190526138408301518291096140408301819052613920830151829182030961406083015280613920830151613d008401510961408083015280614060830151614000840151086140a0830152806131e0830151610720840151096140c083018190526138408301518291096140e08301819052613940830151829182030961410083015280613940830151613d0084015109614120830152806141008301516140a084015108614140830152806131e0830151610740840151096141608301819052613840830151829109614180830181905261396083015182918203096141a083015280613960830151613d00840151096141c0830152806141a0830151614140840151086141e0830152806131e08301516107608401510961420083018190526138408301518291096142208301819052613980830151829182030961424083015280613980830151613d0084015109614260830152806142408301516141e084015108614280830152806131e0830151610780840151096142a083018190526138408301518291096142c083018190526139a083015182918203096142e0830152806139a0830151613d0084015109614300830152806142e083015161428084015108614320830152806131e08301516107a084015109614340830181905261384083015182910961436083018190526139c08301518291820309614380830152806139c0830151613d00840151096143a083015280614380830151614320840151086143c0830152806131e08301516107c0840151096143e0830181905261384083015182910961440083018190526139e08301518291820309614420830152806139e0830151613d0084015109614440830152806144208301516143c084015108614460830152806131e08301516107e08401510961448083018190526138408301518291096144a08301819052613a0083015182918203096144c083015280613a00830151613d00840151096144e0830152806144c083015161446084015108614500830152806131e08301516108208401510961452083018190526138408301518291096145408301819052613a20830151829182030961456083015280613a20830151613d008401510961458083015280614560830151614500840151086145a0830152806131e0830151610840840151096145c083018190526138408301518291096145e08301819052613a40830151829182030961460083015280613a40830151613d0084015109614620830152806146008301516145a084015108614640830152806131e08301516108608401510961466083018190526138408301518291096146808301819052613a6083015182918203096146a083015280613a60830151613d00840151096146c0830152806146a0830151614640840151086146e0830152806131e08301516108808401510961470083018190526138408301518291096147208301819052613a80830151829182030961474083015280613a80830151613d0084015109614760830152806147408301516146e084015108614780830152806131e08301516108a0840151096147a083018190526138408301518291096147c08301819052613aa083015182918203096147e083015280613aa0830151613d0084015109614800830152806147e083015161478084015108614820830152806131e08301516108c08401510961484083018190526138408301518291096148608301819052613ac0830151829182030961488083015280613ac0830151613d00840151096148a083015280614880830151614820840151086148c0830152806135e0830151612f60840151096148e0830152806135e0830151612f8084015109614900830152806135e0830151612fa084015109614920830152806135e0830151612fc084015109614940830152806131e0830151612fe08401510961496083018190526138408301518291096149808301819052613ae083015182918203096149a083015280613ae0830151613d00840151096149c083015280613ae08301516148e0840151096149e083015280613ae083015161490084015109614a0083015280613ae083015161492084015109614a2083015280613ae083015161494084015109614a40830152806149a08301516148c084015108614a60830152806131e083015161080084015109614a808301819052613840830151829109614aa08301819052613b008301518291820309614ac083015280613b00830151613d0084015109614ae083015280614ac0830151614a6084015108614b008301819052610aa0830151829109614b2083015280610aa0830151613d8084015109614b4083015280610aa0830151613e0084015109614b6083015280610aa0830151613ea084015109614b8083015280610aa0830151613f4084015109614ba083015280610aa0830151613fe084015109614bc083015280610aa083015161408084015109614be083015280610aa083015161412084015109614c0083015280610aa08301516141c084015109614c2083015280610aa083015161426084015109614c4083015280610aa083015161430084015109614c6083015280610aa08301516143a084015109614c8083015280610aa083015161444084015109614ca083015280610aa08301516144e084015109614cc083015280610aa083015161458084015109614ce083015280610aa083015161462084015109614d0083015280610aa08301516146c084015109614d2083015280610aa083015161476084015109614d4083015280610aa083015161480084015109614d6083015280610aa08301516148a084015109614d8083015280610aa08301516149c084015109614da083015280610aa08301516149e084015109614dc083015280610aa0830151614a0084015109614de083015280610aa0830151614a2084015109614e0083015280610aa0830151614a4084015109614e2083015280610aa0830151614ae084015109614e4083015280614b20830151613cc084015108614e6083015280613620830151600109614e80830152806132008301516108e084015109818183613220860151610900870151090890508181836132408601516109208701510908614ea084018190526138608401518392509009614ec0830152806001614ec0840151830309614ee0830152806001614e8084015109614f0083015280613b40830151614ee084015109614f2083015280613b40830151614f0084015109614f4083015280614f20830151614e6084015108614f6083015280613660830151600109614f8083015280613280830151610940840151098181836132a08601516109608701510908614fa084018190526138808401518392509009614fc0830152806001614fc0840151830309614fe0830152806001614f808401510961500083015280613280830151610980840151098181836132a08601516109a08701510908615020840181905261388084015183925090096150408301819052610a40830151829182030961506083015280610a40830151614f808401510961508083015280615060830151614fe0840151086150a08301819052613b608301518291096150c083015280613b60830151615000840151096150e083015280613b6083015161508084015109615100830152806150c0830151614f6084015108615120830152806136a0830151600109615140830152806132c08301516109c0840151098181836132e08601516109e0870151090861516084018190526138a084015183925090096151808301528060016151808401518303096151a0830152806001615140840151096151c083015280613b808301516151a0840151096151e083015280613b808301516151c084015109615200830152806151e083015161512084015108615220830152806131c083015160010961524083015280610b408301516001096152608301526001615280830181815260026152a08501526152208401516152c085015284919060409060608160075afa141692506152808201516152e08301526152a08201516153008301526060820151615320830152608082015161534083015282600160406152e0850160806152e0870160065afa1416925060a082015161536083015260c0820151615380830152613ce08201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa1416925060e0820151615440830152610100820151615460830152614b40820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692506101c08201516155208301526101e0820151615540830152614b60820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f291e4db43c260726b91c535917a801bde06be7f7cf45010909762313db4252906156008301527f154e7fe15847ac4d1cd93fa6c8209672cfccf45ad8e13ab82fc6b167ba1994fc615620830152614b80820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f176b10d402fac05bfc982234f50b305ad067e122f1682a4b9c4bd98bda91919d6156e08301527f1d62e78d655e3fc74188666738fca6524a712f1a3c4ccfdd0fa44f3e2c849c51615700830152614ba082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f019dd7ee531990d335aad8f64c26a1bc072b47a7efd4504404d2e95e202507596157c08301527f0c413dd8e50189a05a374679bae72f724f7b71e956c32c0881ea37694276ea836157e0830152614bc082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f0730799d5bfec1cefc5aaffcffe3f3dd491b2bfcaf9f553f94de6145ed4742af6158a08301527f24ad4af082e96b14b9a6da80f4fa1334f253c458add531c8d9f8b23c5ecb9c436158c0830152614be08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa46159808301527f0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c06159a0830152614c008201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f0b30fe9581a6c70064e3b35446b2433842db76e8fad547fbb1ee69916473f7ed615a608301527f286e0f87d619e3fedac8a3d7442ef34fb6566ce9af5a315758c0c2b8000c36cf615a80830152614c20820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f14e66a771ef08cca0551c26b3439d49d391ba21d91b706df2c4b1f177d7759e5615b408301527f0532723a26dc928f43033efaef8e4aa2732772ba414b1dadce1fe7d0b30d99d2615b60830152614c40820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f0474ae1c4230bdcdd25ce460ef73c689e4227edf0ec7c2be85ef8d75592e1b36615c208301527f2fd83e6e07cc35755a04337fd70af8aa31fc74de07a539b8a8756caa60d04890615c40830152614c60820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f1c6f93aef795f525c8b51bcb0234bb345942cc31782bf75096fff2707f3e4b9f615d008301527f1bf84b761871a3311b096d870534b0a4b095330cd45fbe7bbbf5b353a980c39d615d20830152614c80820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f07609ba791f0ed5d569091041c800974b8440bc5c0f97d9b6295a1632175116c615de08301527f1cdb0412f38e1a19531afbd1c9603146e7bd1c34a93df6be4c65b126e3537b68615e00830152614ca0820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f0e955b89eca5fc34d2172022f89dc467ac2e84c9929e1ce0c2a8ce831c5dd701615ec08301527f07cf929adce614b088c82cb3934f1eb7546dd2e48396e914b4ff06ec45de9e8a615ee0830152614cc0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f2d4531a47528e642f8f6954a3f3ff9f6072e38d30e2e0d108d1cac201d4b684d615fa08301527f154c409bbd1760ec55639d32d5817c9399e573b22a8fdda5f707c9b9de1d4ca6615fc0830152614ce0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f2402db4b1c7746dcd9fe7eab82ab3fa7ebb1bd352a9af94ef6811b2af9ab6f8e6160808301527f2a0047ec08a254753c466648f0dc6e077e88e5495829c3a845873b9058bf44076160a0830152614d008201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa141692507f0476c7f154f703672add74ffebc6ffa6159b4e527f0a4354b601facd57ff1a1a6161608301527f27c10290f730edad9bcb2538056f755efea924b0a69d86d5c9c833717e730e28616180830152614d208201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692507f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c4529746162408301527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3616260830152614d40820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692507f1e87eb88577795c9f28c423b4d2c3ec1e890164466ea9742d9996ae5c3b80a2a6163208301527eb004814b24c7c7a9dc56ffa03d4f2b7e0f5605f3bb18deddf9e63978abbc56616340830152614d60820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa141692507f2903a763c1c6b78667f906b6fe2b4ad197b55587c90e14e8502446da8c45ef7d6164008301527f13ea57986f9295e92def3303aef53f2b4f625ba985531201ab53dc7307f46b69616420830152614d80820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506104208201516164e0830152610440820151616500830152614da082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506104608201516165c08301526104808201516165e0830152614dc082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa141692506104a08201516166a08301526104c08201516166c0830152614de08201516166e083015282600160406166a0850160606166a0870160075afa141692506166208201516167008301526166408201516167208301526166a08201516167408301526166c0820151616760830152826001604061670085016080616700870160065afa141692506104e08201516167808301526105008201516167a0830152614e008201516167c0830152826001604061678085016060616780870160075afa141692506167008201516167e08301526167208201516168008301526167808201516168208301526167a082015161684083015282600160406167e0850160806167e0870160065afa14169250610520820151616860830152610540820151616880830152614e208201516168a0830152826001604061686085016060616860870160075afa141692506167e08201516168c08301526168008201516168e083015261686082015161690083015261688082015161692083015282600160406168c0850160806168c0870160065afa141692506103808201516169408301526103a0820151616960830152614e40820151616980830152826001604061694085016060616940870160075afa141692506168c08201516169a08301526168e08201516169c08301526169408201516169e0830152616960820151616a0083015282600160406169a0850160806169a0870160065afa141692506102c0820151616a208301526102e0820151616a40830152614f40820151616a608301528260016040616a2085016060616a20870160075afa141692506169a0820151616a808301526169c0820151616aa0830152616a20820151616ac0830152616a40820151616ae08301528260016040616a8085016080616a80870160065afa14169250610300820151616b00830152610320820151616b208301526150e0820151616b408301528260016040616b0085016060616b00870160075afa14169250616a80820151616b60830152616aa0820151616b80830152616b00820151616ba0830152616b20820151616bc08301528260016040616b6085016080616b60870160065afa14169250610340820151616be0830152610360820151616c00830152615100820151616c208301528260016040616be085016060616be0870160075afa14169250616b60820151616c40830152616b80820151616c60830152616be0820151616c80830152616c00820151616ca08301528260016040616c4085016080616c40870160065afa14169250610180820151616cc08301526101a0820151616ce0830152615200820151616d008301528260016040616cc085016060616cc0870160075afa14169250616c40820151616d20830152616c60820151616d40830152616cc0820151616d60830152616ce0820151616d808301528260016040616d2085016080616d20870160065afa14169250610ae0820151616da0830152610b00820151616dc08301526152408201518103616de0830152508160016040616da084016060616da0860160075afa14169150616d20810151616e00820152616d40810151616e20820152616da0810151616e40820152616dc0810151616e608201528160016040616e0084016080616e00860160065afa14169150610b80810151616e80820152610ba0810151616ea0820152615260810151616ec08201528160016040616e8084016060616e80860160075afa14169150616e00810151616ee0820152616e20810151616f00820152616e80810151616f20820152616ea0810151616f408201528160016040616ee084016080616ee0860160065afa14169150616ee0810151616f60820152616f00810151616f808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2616fa08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616fc08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616fe08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa617000820152610b80810151617020820152610ba08101516170408201527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6170608201527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6170808201527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c1456170a08201527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff6170c08201528160016020616f608401610180616f60860160085afa616f6093909301516001149214161691505092915050565b604051806170c00160405280610386906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156152b1576152b1615272565b604052919050565b600082601f8301126152ca57600080fd5b813567ffffffffffffffff8111156152e4576152e4615272565b6152f7601f8201601f1916602001615288565b81815284602083860101111561530c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561533c57600080fd5b823567ffffffffffffffff8082111561535457600080fd5b818501915085601f83011261536857600080fd5b813560208282111561537c5761537c615272565b8160051b61538b828201615288565b928352848101820192828101908a8511156153a557600080fd5b958301955b848710156153c3578635825295830195908301906153aa565b97505050860135925050808211156153da57600080fd5b506153e7858286016152b9565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212208f0f08c113d71e9affd04a930a0ccffff41cc79e358932cfa7ac1395c242440564736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004615329565b610057565b604051901515815260200160405180910390f35b60006001610063615252565b6000805160206154128339815191526100d9565b6000805160206153f283398151915280831081831016908380096000805160206153f28339815191528384096000805160206153f283398151915284820990506000805160206153f28339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301527f2df16218a82d39831071e46956c233ee9aa79bb065b265871080d8643f2f52ab600083015260208501518060608401526040860151806080850152846101388284610077565b169450505060608501518060a084015260808601518060c08501528461015e8284610077565b169450505060a08501518060e084015260c086015180610100850152846101858284610077565b16945050506101206000830120610120830152610120820151818106610140840152806101608401525060e085015180610180840152610100860151806101a0850152846101d38284610077565b1694505050610120850151806101c0840152610140860151806101e0850152846101fd8284610077565b60a061016087012061020087018190528581066102208801526102408701521694506001915050610260830153602161024083012061026083018190528181066102808401526102a08301526101608501516102c083018190526101808601516102e08401819052846102708284610077565b16945050506101a0850151806103008401526101c0860151806103208501528461029a8284610077565b16945050506101e08501518061034084015261020086015180610360850152846102c48284610077565b169450505061022085015180610380840152610240860151806103a0850152846102ee8284610077565b16945050506101206102a08301206103c08301526103c08201518181066103e0840152806104008401525061026085015180610420840152610280860151806104408501528461033e8284610077565b16945050506102a0850151806104608401526102c086015180610480850152846103688284610077565b16945050506102e0850151806104a0840152610300860151806104c0850152846103928284610077565b1694505050610320850151806104e084015261034086015180610500850152846103bc8284610077565b16945050506103608501518061052084015261038086015180610540850152846103e68284610077565b1694505050610160610400830120610560830152610560820151818106610580840152806105a084015250806103a0860151066105c0830152806103c0860151066105e0830152806103e086015106610600830152806104008601510661062083015280610420860151066106408301528061044086015106610660830152806104608601510661068083015280610480860151066106a0830152806104a0860151066106c0830152806104c0860151066106e0830152806104e086015106610700830152806105008601510661072083015280610520860151066107408301528061054086015106610760830152806105608601510661078083015280610580860151066107a0830152806105a0860151066107c0830152806105c0860151066107e0830152806105e086015106610800830152806106008601510661082083015280610620860151066108408301528061064086015106610860830152806106608601510661088083015280610680860151066108a0830152806106a0860151066108c0830152806106c0860151066108e0830152806106e086015106610900830152806107008601510661092083015280610720860151066109408301528061074086015106610960830152806107608601510661098083015280610780860151066109a0830152806107a0860151066109c0830152806107c0860151066109e0830152806107e086015106610a008301526104806105a0830120610a20830152610a20820151818106610a4084015280610a60840152506001610a808301536021610a60830120610a808301819052818106610aa0840152610ac0830152610800850151610ae08301819052610820860151610b0084018190528461066f8284610077565b16945050506060610ac0830120610b20830152610b20820151818106610b4084015280610b608401525061084085015180610b8084015261086086015180610ba0850152846106be8284610077565b16945050508061058083015161058084015109610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830181905281908009610ce0830181905281908009610d00830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610d0084015108610d20830152807f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610d2084015109610d40830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d4084015109610d60830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff61058084015108610d80830152807f2498c2d3affa1baaf6419dbccb6a054bb87359c02eade5aeacd86c84757b9051610d4084015109610da0830152807f0bcb8b9f3137847ec20ea7f9b61753116fc08e884b0b8ae29709890f7a846fb061058084015108610dc0830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d4084015109610de0830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc61058084015108610e00830152807f28771071ab1633014eae27cfc16d5ebe08a8fe2fc9e85044e4a45f82c14cd825610d4084015109610e20830152807f07ed3e01361b6d2869a21de6c013f99f1f8aea18afd1204c5f3d96112eb327dc61058084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d4084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e61058084015108610e80830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610d4084015109610ea0830152807f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e761058084015108610ec0830152806001610d4084015109610ee0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058084015108610f00830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610d4084015109610f20830152807f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa261058084015108610f40830152610d808201518181610dc085015109905080610f608401528181610e0085015109905080610f808401528181610e4085015109905080610fa08401528181610e8085015109905080610fc08401528181610ec085015109905080610fe08401528181610f00850151099050806110008401528181610f40850151099050806110208401528181610d208501510990508061104084015250602061108083015260206110a083015260206110c08301526110408201516110e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6111008301526000805160206154128339815191526111208301528260016020611060850160c0611080870160055afa141692506110608201516000610d208401519050828261102086015109610d20850152828282099150610f408401519050828261100086015109610f40850152828282099150610f0084015190508282610fe086015109610f00850152828282099150610ec084015190508282610fc086015109610ec0850152828282099150610e8084015190508282610fa086015109610e80850152828282099150610e4084015190508282610f8086015109610e40850152828282099150610e0084015190508282610f6086015109610e00850152828282099150610dc084015190508282610d8086015109610dc085015282828209610d808501819052610d608501518493509091500961114083015280610dc0830151610da08401510961116083015280610e00830151610de08401510961118083015280610e40830151610e20840151096111a083015280610e80830151610e60840151096111c083015280610ec0830151610ea0840151096111e083015280610f00830151610ee08401510961120083015280610f40830151610f20840151096112208301528060208301516112008401510981818360408601516112208701510908611240840152506106e08201516105c0830151829190086112608301819052819080096112808301819052819080096112a0830152806112a0830151611260840151096112c0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad56112c0840151096112e0830152806107008301516105e0840151086113008301819052819080096113208301819052819080096113408301528061134083015161130084015109611360830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e861136084015109611380830152806113808301516112e0840151086113a08301528061060083015182036113a0840151086113c083018190526107808301518291096113e0830152806113e08301516103e084015109611400830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff96112c084015109611420830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113608401510961144083015280611440830151611420840151086114608301528061062083015182036114608401510861148083018190526107808301518291096114a0830152806114a0830151611400840151086114c0830152806114c08301516103e0840151096114e08301528061064083015182036112c08401510861150083018190526107a0830151829109611520830152806115208301516114e084015108611540830152806115408301516103e084015109611560830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561064084015109611580830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611300840151096115a0830152806115a0830151611580840151086115c083018190526106a08301518291086115e0830181905281908009611600830181905281908009611620830152806116208301516115e084015109611640830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e6661060084015109611660830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6106208401510961168083015280611680830151611660840151086116a0830152806116a08301518203611640840151086116c083018190526107a08301518291096116e0830152806116e083015161156084015108611700830152806117008301516103e084015109611720830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961064084015109611740830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c861130084015109611760830152806117608301516117408401510861178083018190526106c08301518291086117a0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610600840151096117c0830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be610620840151096117e0830152806117e08301516117c0840151086118008301528061180083015182036117a08401510861182083018190526107a08301518291096118408301528061184083015161172084015108611860830152806118608301516103e0840151096118808301528061076083015182036001086118a083018190526107608301518291096118c08301528061076083015182036002086118e083018190526118c08301518291096119008301528061076083015182036004086119208301819052611900830151829109611940830152806105c0830151610680840151086119608301528061060083015182036119608401510861198083018190526119408301518291096119a0830152806119a0830151611880840151086119c0830152806119c08301516103e0840151096119e083015280610620830151820361066084015108611a008301819052611940830151829109611a2083015280611a208301516119e084015108611a4083015280611a408301516103e084015109611a60830152806107c08301516113c084015109611a8083015280611a80830151611a6084015108611aa083015280611aa08301516103e084015109611ac0830152806107c083015161148084015109611ae083015280611ae0830151611ac084015108611b0083015280611b008301516103e084015109611b20830152806107e083015161150084015109611b4083015280611b40830151611b2084015108611b6083015280611b608301516103e084015109611b80830152806107e08301516116c084015109611ba083015280611ba0830151611b8084015108611bc083015280611bc08301516103e084015109611be0830152806107e083015161182084015109611c0083015280611c00830151611be084015108611c2083015280611c208301516103e084015109611c40830152806107608301518203600308611c608301819052611900830151829109611c8083015280611c8083015161198084015109611ca083015280611ca0830151611c4084015108611cc083015280611cc08301516103e084015109611ce083015280611c80830151611a0084015109611d0083015280611d00830151611ce084015108611d2083015280611d208301516103e084015109611d40830152806107608301516118e084015109611d6083015280611d60830151611c6084015109611d8083015280611d8083015161192084015109611da083015280611da083015161064084015109611dc0830152806106408301518203600108611de08301819052611dc0830151829109611e0083015280611e00830151611d4084015108611e2083015280611e208301516103e084015109611e4083015280610640830151600209611e60830152806105c083015182036105e084015108611e808301819052611e60830151829109611ea0830152806105c0830151820361060084015108611ec083015280611ec08301518203611ea084015108611ee08301528061062083015182036105e084015108611f0083015280611f008301518203611ee084015108611f208301819052611da0830151829109611f4083015280611f40830151611e4084015108611f6083015280611f608301516103e084015109611f80830152806118c0830151611c6084015109611fa083015280611fa083015161192084015109611fc0830152806105e08301516105c084015108611fe0830152806106408301518203611fe0840151086120008301819052611fc083015182910961202083015280612020830151611f8084015108612040830152806120408301516103e0840151096120608301819052612020830151829108612080830152806120808301516103e0840151096120a0830152806108e083015182036001086120c083018190526112008301518291096120e0830152806120e08301516120a084015108612100830152806121008301516103e0840151096121208301526109408201518190800961214083015280610940830151820361214084015108612160830181905261114083015182910961218083015280612180830151612120840151086121a0830152806121a08301516103e0840151096121c0830152806109208301518203610940840151086121e08301819052611200830151829109612200830152806122008301516121c084015108612220830152806122208301516103e084015109612240830152806111408301518203600108612260830152806111808301516111608401510861228083018190526111a08301518291086122a083018190526111c08301518291086122c083018190526111e08301518291086122e0830152806122e08301518203612260840151086123008301528061022083015161082084015109612320830152806123208301516106a08401510861234083018190526102808301518291086123608301528061022083015161084084015109612380830152806123808301516105c0840151086123a083018190526102808301518291086123c083018190526123608301518291096123e08301528061022083015161086084015109612400830152806124008301516105e084015108612420830181905261028083015182910861244083018190526123e08301518291096124608301528061022083015161088084015109612480830152806124808301516106c0840151086124a083018190526102808301518291086124c083018190526124608301518291096124e08301819052610900830151829109612500830152806102208301516001096125208301528061252083015161058084015109612540830152806125408301516106a0840151086125608301819052610280830151829108612580830152806102208301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096125a0830152806125a0830151610580840151096125c0830152806125c08301516105c0840151086125e083018190526102808301518291086126008301819052612580830151829109612620830152806102208301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096126408301528061264083015161058084015109612660830152806126608301516105e08401510861268083018190526102808301518291086126a083018190526126208301518291096126c0830152806102208301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e52096126e0830152806126e083015161058084015109612700830152806127008301516106c084015108612720830181905261028083015182910861274083018190526126c083015182910961276083018190526108e0830151829109612780830152806127808301518203612500840151086127a083018190526123008301518291096127c0830152806127c0830151612240840151086127e0830152806127e08301516103e084015109612800830152806102208301516108a08401510961282083015280612820830151610640840151086128408301819052610280830151829108612860830152806102208301516108c08401510961288083015280612880830151611240840151086128a083018190526102808301518291086128c083018190526128608301518291096128e08301819052610960830151829109612900830152806102208301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612920830152806129208301516105808401510961294083015280612940830151610640840151086129608301819052610280830151829108612980830152806102208301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d096129a0830152806129a0830151610580840151096129c0830152806129c0830151611240840151086129e08301819052610280830151829108612a008301819052612980830151829109612a208301819052610940830151829109612a4083015280612a40830151820361290084015108612a608301819052612300830151829109612a8083015280612a8083015161280084015108612aa083015280612aa08301516103e084015109612ac0830152806109808301518203600108612ae08301819052611200830151829109612b0083015280612b00830151612ac084015108612b2083015280612b208301516103e084015109612b4083015261098082015181908009612b60830152806109808301518203612b6084015108612b808301819052611140830151829109612ba083015280612ba0830151612b4084015108612bc083015280612bc08301516103e084015109612be0830152806102208301516109c084015108612c0083018190526109a0830151829109612c2083015280610280830151610a0084015108612c408301819052612c20830151829109612c608301528061060083015161010009612c8083015280612c8083015182036105c084015108612ca08301819052610740830151829109612cc08301819052610220830151829108612ce08301819052610980830151829109612d008301528061028083015161072084015108612d208301819052612d00830151829109612d4083015280612d408301518203612c6084015108612d608301819052612300830151829109612d8083015280612d80830151612be084015108612da083015280612da08301516103e084015109612dc083015280610a0083015182036109c084015108612de08301819052611200830151829109612e0083015280612e00830151612dc084015108612e2083015280612e208301516103e084015109612e4083015280612300830151612de084015109612e60830152806109e083015182036109c084015108612e808301819052612e60830151829109612ea083015280612ea0830151612e4084015108612ec0830152610d0082015181908009612ee08301819052610d00830151829109612f008301819052610d00830151829109612f208301819052610d00830151829109612f4083015280610d00830151600109612f6083015280612ee0830151600109612f8083015280612f00830151600109612fa083015280612f20830151600109612fc083015280610d20830151612ec084015109612fe083015280610580830151610bc08401510961300083015280600161058084015109613020830152806130208301518203610b4084015108613040830152807f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f61058084015109613060830152806130608301518203610b4084015108613080830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610580840151096130a0830152806130a08301518203610b40840151086130c0830152807f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610580840151096130e0830152806130e08301518203610b408401510861310083015280817f21054ce8b3cb9dc9b87af5c70c8f54994090ad8fa7e06caaf989ba5806b6798b610bc085015109610b4084015109818183847f0f5f018a2d66025fffd54fef74f203c3e7a33ab8d1d903e64a583b3be9498676610bc08801510961058087015109089050806131208401525080817f10ac009d2f31395e301635cd6d292978a4012197c24d6e63fb49943a70296136610bc085015109610b4084015109818183847f2696aa2788110c63ebbfd7f92b352ce93b28bbdae57b7cb94bc5885ee439e774610bc08801510961058087015109089050806131408401525080817f2510cae1618713ac17c9ef83f1a67645ed21f454d96bf1f072ca5b463e7f0c28610bc085015109610b4084015109818183847f0d6a07653c64f4112284cb8b23bf73adecaf4ee0fef51998549526f07b6defd7610bc088015109610580870151090861316084015250613040820151819060010961318083018190526130808301518291096131a083018190526131008301518291096131c0830152806001610b40840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061058087015109089050806131e08401525080817f1d81b9bd5165d63a0d4a8370d37966eb243365d36ca235911564a783f8234cf2610bc085015109610b4084015109818183847f12e294b58fcbc9efab05c245ae07f172040082750d173b002e7d4e0ff7dcb30f610bc08801510961058087015109089050806132008401525080817f142f93c8919700eddb46a823a63f1726c05e6953fd8ba57ddf6ea70e7ebc8dcf610bc085015109610b4084015109818183847f2707d3cc5788c2cfc0ee9e5f5638da3b90cb6d8b97224a4521073ec9f10826fb610bc08801510961058087015109089050806132208401525080817f13d3d4db83b42c4d48afa6b5c9cbe3f49703d0caf1fdc301b0d4d3743ab60833610bc085015109610b4084015109818183847f223ed99d38075819043fa85ed3c54f3bfb5d62312139562ca82d9903b1b52e27610bc0880151096105808701510908613240840152506130c08201516131a08301518291900961326083015280817f1b9e4cecf9d91a534374fa77043701c82dc7e69e6a661b163dd63549ae8d8fa361058085015109610b4084015109818183847f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e6105808801510961058087015109089050806132808401525080817f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705e61058085015109610b4084015109818183847f1a514dd9f80de355133414990bffdc137169ffbf79f1b0988ce4dc4b27adb4e36105808801510961058087015109089050806132a08401525080817f0566fffbb9f283767505fb50085852d112c8c6f13d7a5194bbb3850e5828e9e861058085015109610b4084015109818183847f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d716196105808801510961058087015109089050806132c08401525080817f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161961058085015109610b4084015109818183847f20198517670312541561a1720d2538ac357df59dafa0d41bd7235a97f2f364376105808801510961058087015109086132e0840152506131008201516131808301518291900961330083015261312082015181816131408501510990508061332084015281816131608501510990508061334084015281816131e0850151099050806133608401528181613180850151099050806133808401528181613200850151099050806133a08401528181613220850151099050806133c08401528181613240850151099050806133e084015281816132608501510990508061340084015281816132808501510990508061342084015281816132a08501510990508061344084015281816131a08501510990508061346084015281816132c08501510990508061348084015281816132e0850151099050806134a08401528181613300850151099050806134c0840152506020613500830152602061352083015260206135408301526134c08201516135608301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6135808301526000805160206154128339815191526135a083015282600160206134e0850160c0613500870160055afa141692506134e08201516000613300840151905082826134a0860151096133008501528282820991506132e084015190508282613480860151096132e08501528282820991506132c084015190508282613460860151096132c08501528282820991506131a084015190508282613440860151096131a08501528282820991506132a084015190508282613420860151096132a08501528282820991506132808401519050828261340086015109613280850152828282099150613260840151905082826133e086015109613260850152828282099150613240840151905082826133c086015109613240850152828282099150613220840151905082826133a086015109613220850152828282099150613200840151905082826133808601510961320085015282828209915061318084015190508282613360860151096131808501528282820991506131e084015190508282613340860151096131e08501528282820991506131608401519050828261332086015109613160850152828282099150613140840151905082826131208601510961314085015282828209613120850181905261314085015190925083915082900890508181613160850151086135c0840152506131808201516131c0830151829190096135e08301526131e08201518061360084015250806132608301516131c0840151096136208301526132008201518181613220850151089050818161324085015108613640840152506131a08201516131c08301518291900961366083015261328082015181816132a085015108613680840152506133008201516131c0830151829190096136a08301526132c082015181816132e0850151086136c0840152506135c082015161360083015182908290099050806136e084015281816136408501510990508061370084015281816136808501510990508061372084015281816136c08501510990508061374084015250602061378083015260206137a083015260206137c08301526137408201516137e08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6138008301526000805160206154128339815191526138208301528260016020613760850160c0613780870160055afa1416925061376082015160006136c084015190508282613720860151096136c08501528282820991506136808401519050828261370086015109613680850152828282099150613640840151905082826136e086015109613640850152828282099150613600840151905082826135c086015109613600850152828282096135c085015250506136008201516135e08301518291900961384083015280613640830151613620840151096138608301528061368083015161366084015109613880830152806136c08301516136a0840151096138a0830152610a40820151819080096138c08301819052610a408301518291096138e08301819052610a408301518291096139008301819052610a408301518291096139208301819052610a408301518291096139408301819052610a408301518291096139608301819052610a408301518291096139808301819052610a408301518291096139a08301819052610a408301518291096139c08301819052610a408301518291096139e08301819052610a40830151829109613a008301819052610a40830151829109613a208301819052610a40830151829109613a408301819052610a40830151829109613a608301819052610a40830151829109613a808301819052610a40830151829109613aa08301819052610a40830151829109613ac08301819052610a40830151829109613ae08301819052610a40830151829109613b008301819052610a40830151829109613b20830152610aa082015181908009613b408301819052610aa0830151829109613b608301819052610aa0830151829109613b808301819052610aa0830151829109613ba0830152806131208301516105c084015109818183613140860151610600870151090890508181836131608601516106808701510908613bc084018190526135c08401518392509009613be0830152806001613be0840151830309613c00830152806131208301516105e084015109818183613140860151610620870151090890508181836131608601516106608701510908613c2084018190526135c08401518392509009613c408301819052610a408301518291820309613c6083015280610a40830151600109613c8083015280613c60830151613c0084015108613ca0830152806001613ca084015109613cc0830152806001613c8084015109613ce0830152806135e0830151600109613d00830152806131e083015161064084015109613d208301819052613840830151829109613d40830152806001613d40840151830309613d60830152806001613d0084015109613d80830152806131e0830151610a0084015109613da08301819052613840830151829109613dc08301819052610a408301518291820309613de083015280610a40830151613d0084015109613e0083015280613de0830151613d6084015108613e20830152806131e08301516106a084015109613e408301819052613840830151829109613e6083018190526138c08301518291820309613e80830152806138c0830151613d0084015109613ea083015280613e80830151613e2084015108613ec0830152806131e08301516106c084015109613ee08301819052613840830151829109613f0083018190526138e08301518291820309613f20830152806138e0830151613d0084015109613f4083015280613f20830151613ec084015108613f60830152806131e08301516106e084015109613f808301819052613840830151829109613fa083018190526139008301518291820309613fc083015280613900830151613d0084015109613fe083015280613fc0830151613f6084015108614000830152806131e08301516107008401510961402083018190526138408301518291096140408301819052613920830151829182030961406083015280613920830151613d008401510961408083015280614060830151614000840151086140a0830152806131e0830151610720840151096140c083018190526138408301518291096140e08301819052613940830151829182030961410083015280613940830151613d0084015109614120830152806141008301516140a084015108614140830152806131e0830151610740840151096141608301819052613840830151829109614180830181905261396083015182918203096141a083015280613960830151613d00840151096141c0830152806141a0830151614140840151086141e0830152806131e08301516107608401510961420083018190526138408301518291096142208301819052613980830151829182030961424083015280613980830151613d0084015109614260830152806142408301516141e084015108614280830152806131e0830151610780840151096142a083018190526138408301518291096142c083018190526139a083015182918203096142e0830152806139a0830151613d0084015109614300830152806142e083015161428084015108614320830152806131e08301516107a084015109614340830181905261384083015182910961436083018190526139c08301518291820309614380830152806139c0830151613d00840151096143a083015280614380830151614320840151086143c0830152806131e08301516107c0840151096143e0830181905261384083015182910961440083018190526139e08301518291820309614420830152806139e0830151613d0084015109614440830152806144208301516143c084015108614460830152806131e08301516107e08401510961448083018190526138408301518291096144a08301819052613a0083015182918203096144c083015280613a00830151613d00840151096144e0830152806144c083015161446084015108614500830152806131e08301516108208401510961452083018190526138408301518291096145408301819052613a20830151829182030961456083015280613a20830151613d008401510961458083015280614560830151614500840151086145a0830152806131e0830151610840840151096145c083018190526138408301518291096145e08301819052613a40830151829182030961460083015280613a40830151613d0084015109614620830152806146008301516145a084015108614640830152806131e08301516108608401510961466083018190526138408301518291096146808301819052613a6083015182918203096146a083015280613a60830151613d00840151096146c0830152806146a0830151614640840151086146e0830152806131e08301516108808401510961470083018190526138408301518291096147208301819052613a80830151829182030961474083015280613a80830151613d0084015109614760830152806147408301516146e084015108614780830152806131e08301516108a0840151096147a083018190526138408301518291096147c08301819052613aa083015182918203096147e083015280613aa0830151613d0084015109614800830152806147e083015161478084015108614820830152806131e08301516108c08401510961484083018190526138408301518291096148608301819052613ac0830151829182030961488083015280613ac0830151613d00840151096148a083015280614880830151614820840151086148c0830152806135e0830151612f60840151096148e0830152806135e0830151612f8084015109614900830152806135e0830151612fa084015109614920830152806135e0830151612fc084015109614940830152806131e0830151612fe08401510961496083018190526138408301518291096149808301819052613ae083015182918203096149a083015280613ae0830151613d00840151096149c083015280613ae08301516148e0840151096149e083015280613ae083015161490084015109614a0083015280613ae083015161492084015109614a2083015280613ae083015161494084015109614a40830152806149a08301516148c084015108614a60830152806131e083015161080084015109614a808301819052613840830151829109614aa08301819052613b008301518291820309614ac083015280613b00830151613d0084015109614ae083015280614ac0830151614a6084015108614b008301819052610aa0830151829109614b2083015280610aa0830151613d8084015109614b4083015280610aa0830151613e0084015109614b6083015280610aa0830151613ea084015109614b8083015280610aa0830151613f4084015109614ba083015280610aa0830151613fe084015109614bc083015280610aa083015161408084015109614be083015280610aa083015161412084015109614c0083015280610aa08301516141c084015109614c2083015280610aa083015161426084015109614c4083015280610aa083015161430084015109614c6083015280610aa08301516143a084015109614c8083015280610aa083015161444084015109614ca083015280610aa08301516144e084015109614cc083015280610aa083015161458084015109614ce083015280610aa083015161462084015109614d0083015280610aa08301516146c084015109614d2083015280610aa083015161476084015109614d4083015280610aa083015161480084015109614d6083015280610aa08301516148a084015109614d8083015280610aa08301516149c084015109614da083015280610aa08301516149e084015109614dc083015280610aa0830151614a0084015109614de083015280610aa0830151614a2084015109614e0083015280610aa0830151614a4084015109614e2083015280610aa0830151614ae084015109614e4083015280614b20830151613cc084015108614e6083015280613620830151600109614e80830152806132008301516108e084015109818183613220860151610900870151090890508181836132408601516109208701510908614ea084018190526138608401518392509009614ec0830152806001614ec0840151830309614ee0830152806001614e8084015109614f0083015280613b40830151614ee084015109614f2083015280613b40830151614f0084015109614f4083015280614f20830151614e6084015108614f6083015280613660830151600109614f8083015280613280830151610940840151098181836132a08601516109608701510908614fa084018190526138808401518392509009614fc0830152806001614fc0840151830309614fe0830152806001614f808401510961500083015280613280830151610980840151098181836132a08601516109a08701510908615020840181905261388084015183925090096150408301819052610a40830151829182030961506083015280610a40830151614f808401510961508083015280615060830151614fe0840151086150a08301819052613b608301518291096150c083015280613b60830151615000840151096150e083015280613b6083015161508084015109615100830152806150c0830151614f6084015108615120830152806136a0830151600109615140830152806132c08301516109c0840151098181836132e08601516109e0870151090861516084018190526138a084015183925090096151808301528060016151808401518303096151a0830152806001615140840151096151c083015280613b808301516151a0840151096151e083015280613b808301516151c084015109615200830152806151e083015161512084015108615220830152806131c083015160010961524083015280610b408301516001096152608301526001615280830181815260026152a08501526152208401516152c085015284919060409060608160075afa141692506152808201516152e08301526152a08201516153008301526060820151615320830152608082015161534083015282600160406152e0850160806152e0870160065afa1416925060a082015161536083015260c0820151615380830152613ce08201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa1416925060e0820151615440830152610100820151615460830152614b40820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692506101c08201516155208301526101e0820151615540830152614b60820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f291e4db43c260726b91c535917a801bde06be7f7cf45010909762313db4252906156008301527f154e7fe15847ac4d1cd93fa6c8209672cfccf45ad8e13ab82fc6b167ba1994fc615620830152614b80820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f176b10d402fac05bfc982234f50b305ad067e122f1682a4b9c4bd98bda91919d6156e08301527f1d62e78d655e3fc74188666738fca6524a712f1a3c4ccfdd0fa44f3e2c849c51615700830152614ba082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f019dd7ee531990d335aad8f64c26a1bc072b47a7efd4504404d2e95e202507596157c08301527f0c413dd8e50189a05a374679bae72f724f7b71e956c32c0881ea37694276ea836157e0830152614bc082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f0730799d5bfec1cefc5aaffcffe3f3dd491b2bfcaf9f553f94de6145ed4742af6158a08301527f24ad4af082e96b14b9a6da80f4fa1334f253c458add531c8d9f8b23c5ecb9c436158c0830152614be08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa46159808301527f0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c06159a0830152614c008201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f0b30fe9581a6c70064e3b35446b2433842db76e8fad547fbb1ee69916473f7ed615a608301527f286e0f87d619e3fedac8a3d7442ef34fb6566ce9af5a315758c0c2b8000c36cf615a80830152614c20820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f14e66a771ef08cca0551c26b3439d49d391ba21d91b706df2c4b1f177d7759e5615b408301527f0532723a26dc928f43033efaef8e4aa2732772ba414b1dadce1fe7d0b30d99d2615b60830152614c40820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f0474ae1c4230bdcdd25ce460ef73c689e4227edf0ec7c2be85ef8d75592e1b36615c208301527f2fd83e6e07cc35755a04337fd70af8aa31fc74de07a539b8a8756caa60d04890615c40830152614c60820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f1c6f93aef795f525c8b51bcb0234bb345942cc31782bf75096fff2707f3e4b9f615d008301527f1bf84b761871a3311b096d870534b0a4b095330cd45fbe7bbbf5b353a980c39d615d20830152614c80820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f07609ba791f0ed5d569091041c800974b8440bc5c0f97d9b6295a1632175116c615de08301527f1cdb0412f38e1a19531afbd1c9603146e7bd1c34a93df6be4c65b126e3537b68615e00830152614ca0820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f0e955b89eca5fc34d2172022f89dc467ac2e84c9929e1ce0c2a8ce831c5dd701615ec08301527f07cf929adce614b088c82cb3934f1eb7546dd2e48396e914b4ff06ec45de9e8a615ee0830152614cc0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f2d4531a47528e642f8f6954a3f3ff9f6072e38d30e2e0d108d1cac201d4b684d615fa08301527f154c409bbd1760ec55639d32d5817c9399e573b22a8fdda5f707c9b9de1d4ca6615fc0830152614ce0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f2402db4b1c7746dcd9fe7eab82ab3fa7ebb1bd352a9af94ef6811b2af9ab6f8e6160808301527f2a0047ec08a254753c466648f0dc6e077e88e5495829c3a845873b9058bf44076160a0830152614d008201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa141692507f0476c7f154f703672add74ffebc6ffa6159b4e527f0a4354b601facd57ff1a1a6161608301527f27c10290f730edad9bcb2538056f755efea924b0a69d86d5c9c833717e730e28616180830152614d208201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692507f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c4529746162408301527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3616260830152614d40820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692507f1e87eb88577795c9f28c423b4d2c3ec1e890164466ea9742d9996ae5c3b80a2a6163208301527eb004814b24c7c7a9dc56ffa03d4f2b7e0f5605f3bb18deddf9e63978abbc56616340830152614d60820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa141692507f2903a763c1c6b78667f906b6fe2b4ad197b55587c90e14e8502446da8c45ef7d6164008301527f13ea57986f9295e92def3303aef53f2b4f625ba985531201ab53dc7307f46b69616420830152614d80820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506104208201516164e0830152610440820151616500830152614da082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506104608201516165c08301526104808201516165e0830152614dc082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa141692506104a08201516166a08301526104c08201516166c0830152614de08201516166e083015282600160406166a0850160606166a0870160075afa141692506166208201516167008301526166408201516167208301526166a08201516167408301526166c0820151616760830152826001604061670085016080616700870160065afa141692506104e08201516167808301526105008201516167a0830152614e008201516167c0830152826001604061678085016060616780870160075afa141692506167008201516167e08301526167208201516168008301526167808201516168208301526167a082015161684083015282600160406167e0850160806167e0870160065afa14169250610520820151616860830152610540820151616880830152614e208201516168a0830152826001604061686085016060616860870160075afa141692506167e08201516168c08301526168008201516168e083015261686082015161690083015261688082015161692083015282600160406168c0850160806168c0870160065afa141692506103808201516169408301526103a0820151616960830152614e40820151616980830152826001604061694085016060616940870160075afa141692506168c08201516169a08301526168e08201516169c08301526169408201516169e0830152616960820151616a0083015282600160406169a0850160806169a0870160065afa141692506102c0820151616a208301526102e0820151616a40830152614f40820151616a608301528260016040616a2085016060616a20870160075afa141692506169a0820151616a808301526169c0820151616aa0830152616a20820151616ac0830152616a40820151616ae08301528260016040616a8085016080616a80870160065afa14169250610300820151616b00830152610320820151616b208301526150e0820151616b408301528260016040616b0085016060616b00870160075afa14169250616a80820151616b60830152616aa0820151616b80830152616b00820151616ba0830152616b20820151616bc08301528260016040616b6085016080616b60870160065afa14169250610340820151616be0830152610360820151616c00830152615100820151616c208301528260016040616be085016060616be0870160075afa14169250616b60820151616c40830152616b80820151616c60830152616be0820151616c80830152616c00820151616ca08301528260016040616c4085016080616c40870160065afa14169250610180820151616cc08301526101a0820151616ce0830152615200820151616d008301528260016040616cc085016060616cc0870160075afa14169250616c40820151616d20830152616c60820151616d40830152616cc0820151616d60830152616ce0820151616d808301528260016040616d2085016080616d20870160065afa14169250610ae0820151616da0830152610b00820151616dc08301526152408201518103616de0830152508160016040616da084016060616da0860160075afa14169150616d20810151616e00820152616d40810151616e20820152616da0810151616e40820152616dc0810151616e608201528160016040616e0084016080616e00860160065afa14169150610b80810151616e80820152610ba0810151616ea0820152615260810151616ec08201528160016040616e8084016060616e80860160075afa14169150616e00810151616ee0820152616e20810151616f00820152616e80810151616f20820152616ea0810151616f408201528160016040616ee084016080616ee0860160065afa14169150616ee0810151616f60820152616f00810151616f808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2616fa08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616fc08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616fe08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa617000820152610b80810151617020820152610ba08101516170408201527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6170608201527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6170808201527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c1456170a08201527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff6170c08201528160016020616f608401610180616f60860160085afa616f6093909301516001149214161691505092915050565b604051806170c00160405280610386906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156152b1576152b1615272565b604052919050565b600082601f8301126152ca57600080fd5b813567ffffffffffffffff8111156152e4576152e4615272565b6152f7601f8201601f1916602001615288565b81815284602083860101111561530c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561533c57600080fd5b823567ffffffffffffffff8082111561535457600080fd5b818501915085601f83011261536857600080fd5b813560208282111561537c5761537c615272565b8160051b61538b828201615288565b928352848101820192828101908a8511156153a557600080fd5b958301955b848710156153c3578635825295830195908301906153aa565b97505050860135925050808211156153da57600080fd5b506153e7858286016152b9565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212208f0f08c113d71e9affd04a930a0ccffff41cc79e358932cfa7ac1395c242440564736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/SolvencyVerifier.json b/backend/src/contracts/abi/SolvencyVerifier.json deleted file mode 100644 index 8d5d66bf..00000000 --- a/backend/src/contracts/abi/SolvencyVerifier.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/SolvencyVerifier.sol","abi":[{"inputs":[{"internalType":"uint256[]","name":"pubInputs","type":"uint256[]"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50615012806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004614ed4565b610057565b604051901515815260200160405180910390f35b60006001610063614dfd565b600080516020614fbd8339815191526100d9565b600080516020614f9d8339815191528083108183101690838009600080516020614f9d833981519152838409600080516020614f9d8339815191528482099050600080516020614f9d8339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301528060608701510660608301527eae99b137916ff4220b0da7179a4601301c82346fc665cd3369a54e1f02d4ea6000830152602085015180608084015260408601518060a0850152846101438284610077565b169450505060608501518060c084015260808601518060e0850152846101698284610077565b169450505060a08501518061010084015260c086015180610120850152846101918284610077565b16945050506101406000830120610140830152610140820151818106610160840152806101808401525060e0850151806101a0840152610100860151806101c0850152846101df8284610077565b1694505050610120850151806101e084015261014086015180610200850152846102098284610077565b60a061018087012061022087018190528581066102408801526102608701521694506001915050610280830153602161026083012061028083018190528181066102a08401526102c08301526101608501516102e0830181905261018086015161030084018190528461027c8284610077565b16945050506101a0850151806103208401526101c086015180610340850152846102a68284610077565b16945050506101e08501518061036084015261020086015180610380850152846102d08284610077565b1694505050610220850151806103a0840152610240860151806103c0850152846102fa8284610077565b16945050506101206102c08301206103e08301526103e0820151818106610400840152806104208401525061026085015180610440840152610280860151806104608501528461034a8284610077565b16945050506102a0850151806104808401526102c0860151806104a0850152846103748284610077565b16945050506102e0850151806104c0840152610300860151806104e08501528461039e8284610077565b16945050506103208501518061050084015261034086015180610520850152846103c88284610077565b16945050506103608501518061054084015261038086015180610560850152846103f28284610077565b16945050506101606104208301206105808301526105808201518181066105a0840152806105c084015250806103a0860151066105e0830152806103c086015106610600830152806103e08601510661062083015280610400860151066106408301528061042086015106610660830152806104408601510661068083015280610460860151066106a083015280610480860151066106c0830152806104a0860151066106e0830152806104c086015106610700830152806104e08601510661072083015280610500860151066107408301528061052086015106610760830152806105408601510661078083015280610560860151066107a083015280610580860151066107c0830152806105a0860151066107e0830152806105c086015106610800830152806105e08601510661082083015280610600860151066108408301528061062086015106610860830152806106408601510661088083015280610660860151066108a083015280610680860151066108c0830152806106a0860151066108e0830152806106c086015106610900830152806106e08601510661092083015280610700860151066109408301528061072086015106610960830152806107408601510661098083015280610760860151066109a083015280610780860151066109c0830152806107a0860151066109e08301526104406105c0830120610a00830152610a00820151818106610a2084015280610a40840152506001610a608301536021610a40830120610a608301819052818106610a80840152610aa08301526107c0850151610ac083018190526107e0860151610ae084018190528461065f8284610077565b16945050506060610aa0830120610b00830152610b00820151818106610b2084015280610b408401525061080085015180610b6084015261082086015180610b80850152846106ae8284610077565b1694505050806105a08301516105a084015109610ba0830181905281908009610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610cc084015108610ce0830152807f3058355f447953c1ade231a513e0f80710e9db4e679b02351f90fd168b040001610ce084015109610d00830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb26610d0084015109610d20830152807f1a6cb0b91da01e6d7a1e7d76eeef7de63954cd24b5a8c2b95ad8712f455b04db6105a084015108610d40830152807f03b743d74fd9ddb41f920179ac30e04b0ebd93e580b9c0b50061087904110bd4610d0084015109610d60830152807f2cad0a9b9157c27598be443cd550781219765462f8ffafdc4380ed1aebeef42d6105a084015108610d80830152807f1f4d7180df5014849825f3c9b0e89d79432c51f48eb5846ae63b433f28aba10b610d0084015109610da0830152807f1116dcf201e18ba5202a51ecd098bae3e5079653eb03ec265da6b254c7545ef66105a084015108610dc0830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d0084015109610de0830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff6105a084015108610e00830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d0084015109610e20830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc6105a084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d0084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e6105a084015108610e80830152806001610d0084015109610ea0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a084015108610ec0830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d610d0084015109610ee0830152807f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44846105a084015108610f00830152807f0dd30b9ad8c173555d2a33029bc807ac165b61281e9054a173af7ff4e4fc88fc610d0084015109610f20830152807f229142d808702cd45b2612b3e5b950b111d887205b291befd032759f0b0377056105a084015108610f40830152610d408201518181610d8085015109905080610f608401528181610dc085015109905080610f808401528181610e0085015109905080610fa08401528181610e4085015109905080610fc08401528181610e8085015109905080610fe08401528181610ec0850151099050806110008401528181610f00850151099050806110208401528181610f40850151099050806110408401528181610ce0850151099050806110608401525060206110a083015260206110c083015260206110e08301526110608201516111008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611120830152600080516020614fbd8339815191526111408301528260016020611080850160c06110a0870160055afa141692506110808201516000610ce08401519050828261104086015109610ce0850152828282099150610f408401519050828261102086015109610f40850152828282099150610f008401519050828261100086015109610f00850152828282099150610ec084015190508282610fe086015109610ec0850152828282099150610e8084015190508282610fc086015109610e80850152828282099150610e4084015190508282610fa086015109610e40850152828282099150610e0084015190508282610f8086015109610e00850152828282099150610dc084015190508282610f6086015109610dc0850152828282099150610d8084015190508282610d4086015109610d8085015282828209610d408501819052610d208501518493509091500961116083015280610d80830151610d608401510961118083015280610dc0830151610da0840151096111a083015280610e00830151610de0840151096111c083015280610e40830151610e20840151096111e083015280610e80830151610e608401510961120083015280610ec0830151610ea08401510961122083015280610f00830151610ee08401510961124083015280610f40830151610f20840151096112608301528060208301516112208401510981818360408601516112408701510908905081818360608601516112608701510908611280840152506107208201516105e0830151829190086112a08301819052819080096112c08301819052819080096112e0830152806112e08301516112a084015109611300830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561130084015109611320830152806107408301516106008401510861134083018190528190800961136083018190528190800961138083015280611380830151611340840151096113a0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e86113a0840151096113c0830152806113c0830151611320840151086113e08301528061062083015182036113e08401510861140083018190526107a08301518291096114208301528061142083015161040084015109611440830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961130084015109611460830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113a08401510961148083015280611480830151611460840151086114a08301528061064083015182036114a0840151086114c083018190526107a08301518291096114e0830152806114e08301516114408401510861150083015280611500830151610400840151096115208301528061066083015182036113008401510861154083018190526107c0830151829109611560830152806115608301516115208401510861158083015280611580830151610400840151096115a0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad5610660840151096115c0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611340840151096115e0830152806115e08301516115c08401510861160083018190526106e08301518291086116208301819052819080096116408301819052819080096116608301528061166083015161162084015109611680830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610620840151096116a0830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe610640840151096116c0830152806116c08301516116a0840151086116e0830152806116e083015182036116808401510861170083018190526107c0830151829109611720830152806117208301516115a0840151086117408301528061174083015161040084015109611760830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961066084015109611780830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c8611340840151096117a0830152806117a0830151611780840151086117c083018190526107008301518291086117e0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb0261062084015109611800830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6106408401510961182083015280611820830151611800840151086118408301528061184083015182036117e08401510861186083018190526107c083015182910961188083015280611880830151611760840151086118a0830152806118a0830151610400840151096118c08301528061078083015182036001086118e0830181905261078083015182910961190083015280610780830151820360020861192083018190526119008301518291096119408301528061078083015182036003086119608301819052611940830151829109611980830152806105e08301516106a0840151086119a08301528061062083015182036119a0840151086119c083018190526119808301518291096119e0830152806119e08301516118c084015108611a0083015280611a0083015161040084015109611a2083015280610640830151820361068084015108611a408301819052611980830151829109611a6083015280611a60830151611a2084015108611a8083015280611a8083015161040084015109611aa08301528061078083015161192084015109611ac083015280611ac083015161196084015109611ae0830152806107808301518203600408611b008301819052611ae0830151829109611b2083015280611b2083015161066084015109611b40830152806106608301518203600108611b608301819052611b40830151829109611b8083015280611b80830151611aa084015108611ba083015280611ba083015161040084015109611bc083015280610660830151600209611be0830152806105e0830151820361060084015108611c008301819052611be0830151829109611c20830152806105e0830151820361062084015108611c4083015280611c408301518203611c2084015108611c6083015280610640830151820361060084015108611c8083015280611c808301518203611c6084015108611ca08301819052611b20830151829109611cc083015280611cc0830151611bc084015108611ce083015280611ce083015161040084015109611d008301528061190083015161196084015109611d2083015280611d20830151611b0084015109611d40830152806106008301516105e084015108611d60830152806106608301518203611d6084015108611d808301819052611d40830151829109611da083015280611da0830151611d0084015108611dc083015280611dc083015161040084015109611de08301819052611da0830151829108611e0083015280611e0083015161040084015109611e2083015280611940830151611b0084015109611e408301528061060083015182036105e084015108611e6083015280600160701b611e6084015108611e80830152806106608301518203611e8084015108611ea08301819052611e40830151829109611ec083015280611ec0830151611e2084015108611ee083015280611ee083015161040084015109611f00830152806108c08301518203600108611f208301819052611220830151829109611f4083015280611f40830151611f0084015108611f6083015280611f6083015161040084015109611f8083015261092082015181908009611fa0830152806109208301518203611fa084015108611fc08301819052611160830151829109611fe083015280611fe0830151611f80840151086120008301528061200083015161040084015109612020830152806109008301518203610920840151086120408301819052611220830151829109612060830152806120608301516120208401510861208083015280612080830151610400840151096120a08301528061116083015182036001086120c0830152806111a0830151611180840151086120e083018190526111c083015182910861210083018190526111e083015182910861212083018190526112008301518291086121408301528061214083015182036120c0840151086121608301528061024083015161080084015109612180830152806121808301516106e0840151086121a083018190526102a08301518291086121c083015280610240830151610820840151096121e0830152806121e08301516105e08401510861220083018190526102a083015182910861222083018190526121c08301518291096122408301528061024083015161084084015109612260830152806122608301516106008401510861228083018190526102a08301518291086122a083018190526122408301518291096122c083015280610240830151610860840151096122e0830152806122e08301516107008401510861230083018190526102a083015182910861232083018190526122c083015182910961234083018190526108e083015182910961236083015280610240830151600109612380830152806123808301516105a0840151096123a0830152806123a08301516106e0840151086123c083018190526102a08301518291086123e0830152806102408301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a209612400830152806124008301516105a084015109612420830152806124208301516105e08401510861244083018190526102a083015182910861246083018190526123e0830151829109612480830152806102408301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096124a0830152806124a08301516105a0840151096124c0830152806124c0830151610600840151086124e083018190526102a08301518291086125008301819052612480830151829109612520830152806102408301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e5209612540830152806125408301516105a084015109612560830152806125608301516107008401510861258083018190526102a08301518291086125a083018190526125208301518291096125c083018190526108c08301518291096125e0830152806125e08301518203612360840151086126008301819052612160830151829109612620830152806126208301516120a0840151086126408301528061264083015161040084015109612660830152806102408301516108808401510961268083015280612680830151610660840151086126a083018190526102a08301518291086126c0830152806102408301516108a0840151096126e0830152806126e08301516112808401510861270083018190526102a083015182910861272083018190526126c08301518291096127408301819052610940830151829109612760830152806102408301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612780830152806127808301516105a0840151096127a0830152806127a0830151610660840151086127c083018190526102a08301518291086127e0830152806102408301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d09612800830152806128008301516105a084015109612820830152806128208301516112808401510861284083018190526102a083015182910861286083018190526127e083015182910961288083018190526109208301518291096128a0830152806128a08301518203612760840151086128c083018190526121608301518291096128e0830152806128e08301516126608401510861290083015280612900830151610400840151096129208301528061096083015182036001086129408301819052611220830151829109612960830152806129608301516129208401510861298083015280612980830151610400840151096129a0830152610960820151819080096129c08301528061096083015182036129c0840151086129e08301819052611160830151829109612a0083015280612a008301516129a084015108612a2083015280612a2083015161040084015109612a40830152806102408301516109a084015108612a608301819052610980830151829109612a80830152806102a08301516109e084015108612aa08301819052612a80830151829109612ac0830152806106c083015161010009612ae083015280612ae0830151820361066084015108612b008301819052610760830151829109612b208301819052610240830151829108612b408301819052610960830151829109612b60830152806102a083015161072084015108612b808301819052612b60830151829109612ba083015280612ba08301518203612ac084015108612bc08301819052612160830151829109612be083015280612be0830151612a4084015108612c0083015280612c0083015161040084015109612c20830152806109e083015182036109a084015108612c408301819052611220830151829109612c6083015280612c60830151612c2084015108612c8083015280612c8083015161040084015109612ca083015280612160830151612c4084015109612cc0830152806109c083015182036109a084015108612ce08301819052612cc0830151829109612d0083015280612d00830151612ca084015108612d20830152610cc082015181908009612d408301819052610cc0830151829109612d608301819052610cc0830151829109612d808301819052610cc0830151829109612da083015280610cc0830151600109612dc083015280612d40830151600109612de083015280612d60830151600109612e0083015280612d80830151600109612e2083015280610ce0830151612d2084015109612e40830152806105a0830151610ba084015109612e608301528060016105a084015109612e8083015280612e808301518203610b2084015108612ea0830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e36105a084015109612ec083015280612ec08301518203610b2084015108612ee0830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb266105a084015109612f0083015280612f008301518203610b2084015108612f20830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d6105a084015109612f4083015280612f408301518203610b2084015108612f6083015280817f2b0bd16731aaf34928c0661ba43310fbbf44baa457b980ce19affba7315792a4610ba085015109610b2084015109818183847f05587d0baf86ace08f8fdf9add4e476168ef2da421ffefc32a31f9ecbea86d5d610ba0880151096105a08701510908905080612f808401525080817f1e42214ea9b2db33296ba55096815a0a6d468af715ccfa9fab93b1e3701b7f62610ba085015109610b2084015109818183847f1648cc055b11af4e0f62923d9627e377b1d413c0864af4963a826fcc6a0231fa610ba0880151096105a08701510908905080612fa08401525080817f2960d84a95d8f00f740a3d1478feb6d4b196e34bf86b62b75041b14b389d49ce610ba085015109610b2084015109818183847f21fe615ace99028841c84393e39435ea26675e494fd4886263e6fedd3cba1f16610ba0880151096105a08701510908612fc084015250612ea08201518190600109612fe08301819052612f608301518291096130008301819052612ee083015182910961302083015280817f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44856105a085015109610b2084015109818183847f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a0880151096105a087015109089050806130408401525080817f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a085015109610b2084015109818183847f1d05f683f7bacf55bccd495a5703cb329ada890af08ac0d24959599e24c832816105a0880151096105a087015109089050806130608401525080817f23af40e47e2f59a03809484a29d5e3afbf105f1fa100de8be21295a92fa75534610ba085015109610b2084015109818183847f0cb50d8e630246898046fd6c57ab74ad69238928d8b8920561cf5feac058aacd610ba0880151096105a087015109089050806130808401525080817f259eb1d15d2e74dc1a22c32210de87566d7ae67bcc859ce1e33117e171cbbcd2610ba085015109610b2084015109818183847f0705f7901a0ba3736dff0830a813cdc7350ce79c852ba2d86353d0ff84d80bb5610ba0880151096105a087015109089050806130a08401525080817f2a6bbeb56332f220c30fcaac737fd885c3596480f0ca2ff07d2733561911b7bd610ba085015109610b2084015109818183847f26a0f84d76444b5e0a60f8966cc6c88c09cf0713bd044ba9fe6c9b2e8b6263b7610ba0880151096105a087015109086130c084015250612f20820151613000830151829190096130e083015280817f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1f6105a085015109610b2084015109818183847f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a0880151096105a087015109089050806131008401525080817f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a085015109610b2084015109818183847f017829d43aa3529ba5ed3f4879cd1c09ff9f06e716afb2bc6cc72847d12771ae6105a0880151096105a0870151090861312084015250612ee0820151612fe083015182919009613140830152806001610b20840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a0870151090861316084015250612f80820151612fa083015182908290099050806131808401528181612fc0850151099050806131a08401528181613040850151099050806131c08401528181613060850151099050806131e084015281816130008501510990508061320084015281816130808501510990508061322084015281816130a08501510990508061324084015281816130c08501510990508061326084015281816130e0850151099050806132808401528181613100850151099050806132a08401528181613120850151099050806132c08401528181613140850151099050806132e08401528181613160850151099050806133008401528181612fe085015109905080613320840152506020613360830152602061338083015260206133a08301526133208201516133c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6133e0830152600080516020614fbd8339815191526134008301528260016020613340850160c0613360870160055afa141692506133408201516000612fe08401519050828261330086015109612fe0850152828282099150613160840151905082826132e086015109613160850152828282099150613140840151905082826132c086015109613140850152828282099150613120840151905082826132a08601510961312085015282828209915061310084015190508282613280860151096131008501528282820991506130e084015190508282613260860151096130e08501528282820991506130c084015190508282613240860151096130c08501528282820991506130a084015190508282613220860151096130a08501528282820991506130808401519050828261320086015109613080850152828282099150613000840151905082826131e086015109613000850152828282099150613060840151905082826131c086015109613060850152828282099150613040840151905082826131a086015109613040850152828282099150612fc08401519050828261318086015109612fc0850152828282099150612fa084015190508282612f8086015109612fa085015282828209612f808501819052612fa085015190925083915082900890508181612fc0850151086134208401525061300082015161302083015182919009613440830152613040820151818161306085015108613460840152506130e08201516130208301518291900961348083015261308082015181816130a085015108905081816130c0850151086134a084015250613140820151613020830151829190096134c08301526131008201518181613120850151086134e084015250612fe082015161302083015182919009613500830152613160820151806135208401525061342082015181816134608501510990508061354084015281816134a08501510990508061356084015281816134e0850151099050806135808401528181613520850151099050806135a08401525060206135e0830152602061360083015260206136208301526135a08201516136408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff613660830152600080516020614fbd83398151915261368083015282600160206135c0850160c06135e0870160055afa141692506135c0820151600061352084015190508282613580860151096135208501528282820991506134e084015190508282613560860151096134e08501528282820991506134a084015190508282613540860151096134a08501528282820991506134608401519050828261342086015109613460850152828282096134208501525050613460820151613440830151829190096136a0830152806134a0830151613480840151096136c0830152806134e08301516134c0840151096136e08301528061352083015161350084015109613700830152610a20820151819080096137208301819052610a208301518291096137408301819052610a208301518291096137608301819052610a208301518291096137808301819052610a208301518291096137a08301819052610a208301518291096137c08301819052610a208301518291096137e08301819052610a208301518291096138008301819052610a208301518291096138208301819052610a208301518291096138408301819052610a208301518291096138608301819052610a208301518291096138808301819052610a208301518291096138a08301819052610a208301518291096138c08301819052610a208301518291096138e08301819052610a20830151829109613900830152610a80820151819080096139208301819052610a808301518291096139408301819052610a808301518291096139608301819052610a8083015182910961398083015280612f808301516105e084015109818183612fa086015161062087015109089050818183612fc08601516106a087015109086139a0840181905261342084015183925090096139c08301528060016139c08401518303096139e083015280612f8083015161060084015109818183612fa086015161064087015109089050818183612fc08601516106808701510908613a0084018190526134208401518392509009613a208301819052610a208301518291820309613a4083015280610a20830151600109613a6083015280613a408301516139e084015108613a80830152806001613a8084015109613aa0830152806001613a6084015109613ac083015280613440830151600109613ae083015280613040830151610660840151098181836130608601516106c08701510908613b0084018190526136a08401518392509009613b20830152806001613b20840151830309613b40830152806001613ae084015109613b6083015280613040830151610920840151098181836130608601516109408701510908613b8084018190526136a08401518392509009613ba08301819052610a208301518291820309613bc083015280610a20830151613ae084015109613be083015280613bc0830151613b4084015108613c0083015280613040830151610960840151098181836130608601516109808701510908613c2084018190526136a08401518392509009613c4083018190526137208301518291820309613c6083015280613720830151613ae084015109613c8083015280613c60830151613c0084015108613ca08301819052610a80830151829109613cc083015280610a80830151613b6084015109613ce083015280610a80830151613be084015109613d0083015280610a80830151613c8084015109613d2083015280613cc0830151613aa084015108613d4083015280613480830151600109613d60830152806130808301516108c0840151098181836130a08601516108e0870151090890508181836130c08601516109008701510908613d8084018190526136c08401518392509009613da0830152806001613da0840151830309613dc0830152806001613d6084015109613de083015280613920830151613dc084015109613e0083015280613920830151613de084015109613e2083015280613e00830151613d4084015108613e40830152806134c0830151600109613e60830152806131008301516109a0840151098181836131208601516109c08701510908613e8084018190526136e08401518392509009613ea0830152806001613ea0840151830309613ec0830152806001613e6084015109613ee083015280613940830151613ec084015109613f0083015280613940830151613ee084015109613f2083015280613f00830151613e4084015108613f4083015280613500830151600109613f60830152806131608301516109e084015109613f808301819052613700830151829109613fa0830152806001613fa0840151830309613fc0830152806001613f6084015109613fe0830152806131608301516106e08401510961400083018190526137008301518291096140208301819052610a20830151829182030961404083015280610a20830151613f608401510961406083015280614040830151613fc08401510861408083015280613160830151610700840151096140a083018190526137008301518291096140c0830181905261372083015182918203096140e083015280613720830151613f6084015109614100830152806140e083015161408084015108614120830152806131608301516107208401510961414083018190526137008301518291096141608301819052613740830151829182030961418083015280613740830151613f60840151096141a083015280614180830151614120840151086141c083015280613160830151610740840151096141e083018190526137008301518291096142008301819052613760830151829182030961422083015280613760830151613f6084015109614240830152806142208301516141c084015108614260830152806131608301516107608401510961428083018190526137008301518291096142a0830181905261378083015182918203096142c083015280613780830151613f60840151096142e0830152806142c0830151614260840151086143008301528061316083015161078084015109614320830181905261370083015182910961434083018190526137a08301518291820309614360830152806137a0830151613f608401510961438083015280614360830151614300840151086143a0830152806131608301516107a0840151096143c083018190526137008301518291096143e083018190526137c08301518291820309614400830152806137c0830151613f6084015109614420830152806144008301516143a084015108614440830152806131608301516107c084015109614460830181905261370083015182910961448083018190526137e083015182918203096144a0830152806137e0830151613f60840151096144c0830152806144a0830151614440840151086144e0830152806131608301516108008401510961450083018190526137008301518291096145208301819052613800830151829182030961454083015280613800830151613f6084015109614560830152806145408301516144e08401510861458083015280613160830151610820840151096145a083018190526137008301518291096145c0830181905261382083015182918203096145e083015280613820830151613f6084015109614600830152806145e083015161458084015108614620830152806131608301516108408401510961464083018190526137008301518291096146608301819052613840830151829182030961468083015280613840830151613f60840151096146a083015280614680830151614620840151086146c083015280613160830151610860840151096146e083018190526137008301518291096147008301819052613860830151829182030961472083015280613860830151613f6084015109614740830152806147208301516146c084015108614760830152806131608301516108808401510961478083018190526137008301518291096147a0830181905261388083015182918203096147c083015280613880830151613f60840151096147e0830152806147c083015161476084015108614800830152806131608301516108a084015109614820830181905261370083015182910961484083018190526138a08301518291820309614860830152806138a0830151613f608401510961488083015280614860830151614800840151086148a083015280613500830151612dc0840151096148c083015280613500830151612de0840151096148e083015280613500830151612e008401510961490083015280613500830151612e208401510961492083015280613160830151612e4084015109614940830181905261370083015182910961496083018190526138c08301518291820309614980830152806138c0830151613f60840151096149a0830152806138c08301516148c0840151096149c0830152806138c08301516148e0840151096149e0830152806138c083015161490084015109614a00830152806138c083015161492084015109614a20830152806149808301516148a084015108614a40830152806131608301516107e084015109614a608301819052613700830151829109614a8083018190526138e08301518291820309614aa0830152806138e0830151613f6084015109614ac083015280614aa0830151614a4084015108614ae08301819052613960830151829109614b0083015280613960830151613fe084015109614b208301528061396083015161406084015109614b408301528061396083015161410084015109614b60830152806139608301516141a084015109614b808301528061396083015161424084015109614ba0830152806139608301516142e084015109614bc08301528061396083015161438084015109614be08301528061396083015161442084015109614c00830152806139608301516144c084015109614c208301528061396083015161456084015109614c408301528061396083015161460084015109614c60830152806139608301516146a084015109614c808301528061396083015161474084015109614ca0830152806139608301516147e084015109614cc08301528061396083015161488084015109614ce0830152806139608301516149a084015109614d00830152806139608301516149c084015109614d20830152806139608301516149e084015109614d4083015280613960830151614a0084015109614d6083015280613960830151614a2084015109614d8083015280613960830151614ac084015109614da083015280614b00830151613f4084015108614dc083015280613020830151600109614de083015280610b20830151600109614e008301526001614e2083018181526002614e40850152614dc0840151614e6085015284919060409060608160075afa14169250614e20820151614e80830152614e40820151614ea08301526080820151614ec083015260a0820151614ee08301528260016040614e8085016080614e80870160065afa1416925060c0820151614f0083015260e0820151614f20830152613ac0820151614f408301528260016040614f0085016060614f00870160075afa14169250614e80820151614f60830152614ea0820151614f80830152614f00820151614fa0830152614f20820151614fc08301528260016040614f6085016080614f60870160065afa14169250610100820151614fe0830152610120820151615000830152613ce08201516150208301528260016040614fe085016060614fe0870160075afa14169250614f60820151615040830152614f80820151615060830152614fe08201516150808301526150008201516150a0830152826001604061504085016080615040870160065afa141692506103208201516150c08301526103408201516150e0830152613d0082015161510083015282600160406150c0850160606150c0870160075afa141692506150408201516151208301526150608201516151408301526150c08201516151608301526150e0820151615180830152826001604061512085016080615120870160065afa141692506103608201516151a08301526103808201516151c0830152613d208201516151e083015282600160406151a0850160606151a0870160075afa141692506151208201516152008301526151408201516152208301526151a08201516152408301526151c0820151615260830152826001604061520085016080615200870160065afa141692506102e08201516152808301526103008201516152a0830152613e208201516152c0830152826001604061528085016060615280870160075afa141692506152008201516152e08301526152208201516153008301526152808201516153208301526152a082015161534083015282600160406152e0850160806152e0870160065afa141692506101a08201516153608301526101c0820151615380830152613f208201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa141692506101e0820151615440830152610200820151615460830152614b20820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692507f0655d62979dc062dc1e8c15334bf17cf5c7e6352219c0bd0b0cc039598d9a6696155208301527f019589d3002f6a0ded46a69053f0c05e7a7ca45339b3d2bae85d00f26ac0f33e615540830152614b40820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f1eab999592385208b42a12dcc047763ee5cf12052eb4b0d9a7a286e043f3df9f6156008301527f18887eb3c646ffd4961226c91bac9661004798b1fc6a39c43f9a6d1d03767194615620830152614b60820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f076806058b02e1b5e99b2f2e8eee613194f8df73481659f5938baacd64e4d7b86156e08301527f05ae81644b244dceea5350a84a79cbf0a199bbd6c1fad9887423f8c8048e6039615700830152614b8082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f0438873fc00231ae527efcf74d9092f5059dfa05275cbe7381e948fe3b7b61d86157c08301527f03c0f314c93403792ba86ec3841b3080f2f7cd092c6bcb632cdbc2122a13cdef6157e0830152614ba082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f2b12b132a6261ad60249147599cae0d5b3547e510deabba65526d130f04f24026158a08301527f13e3c02ce00f6b7e00d5b099eda5f1155956ae83899a2d59cefcb00dad66a7f66158c0830152614bc08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f0ed83370277e0fd35e8258dd5630ce0ce3491fdf7e166d293745635b0cc4eba56159808301527f03994e7e77ad58072b78757700ab0b79247f2e462b0cf6a5a18b607414c095db6159a0830152614be08201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f23ba4bc49baab563e9d5bf07da231a4496d35b6bc782dbbd76135fe44c31cbcf615a608301527f28b88097e7edf1b2904f6c25c1e30ca0e38c74a52125b2995c4cf0a750683854615a80830152614c00820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f17dcbba0bbe2d24566de620998f62ff54ea5302ada6aeb18028b61b4dc19bbd3615b408301527f0e1f908007a5c2cc934426c26de7206c53fa10c79d63ef52ee91bfb568c72fbd615b60830152614c20820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f2c7823f99cb2adb716becb960914ffa1d6e2f257875fdd03c2bee52ef571d41e615c208301527f09ab83ebc6803e65b2e6831c8706d9a134f6b1cf6f6ec5c2697afee095320ee1615c40830152614c40820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f2dc12c205152bfacc354c838225571172c215e01a64de6a2ca6665c70937ac58615d008301527f0449eb529f0038a2bd2f6c0b6213a70488b69b479d90a953579e4c9d45621b85615d20830152614c60820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f09a2ab3913a4770fd50f6ba9ec4ce0b3178b54d7bfca5b42fe7e8e1ce5cf60a9615de08301527f13ec31f94026569c4bb76e2c4ceaa3e6525438ffb4a7a69cde61f6d77b93bad7615e00830152614c80820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974615ec08301527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3615ee0830152614ca0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f02a9a77d8e6f6fd89f33ba56fe45f6f5c907e50ba28cdd4198acfb562eb21103615fa08301527f23abee68d83c2d6632576e5e95ca01a61e5e3e6d9438c2ac6428c8b6edfe2aba615fc0830152614cc0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f2cf36d36bfacbe1a8d8c626aefa75ac0feb46b725989a8e6fabed074bf9f6af76160808301527f060fded3ed5ec56d9e0064d73c472245a4c4b6ec371e9808692bf7f259d3b7306160a0830152614ce08201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa14169250610440820151616160830152610460820151616180830152614d008201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692506104808201516162408301526104a0820151616260830152614d20820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692506104c08201516163208301526104e0820151616340830152614d40820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa14169250610500820151616400830152610520820151616420830152614d60820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506105408201516164e0830152610560820151616500830152614d8082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506103a08201516165c08301526103c08201516165e0830152614da082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa14169250610ac08201516166a0830152610ae08201516166c0830152614de082015181036166e08301525081600160406166a0840160606166a0860160075afa141691506166208101516167008201526166408101516167208201526166a08101516167408201526166c0810151616760820152816001604061670084016080616700860160065afa14169150610b60810151616780820152610b808101516167a0820152614e008101516167c0820152816001604061678084016060616780860160075afa141691506167008101516167e08201526167208101516168008201526167808101516168208201526167a081015161684082015281600160406167e0840160806167e0860160065afa141691506167e08101516168608201526168008101516168808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26168a08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6168c08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6168e08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa616900820152610b60810151616920820152610b808101516169408201527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6169608201527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6169808201527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c1456169a08201527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff6169c082015281600160206168608401610180616860860160085afa61686093909301516001149214161691505092915050565b604051806169c0016040528061034e906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e5c57614e5c614e1d565b604052919050565b600082601f830112614e7557600080fd5b813567ffffffffffffffff811115614e8f57614e8f614e1d565b614ea2601f8201601f1916602001614e33565b818152846020838601011115614eb757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614ee757600080fd5b823567ffffffffffffffff80821115614eff57600080fd5b818501915085601f830112614f1357600080fd5b8135602082821115614f2757614f27614e1d565b8160051b614f36828201614e33565b928352848101820192828101908a851115614f5057600080fd5b958301955b84871015614f6e57863582529583019590830190614f55565b9750505086013592505080821115614f8557600080fd5b50614f9285828601614e64565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220d4b2dc8798bab17b65a2e72c3cd13b07b4a58aae366a77784852333c75aa78b964736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bd205a9014610030575b600080fd5b61004361003e366004614ed4565b610057565b604051901515815260200160405180910390f35b60006001610063614dfd565b600080516020614fbd8339815191526100d9565b600080516020614f9d8339815191528083108183101690838009600080516020614f9d833981519152838409600080516020614f9d8339815191528482099050600080516020614f9d8339815191526003820891909114919091169392505050565b8060208701510660208301528060408701510660408301528060608701510660608301527eae99b137916ff4220b0da7179a4601301c82346fc665cd3369a54e1f02d4ea6000830152602085015180608084015260408601518060a0850152846101438284610077565b169450505060608501518060c084015260808601518060e0850152846101698284610077565b169450505060a08501518061010084015260c086015180610120850152846101918284610077565b16945050506101406000830120610140830152610140820151818106610160840152806101808401525060e0850151806101a0840152610100860151806101c0850152846101df8284610077565b1694505050610120850151806101e084015261014086015180610200850152846102098284610077565b60a061018087012061022087018190528581066102408801526102608701521694506001915050610280830153602161026083012061028083018190528181066102a08401526102c08301526101608501516102e0830181905261018086015161030084018190528461027c8284610077565b16945050506101a0850151806103208401526101c086015180610340850152846102a68284610077565b16945050506101e08501518061036084015261020086015180610380850152846102d08284610077565b1694505050610220850151806103a0840152610240860151806103c0850152846102fa8284610077565b16945050506101206102c08301206103e08301526103e0820151818106610400840152806104208401525061026085015180610440840152610280860151806104608501528461034a8284610077565b16945050506102a0850151806104808401526102c0860151806104a0850152846103748284610077565b16945050506102e0850151806104c0840152610300860151806104e08501528461039e8284610077565b16945050506103208501518061050084015261034086015180610520850152846103c88284610077565b16945050506103608501518061054084015261038086015180610560850152846103f28284610077565b16945050506101606104208301206105808301526105808201518181066105a0840152806105c084015250806103a0860151066105e0830152806103c086015106610600830152806103e08601510661062083015280610400860151066106408301528061042086015106610660830152806104408601510661068083015280610460860151066106a083015280610480860151066106c0830152806104a0860151066106e0830152806104c086015106610700830152806104e08601510661072083015280610500860151066107408301528061052086015106610760830152806105408601510661078083015280610560860151066107a083015280610580860151066107c0830152806105a0860151066107e0830152806105c086015106610800830152806105e08601510661082083015280610600860151066108408301528061062086015106610860830152806106408601510661088083015280610660860151066108a083015280610680860151066108c0830152806106a0860151066108e0830152806106c086015106610900830152806106e08601510661092083015280610700860151066109408301528061072086015106610960830152806107408601510661098083015280610760860151066109a083015280610780860151066109c0830152806107a0860151066109e08301526104406105c0830120610a00830152610a00820151818106610a2084015280610a40840152506001610a608301536021610a40830120610a608301819052818106610a80840152610aa08301526107c0850151610ac083018190526107e0860151610ae084018190528461065f8284610077565b16945050506060610aa0830120610b00830152610b00820151818106610b2084015280610b408401525061080085015180610b6084015261082086015180610b80850152846106ae8284610077565b1694505050806105a08301516105a084015109610ba0830181905281908009610bc0830181905281908009610be0830181905281908009610c00830181905281908009610c20830181905281908009610c40830181905281908009610c60830181905281908009610c80830181905281908009610ca0830181905281908009610cc0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610cc084015108610ce0830152807f3058355f447953c1ade231a513e0f80710e9db4e679b02351f90fd168b040001610ce084015109610d00830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb26610d0084015109610d20830152807f1a6cb0b91da01e6d7a1e7d76eeef7de63954cd24b5a8c2b95ad8712f455b04db6105a084015108610d40830152807f03b743d74fd9ddb41f920179ac30e04b0ebd93e580b9c0b50061087904110bd4610d0084015109610d60830152807f2cad0a9b9157c27598be443cd550781219765462f8ffafdc4380ed1aebeef42d6105a084015108610d80830152807f1f4d7180df5014849825f3c9b0e89d79432c51f48eb5846ae63b433f28aba10b610d0084015109610da0830152807f1116dcf201e18ba5202a51ecd098bae3e5079653eb03ec265da6b254c7545ef66105a084015108610dc0830152807f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d302610d0084015109610de0830152807f0daef86f88c440658be430f38559b834662c0dbd4d47a55d6e97fb49c41a2cff6105a084015108610e00830152807f096b9f8b8598b7c387fb69abf236b0d5e04e24d275ee98244443eda5d3bc4035610d0084015109610e20830152807f26f8aee75b98e8663054dc0a8f4aa78747e5c37603cad86cff9e07ee1c43bfcc6105a084015108610e40830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e3610d0084015109610e60830152807f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1e6105a084015108610e80830152806001610d0084015109610ea0830152807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a084015108610ec0830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d610d0084015109610ee0830152807f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44846105a084015108610f00830152807f0dd30b9ad8c173555d2a33029bc807ac165b61281e9054a173af7ff4e4fc88fc610d0084015109610f20830152807f229142d808702cd45b2612b3e5b950b111d887205b291befd032759f0b0377056105a084015108610f40830152610d408201518181610d8085015109905080610f608401528181610dc085015109905080610f808401528181610e0085015109905080610fa08401528181610e4085015109905080610fc08401528181610e8085015109905080610fe08401528181610ec0850151099050806110008401528181610f00850151099050806110208401528181610f40850151099050806110408401528181610ce0850151099050806110608401525060206110a083015260206110c083015260206110e08301526110608201516111008301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611120830152600080516020614fbd8339815191526111408301528260016020611080850160c06110a0870160055afa141692506110808201516000610ce08401519050828261104086015109610ce0850152828282099150610f408401519050828261102086015109610f40850152828282099150610f008401519050828261100086015109610f00850152828282099150610ec084015190508282610fe086015109610ec0850152828282099150610e8084015190508282610fc086015109610e80850152828282099150610e4084015190508282610fa086015109610e40850152828282099150610e0084015190508282610f8086015109610e00850152828282099150610dc084015190508282610f6086015109610dc0850152828282099150610d8084015190508282610d4086015109610d8085015282828209610d408501819052610d208501518493509091500961116083015280610d80830151610d608401510961118083015280610dc0830151610da0840151096111a083015280610e00830151610de0840151096111c083015280610e40830151610e20840151096111e083015280610e80830151610e608401510961120083015280610ec0830151610ea08401510961122083015280610f00830151610ee08401510961124083015280610f40830151610f20840151096112608301528060208301516112208401510981818360408601516112408701510908905081818360608601516112608701510908611280840152506107208201516105e0830151829190086112a08301819052819080096112c08301819052819080096112e0830152806112e08301516112a084015109611300830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad561130084015109611320830152806107408301516106008401510861134083018190528190800961136083018190528190800961138083015280611380830151611340840151096113a0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e86113a0840151096113c0830152806113c0830151611320840151086113e08301528061062083015182036113e08401510861140083018190526107a08301518291096114208301528061142083015161040084015109611440830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961130084015109611460830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c86113a08401510961148083015280611480830151611460840151086114a08301528061064083015182036114a0840151086114c083018190526107a08301518291096114e0830152806114e08301516114408401510861150083015280611500830151610400840151096115208301528061066083015182036113008401510861154083018190526107c0830151829109611560830152806115608301516115208401510861158083015280611580830151610400840151096115a0830152807f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad5610660840151096115c0830152807f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e8611340840151096115e0830152806115e08301516115c08401510861160083018190526106e08301518291086116208301819052819080096116408301819052819080096116608301528061166083015161162084015109611680830152807f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610620840151096116a0830152807f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe610640840151096116c0830152806116c08301516116a0840151086116e0830152806116e083015182036116808401510861170083018190526107c0830151829109611720830152806117208301516115a0840151086117408301528061174083015161040084015109611760830152807f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff961066084015109611780830152807f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c8611340840151096117a0830152806117a0830151611780840151086117c083018190526107008301518291086117e0830152807f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb0261062084015109611800830152807f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6106408401510961182083015280611820830151611800840151086118408301528061184083015182036117e08401510861186083018190526107c083015182910961188083015280611880830151611760840151086118a0830152806118a0830151610400840151096118c08301528061078083015182036001086118e0830181905261078083015182910961190083015280610780830151820360020861192083018190526119008301518291096119408301528061078083015182036003086119608301819052611940830151829109611980830152806105e08301516106a0840151086119a08301528061062083015182036119a0840151086119c083018190526119808301518291096119e0830152806119e08301516118c084015108611a0083015280611a0083015161040084015109611a2083015280610640830151820361068084015108611a408301819052611980830151829109611a6083015280611a60830151611a2084015108611a8083015280611a8083015161040084015109611aa08301528061078083015161192084015109611ac083015280611ac083015161196084015109611ae0830152806107808301518203600408611b008301819052611ae0830151829109611b2083015280611b2083015161066084015109611b40830152806106608301518203600108611b608301819052611b40830151829109611b8083015280611b80830151611aa084015108611ba083015280611ba083015161040084015109611bc083015280610660830151600209611be0830152806105e0830151820361060084015108611c008301819052611be0830151829109611c20830152806105e0830151820361062084015108611c4083015280611c408301518203611c2084015108611c6083015280610640830151820361060084015108611c8083015280611c808301518203611c6084015108611ca08301819052611b20830151829109611cc083015280611cc0830151611bc084015108611ce083015280611ce083015161040084015109611d008301528061190083015161196084015109611d2083015280611d20830151611b0084015109611d40830152806106008301516105e084015108611d60830152806106608301518203611d6084015108611d808301819052611d40830151829109611da083015280611da0830151611d0084015108611dc083015280611dc083015161040084015109611de08301819052611da0830151829108611e0083015280611e0083015161040084015109611e2083015280611940830151611b0084015109611e408301528061060083015182036105e084015108611e6083015280600160701b611e6084015108611e80830152806106608301518203611e8084015108611ea08301819052611e40830151829109611ec083015280611ec0830151611e2084015108611ee083015280611ee083015161040084015109611f00830152806108c08301518203600108611f208301819052611220830151829109611f4083015280611f40830151611f0084015108611f6083015280611f6083015161040084015109611f8083015261092082015181908009611fa0830152806109208301518203611fa084015108611fc08301819052611160830151829109611fe083015280611fe0830151611f80840151086120008301528061200083015161040084015109612020830152806109008301518203610920840151086120408301819052611220830151829109612060830152806120608301516120208401510861208083015280612080830151610400840151096120a08301528061116083015182036001086120c0830152806111a0830151611180840151086120e083018190526111c083015182910861210083018190526111e083015182910861212083018190526112008301518291086121408301528061214083015182036120c0840151086121608301528061024083015161080084015109612180830152806121808301516106e0840151086121a083018190526102a08301518291086121c083015280610240830151610820840151096121e0830152806121e08301516105e08401510861220083018190526102a083015182910861222083018190526121c08301518291096122408301528061024083015161084084015109612260830152806122608301516106008401510861228083018190526102a08301518291086122a083018190526122408301518291096122c083015280610240830151610860840151096122e0830152806122e08301516107008401510861230083018190526102a083015182910861232083018190526122c083015182910961234083018190526108e083015182910961236083015280610240830151600109612380830152806123808301516105a0840151096123a0830152806123a08301516106e0840151086123c083018190526102a08301518291086123e0830152806102408301517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a209612400830152806124008301516105a084015109612420830152806124208301516105e08401510861244083018190526102a083015182910861246083018190526123e0830151829109612480830152806102408301517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b096124a0830152806124a08301516105a0840151096124c0830152806124c0830151610600840151086124e083018190526102a08301518291086125008301819052612480830151829109612520830152806102408301517f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e5209612540830152806125408301516105a084015109612560830152806125608301516107008401510861258083018190526102a08301518291086125a083018190526125208301518291096125c083018190526108c08301518291096125e0830152806125e08301518203612360840151086126008301819052612160830151829109612620830152806126208301516120a0840151086126408301528061264083015161040084015109612660830152806102408301516108808401510961268083015280612680830151610660840151086126a083018190526102a08301518291086126c0830152806102408301516108a0840151096126e0830152806126e08301516112808401510861270083018190526102a083015182910861272083018190526126c08301518291096127408301819052610940830151829109612760830152806102408301517ea136ba13afa6c83eb7b82fb370e228e74155e48fb8f1c1cfc33fb0da8afb4209612780830152806127808301516105a0840151096127a0830152806127a0830151610660840151086127c083018190526102a08301518291086127e0830152806102408301517f2eb9750dce545f17d492058dd201a1251ff3d9077864583d44eaf9be9008699d09612800830152806128008301516105a084015109612820830152806128208301516112808401510861284083018190526102a083015182910861286083018190526127e083015182910961288083018190526109208301518291096128a0830152806128a08301518203612760840151086128c083018190526121608301518291096128e0830152806128e08301516126608401510861290083015280612900830151610400840151096129208301528061096083015182036001086129408301819052611220830151829109612960830152806129608301516129208401510861298083015280612980830151610400840151096129a0830152610960820151819080096129c08301528061096083015182036129c0840151086129e08301819052611160830151829109612a0083015280612a008301516129a084015108612a2083015280612a2083015161040084015109612a40830152806102408301516109a084015108612a608301819052610980830151829109612a80830152806102a08301516109e084015108612aa08301819052612a80830151829109612ac0830152806106c083015161010009612ae083015280612ae0830151820361066084015108612b008301819052610760830151829109612b208301819052610240830151829108612b408301819052610960830151829109612b60830152806102a083015161072084015108612b808301819052612b60830151829109612ba083015280612ba08301518203612ac084015108612bc08301819052612160830151829109612be083015280612be0830151612a4084015108612c0083015280612c0083015161040084015109612c20830152806109e083015182036109a084015108612c408301819052611220830151829109612c6083015280612c60830151612c2084015108612c8083015280612c8083015161040084015109612ca083015280612160830151612c4084015109612cc0830152806109c083015182036109a084015108612ce08301819052612cc0830151829109612d0083015280612d00830151612ca084015108612d20830152610cc082015181908009612d408301819052610cc0830151829109612d608301819052610cc0830151829109612d808301819052610cc0830151829109612da083015280610cc0830151600109612dc083015280612d40830151600109612de083015280612d60830151600109612e0083015280612d80830151600109612e2083015280610ce0830151612d2084015109612e40830152806105a0830151610ba084015109612e608301528060016105a084015109612e8083015280612e808301518203610b2084015108612ea0830152807f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e36105a084015109612ec083015280612ec08301518203610b2084015108612ee0830152807f15f79db9c39181bc3e31c83f9291da76eedf1b23c410add7e9098464aaa4fb266105a084015109612f0083015280612f008301518203610b2084015108612f20830152807f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7d6105a084015109612f4083015280612f408301518203610b2084015108612f6083015280817f2b0bd16731aaf34928c0661ba43310fbbf44baa457b980ce19affba7315792a4610ba085015109610b2084015109818183847f05587d0baf86ace08f8fdf9add4e476168ef2da421ffefc32a31f9ecbea86d5d610ba0880151096105a08701510908905080612f808401525080817f1e42214ea9b2db33296ba55096815a0a6d468af715ccfa9fab93b1e3701b7f62610ba085015109610b2084015109818183847f1648cc055b11af4e0f62923d9627e377b1d413c0864af4963a826fcc6a0231fa610ba0880151096105a08701510908905080612fa08401525080817f2960d84a95d8f00f740a3d1478feb6d4b196e34bf86b62b75041b14b389d49ce610ba085015109610b2084015109818183847f21fe615ace99028841c84393e39435ea26675e494fd4886263e6fedd3cba1f16610ba0880151096105a08701510908612fc084015250612ea08201518190600109612fe08301819052612f608301518291096130008301819052612ee083015182910961302083015280817f058b4c5410b55d7e9e58c9598eb5857e76fdfe156a9e5b1d86d91c00e63b44856105a085015109610b2084015109818183847f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a0880151096105a087015109089050806130408401525080817f2ad9021ed07c42ab19f77c5cf2cbd2deb135ea330f1b1573bd08d99309c4bb7c6105a085015109610b2084015109818183847f1d05f683f7bacf55bccd495a5703cb329ada890af08ac0d24959599e24c832816105a0880151096105a087015109089050806130608401525080817f23af40e47e2f59a03809484a29d5e3afbf105f1fa100de8be21295a92fa75534610ba085015109610b2084015109818183847f0cb50d8e630246898046fd6c57ab74ad69238928d8b8920561cf5feac058aacd610ba0880151096105a087015109089050806130808401525080817f259eb1d15d2e74dc1a22c32210de87566d7ae67bcc859ce1e33117e171cbbcd2610ba085015109610b2084015109818183847f0705f7901a0ba3736dff0830a813cdc7350ce79c852ba2d86353d0ff84d80bb5610ba0880151096105a087015109089050806130a08401525080817f2a6bbeb56332f220c30fcaac737fd885c3596480f0ca2ff07d2733561911b7bd610ba085015109610b2084015109818183847f26a0f84d76444b5e0a60f8966cc6c88c09cf0713bd044ba9fe6c9b2e8b6263b7610ba0880151096105a087015109086130c084015250612f20820151613000830151829190096130e083015280817f2580851320f595ca8a679cc2157d8b7d4846bc8eed1b25b092d6dfa64b1c4e1f6105a085015109610b2084015109818183847f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a0880151096105a087015109089050806131008401525080817f0ae3c95fc03c0a5f2de8a8f46c03ccdfdfed2bb98c9e4ae0b10b15eda4e3b1e26105a085015109610b2084015109818183847f017829d43aa3529ba5ed3f4879cd1c09ff9f06e716afb2bc6cc72847d12771ae6105a0880151096105a0870151090861312084015250612ee0820151612fe083015182919009613140830152806001610b20840151098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006105a0870151090861316084015250612f80820151612fa083015182908290099050806131808401528181612fc0850151099050806131a08401528181613040850151099050806131c08401528181613060850151099050806131e084015281816130008501510990508061320084015281816130808501510990508061322084015281816130a08501510990508061324084015281816130c08501510990508061326084015281816130e0850151099050806132808401528181613100850151099050806132a08401528181613120850151099050806132c08401528181613140850151099050806132e08401528181613160850151099050806133008401528181612fe085015109905080613320840152506020613360830152602061338083015260206133a08301526133208201516133c08301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6133e0830152600080516020614fbd8339815191526134008301528260016020613340850160c0613360870160055afa141692506133408201516000612fe08401519050828261330086015109612fe0850152828282099150613160840151905082826132e086015109613160850152828282099150613140840151905082826132c086015109613140850152828282099150613120840151905082826132a08601510961312085015282828209915061310084015190508282613280860151096131008501528282820991506130e084015190508282613260860151096130e08501528282820991506130c084015190508282613240860151096130c08501528282820991506130a084015190508282613220860151096130a08501528282820991506130808401519050828261320086015109613080850152828282099150613000840151905082826131e086015109613000850152828282099150613060840151905082826131c086015109613060850152828282099150613040840151905082826131a086015109613040850152828282099150612fc08401519050828261318086015109612fc0850152828282099150612fa084015190508282612f8086015109612fa085015282828209612f808501819052612fa085015190925083915082900890508181612fc0850151086134208401525061300082015161302083015182919009613440830152613040820151818161306085015108613460840152506130e08201516130208301518291900961348083015261308082015181816130a085015108905081816130c0850151086134a084015250613140820151613020830151829190096134c08301526131008201518181613120850151086134e084015250612fe082015161302083015182919009613500830152613160820151806135208401525061342082015181816134608501510990508061354084015281816134a08501510990508061356084015281816134e0850151099050806135808401528181613520850151099050806135a08401525060206135e0830152602061360083015260206136208301526135a08201516136408301527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff613660830152600080516020614fbd83398151915261368083015282600160206135c0850160c06135e0870160055afa141692506135c0820151600061352084015190508282613580860151096135208501528282820991506134e084015190508282613560860151096134e08501528282820991506134a084015190508282613540860151096134a08501528282820991506134608401519050828261342086015109613460850152828282096134208501525050613460820151613440830151829190096136a0830152806134a0830151613480840151096136c0830152806134e08301516134c0840151096136e08301528061352083015161350084015109613700830152610a20820151819080096137208301819052610a208301518291096137408301819052610a208301518291096137608301819052610a208301518291096137808301819052610a208301518291096137a08301819052610a208301518291096137c08301819052610a208301518291096137e08301819052610a208301518291096138008301819052610a208301518291096138208301819052610a208301518291096138408301819052610a208301518291096138608301819052610a208301518291096138808301819052610a208301518291096138a08301819052610a208301518291096138c08301819052610a208301518291096138e08301819052610a20830151829109613900830152610a80820151819080096139208301819052610a808301518291096139408301819052610a808301518291096139608301819052610a8083015182910961398083015280612f808301516105e084015109818183612fa086015161062087015109089050818183612fc08601516106a087015109086139a0840181905261342084015183925090096139c08301528060016139c08401518303096139e083015280612f8083015161060084015109818183612fa086015161064087015109089050818183612fc08601516106808701510908613a0084018190526134208401518392509009613a208301819052610a208301518291820309613a4083015280610a20830151600109613a6083015280613a408301516139e084015108613a80830152806001613a8084015109613aa0830152806001613a6084015109613ac083015280613440830151600109613ae083015280613040830151610660840151098181836130608601516106c08701510908613b0084018190526136a08401518392509009613b20830152806001613b20840151830309613b40830152806001613ae084015109613b6083015280613040830151610920840151098181836130608601516109408701510908613b8084018190526136a08401518392509009613ba08301819052610a208301518291820309613bc083015280610a20830151613ae084015109613be083015280613bc0830151613b4084015108613c0083015280613040830151610960840151098181836130608601516109808701510908613c2084018190526136a08401518392509009613c4083018190526137208301518291820309613c6083015280613720830151613ae084015109613c8083015280613c60830151613c0084015108613ca08301819052610a80830151829109613cc083015280610a80830151613b6084015109613ce083015280610a80830151613be084015109613d0083015280610a80830151613c8084015109613d2083015280613cc0830151613aa084015108613d4083015280613480830151600109613d60830152806130808301516108c0840151098181836130a08601516108e0870151090890508181836130c08601516109008701510908613d8084018190526136c08401518392509009613da0830152806001613da0840151830309613dc0830152806001613d6084015109613de083015280613920830151613dc084015109613e0083015280613920830151613de084015109613e2083015280613e00830151613d4084015108613e40830152806134c0830151600109613e60830152806131008301516109a0840151098181836131208601516109c08701510908613e8084018190526136e08401518392509009613ea0830152806001613ea0840151830309613ec0830152806001613e6084015109613ee083015280613940830151613ec084015109613f0083015280613940830151613ee084015109613f2083015280613f00830151613e4084015108613f4083015280613500830151600109613f60830152806131608301516109e084015109613f808301819052613700830151829109613fa0830152806001613fa0840151830309613fc0830152806001613f6084015109613fe0830152806131608301516106e08401510961400083018190526137008301518291096140208301819052610a20830151829182030961404083015280610a20830151613f608401510961406083015280614040830151613fc08401510861408083015280613160830151610700840151096140a083018190526137008301518291096140c0830181905261372083015182918203096140e083015280613720830151613f6084015109614100830152806140e083015161408084015108614120830152806131608301516107208401510961414083018190526137008301518291096141608301819052613740830151829182030961418083015280613740830151613f60840151096141a083015280614180830151614120840151086141c083015280613160830151610740840151096141e083018190526137008301518291096142008301819052613760830151829182030961422083015280613760830151613f6084015109614240830152806142208301516141c084015108614260830152806131608301516107608401510961428083018190526137008301518291096142a0830181905261378083015182918203096142c083015280613780830151613f60840151096142e0830152806142c0830151614260840151086143008301528061316083015161078084015109614320830181905261370083015182910961434083018190526137a08301518291820309614360830152806137a0830151613f608401510961438083015280614360830151614300840151086143a0830152806131608301516107a0840151096143c083018190526137008301518291096143e083018190526137c08301518291820309614400830152806137c0830151613f6084015109614420830152806144008301516143a084015108614440830152806131608301516107c084015109614460830181905261370083015182910961448083018190526137e083015182918203096144a0830152806137e0830151613f60840151096144c0830152806144a0830151614440840151086144e0830152806131608301516108008401510961450083018190526137008301518291096145208301819052613800830151829182030961454083015280613800830151613f6084015109614560830152806145408301516144e08401510861458083015280613160830151610820840151096145a083018190526137008301518291096145c0830181905261382083015182918203096145e083015280613820830151613f6084015109614600830152806145e083015161458084015108614620830152806131608301516108408401510961464083018190526137008301518291096146608301819052613840830151829182030961468083015280613840830151613f60840151096146a083015280614680830151614620840151086146c083015280613160830151610860840151096146e083018190526137008301518291096147008301819052613860830151829182030961472083015280613860830151613f6084015109614740830152806147208301516146c084015108614760830152806131608301516108808401510961478083018190526137008301518291096147a0830181905261388083015182918203096147c083015280613880830151613f60840151096147e0830152806147c083015161476084015108614800830152806131608301516108a084015109614820830181905261370083015182910961484083018190526138a08301518291820309614860830152806138a0830151613f608401510961488083015280614860830151614800840151086148a083015280613500830151612dc0840151096148c083015280613500830151612de0840151096148e083015280613500830151612e008401510961490083015280613500830151612e208401510961492083015280613160830151612e4084015109614940830181905261370083015182910961496083018190526138c08301518291820309614980830152806138c0830151613f60840151096149a0830152806138c08301516148c0840151096149c0830152806138c08301516148e0840151096149e0830152806138c083015161490084015109614a00830152806138c083015161492084015109614a20830152806149808301516148a084015108614a40830152806131608301516107e084015109614a608301819052613700830151829109614a8083018190526138e08301518291820309614aa0830152806138e0830151613f6084015109614ac083015280614aa0830151614a4084015108614ae08301819052613960830151829109614b0083015280613960830151613fe084015109614b208301528061396083015161406084015109614b408301528061396083015161410084015109614b60830152806139608301516141a084015109614b808301528061396083015161424084015109614ba0830152806139608301516142e084015109614bc08301528061396083015161438084015109614be08301528061396083015161442084015109614c00830152806139608301516144c084015109614c208301528061396083015161456084015109614c408301528061396083015161460084015109614c60830152806139608301516146a084015109614c808301528061396083015161474084015109614ca0830152806139608301516147e084015109614cc08301528061396083015161488084015109614ce0830152806139608301516149a084015109614d00830152806139608301516149c084015109614d20830152806139608301516149e084015109614d4083015280613960830151614a0084015109614d6083015280613960830151614a2084015109614d8083015280613960830151614ac084015109614da083015280614b00830151613f4084015108614dc083015280613020830151600109614de083015280610b20830151600109614e008301526001614e2083018181526002614e40850152614dc0840151614e6085015284919060409060608160075afa14169250614e20820151614e80830152614e40820151614ea08301526080820151614ec083015260a0820151614ee08301528260016040614e8085016080614e80870160065afa1416925060c0820151614f0083015260e0820151614f20830152613ac0820151614f408301528260016040614f0085016060614f00870160075afa14169250614e80820151614f60830152614ea0820151614f80830152614f00820151614fa0830152614f20820151614fc08301528260016040614f6085016080614f60870160065afa14169250610100820151614fe0830152610120820151615000830152613ce08201516150208301528260016040614fe085016060614fe0870160075afa14169250614f60820151615040830152614f80820151615060830152614fe08201516150808301526150008201516150a0830152826001604061504085016080615040870160065afa141692506103208201516150c08301526103408201516150e0830152613d0082015161510083015282600160406150c0850160606150c0870160075afa141692506150408201516151208301526150608201516151408301526150c08201516151608301526150e0820151615180830152826001604061512085016080615120870160065afa141692506103608201516151a08301526103808201516151c0830152613d208201516151e083015282600160406151a0850160606151a0870160075afa141692506151208201516152008301526151408201516152208301526151a08201516152408301526151c0820151615260830152826001604061520085016080615200870160065afa141692506102e08201516152808301526103008201516152a0830152613e208201516152c0830152826001604061528085016060615280870160075afa141692506152008201516152e08301526152208201516153008301526152808201516153208301526152a082015161534083015282600160406152e0850160806152e0870160065afa141692506101a08201516153608301526101c0820151615380830152613f208201516153a0830152826001604061536085016060615360870160075afa141692506152e08201516153c08301526153008201516153e083015261536082015161540083015261538082015161542083015282600160406153c0850160806153c0870160065afa141692506101e0820151615440830152610200820151615460830152614b20820151615480830152826001604061544085016060615440870160075afa141692506153c08201516154a08301526153e08201516154c08301526154408201516154e083015261546082015161550083015282600160406154a0850160806154a0870160065afa141692507f0655d62979dc062dc1e8c15334bf17cf5c7e6352219c0bd0b0cc039598d9a6696155208301527f019589d3002f6a0ded46a69053f0c05e7a7ca45339b3d2bae85d00f26ac0f33e615540830152614b40820151615560830152826001604061552085016060615520870160075afa141692506154a08201516155808301526154c08201516155a08301526155208201516155c08301526155408201516155e0830152826001604061558085016080615580870160065afa141692507f1eab999592385208b42a12dcc047763ee5cf12052eb4b0d9a7a286e043f3df9f6156008301527f18887eb3c646ffd4961226c91bac9661004798b1fc6a39c43f9a6d1d03767194615620830152614b60820151615640830152826001604061560085016060615600870160075afa141692506155808201516156608301526155a08201516156808301526156008201516156a08301526156208201516156c0830152826001604061566085016080615660870160065afa141692507f076806058b02e1b5e99b2f2e8eee613194f8df73481659f5938baacd64e4d7b86156e08301527f05ae81644b244dceea5350a84a79cbf0a199bbd6c1fad9887423f8c8048e6039615700830152614b8082015161572083015282600160406156e0850160606156e0870160075afa141692506156608201516157408301526156808201516157608301526156e08201516157808301526157008201516157a0830152826001604061574085016080615740870160065afa141692507f0438873fc00231ae527efcf74d9092f5059dfa05275cbe7381e948fe3b7b61d86157c08301527f03c0f314c93403792ba86ec3841b3080f2f7cd092c6bcb632cdbc2122a13cdef6157e0830152614ba082015161580083015282600160406157c0850160606157c0870160075afa141692506157408201516158208301526157608201516158408301526157c08201516158608301526157e0820151615880830152826001604061582085016080615820870160065afa141692507f2b12b132a6261ad60249147599cae0d5b3547e510deabba65526d130f04f24026158a08301527f13e3c02ce00f6b7e00d5b099eda5f1155956ae83899a2d59cefcb00dad66a7f66158c0830152614bc08201516158e083015282600160406158a0850160606158a0870160075afa141692506158208201516159008301526158408201516159208301526158a08201516159408301526158c0820151615960830152826001604061590085016080615900870160065afa141692507f0ed83370277e0fd35e8258dd5630ce0ce3491fdf7e166d293745635b0cc4eba56159808301527f03994e7e77ad58072b78757700ab0b79247f2e462b0cf6a5a18b607414c095db6159a0830152614be08201516159c0830152826001604061598085016060615980870160075afa141692506159008201516159e0830152615920820151615a00830152615980820151615a208301526159a0820151615a4083015282600160406159e0850160806159e0870160065afa141692507f23ba4bc49baab563e9d5bf07da231a4496d35b6bc782dbbd76135fe44c31cbcf615a608301527f28b88097e7edf1b2904f6c25c1e30ca0e38c74a52125b2995c4cf0a750683854615a80830152614c00820151615aa08301528260016040615a6085016060615a60870160075afa141692506159e0820151615ac0830152615a00820151615ae0830152615a60820151615b00830152615a80820151615b208301528260016040615ac085016080615ac0870160065afa141692507f17dcbba0bbe2d24566de620998f62ff54ea5302ada6aeb18028b61b4dc19bbd3615b408301527f0e1f908007a5c2cc934426c26de7206c53fa10c79d63ef52ee91bfb568c72fbd615b60830152614c20820151615b808301528260016040615b4085016060615b40870160075afa14169250615ac0820151615ba0830152615ae0820151615bc0830152615b40820151615be0830152615b60820151615c008301528260016040615ba085016080615ba0870160065afa141692507f2c7823f99cb2adb716becb960914ffa1d6e2f257875fdd03c2bee52ef571d41e615c208301527f09ab83ebc6803e65b2e6831c8706d9a134f6b1cf6f6ec5c2697afee095320ee1615c40830152614c40820151615c608301528260016040615c2085016060615c20870160075afa14169250615ba0820151615c80830152615bc0820151615ca0830152615c20820151615cc0830152615c40820151615ce08301528260016040615c8085016080615c80870160065afa141692507f2dc12c205152bfacc354c838225571172c215e01a64de6a2ca6665c70937ac58615d008301527f0449eb529f0038a2bd2f6c0b6213a70488b69b479d90a953579e4c9d45621b85615d20830152614c60820151615d408301528260016040615d0085016060615d00870160075afa14169250615c80820151615d60830152615ca0820151615d80830152615d00820151615da0830152615d20820151615dc08301528260016040615d6085016080615d60870160065afa141692507f09a2ab3913a4770fd50f6ba9ec4ce0b3178b54d7bfca5b42fe7e8e1ce5cf60a9615de08301527f13ec31f94026569c4bb76e2c4ceaa3e6525438ffb4a7a69cde61f6d77b93bad7615e00830152614c80820151615e208301528260016040615de085016060615de0870160075afa14169250615d60820151615e40830152615d80820151615e60830152615de0820151615e80830152615e00820151615ea08301528260016040615e4085016080615e40870160065afa141692507f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974615ec08301527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3615ee0830152614ca0820151615f008301528260016040615ec085016060615ec0870160075afa14169250615e40820151615f20830152615e60820151615f40830152615ec0820151615f60830152615ee0820151615f808301528260016040615f2085016080615f20870160065afa141692507f02a9a77d8e6f6fd89f33ba56fe45f6f5c907e50ba28cdd4198acfb562eb21103615fa08301527f23abee68d83c2d6632576e5e95ca01a61e5e3e6d9438c2ac6428c8b6edfe2aba615fc0830152614cc0820151615fe08301528260016040615fa085016060615fa0870160075afa14169250615f20820151616000830152615f40820151616020830152615fa0820151616040830152615fc0820151616060830152826001604061600085016080616000870160065afa141692507f2cf36d36bfacbe1a8d8c626aefa75ac0feb46b725989a8e6fabed074bf9f6af76160808301527f060fded3ed5ec56d9e0064d73c472245a4c4b6ec371e9808692bf7f259d3b7306160a0830152614ce08201516160c0830152826001604061608085016060616080870160075afa141692506160008201516160e08301526160208201516161008301526160808201516161208301526160a082015161614083015282600160406160e0850160806160e0870160065afa14169250610440820151616160830152610460820151616180830152614d008201516161a0830152826001604061616085016060616160870160075afa141692506160e08201516161c08301526161008201516161e083015261616082015161620083015261618082015161622083015282600160406161c0850160806161c0870160065afa141692506104808201516162408301526104a0820151616260830152614d20820151616280830152826001604061624085016060616240870160075afa141692506161c08201516162a08301526161e08201516162c08301526162408201516162e083015261626082015161630083015282600160406162a0850160806162a0870160065afa141692506104c08201516163208301526104e0820151616340830152614d40820151616360830152826001604061632085016060616320870160075afa141692506162a08201516163808301526162c08201516163a08301526163208201516163c08301526163408201516163e0830152826001604061638085016080616380870160065afa14169250610500820151616400830152610520820151616420830152614d60820151616440830152826001604061640085016060616400870160075afa141692506163808201516164608301526163a08201516164808301526164008201516164a08301526164208201516164c0830152826001604061646085016080616460870160065afa141692506105408201516164e0830152610560820151616500830152614d8082015161652083015282600160406164e0850160606164e0870160075afa141692506164608201516165408301526164808201516165608301526164e08201516165808301526165008201516165a0830152826001604061654085016080616540870160065afa141692506103a08201516165c08301526103c08201516165e0830152614da082015161660083015282600160406165c0850160606165c0870160075afa141692506165408201516166208301526165608201516166408301526165c08201516166608301526165e0820151616680830152826001604061662085016080616620870160065afa14169250610ac08201516166a0830152610ae08201516166c0830152614de082015181036166e08301525081600160406166a0840160606166a0860160075afa141691506166208101516167008201526166408101516167208201526166a08101516167408201526166c0810151616760820152816001604061670084016080616700860160065afa14169150610b60810151616780820152610b808101516167a0820152614e008101516167c0820152816001604061678084016060616780860160075afa141691506167008101516167e08201526167208101516168008201526167808101516168208201526167a081015161684082015281600160406167e0840160806167e0860160065afa141691506167e08101516168608201526168008101516168808201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26168a08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6168c08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6168e08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa616900820152610b60810151616920820152610b808101516169408201527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6169608201527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e6169808201527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c1456169a08201527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff6169c082015281600160206168608401610180616860860160085afa61686093909301516001149214161691505092915050565b604051806169c0016040528061034e906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e5c57614e5c614e1d565b604052919050565b600082601f830112614e7557600080fd5b813567ffffffffffffffff811115614e8f57614e8f614e1d565b614ea2601f8201601f1916602001614e33565b818152846020838601011115614eb757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614ee757600080fd5b823567ffffffffffffffff80821115614eff57600080fd5b818501915085601f830112614f1357600080fd5b8135602082821115614f2757614f27614e1d565b8160051b614f36828201614e33565b928352848101820192828101908a851115614f5057600080fd5b958301955b84871015614f6e57863582529583019590830190614f55565b9750505086013592505080821115614f8557600080fd5b50614f9285828601614e64565b915050925092905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220d4b2dc8798bab17b65a2e72c3cd13b07b4a58aae366a77784852333c75aa78b964736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} diff --git a/backend/src/contracts/abi/Summa.json b/backend/src/contracts/abi/Summa.json index fd7e3ec0..baed6e54 100644 --- a/backend/src/contracts/abi/Summa.json +++ b/backend/src/contracts/abi/Summa.json @@ -1 +1 @@ -{"_format":"hh-sol-artifact-1","contractName":"Summa","sourceName":"src/Summa.sol","abi":[{"inputs":[{"internalType":"contract IVerifier","name":"_solvencyVerifier","type":"address"},{"internalType":"contract IVerifier","name":"_inclusionVerifier","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"indexed":false,"internalType":"struct Summa.AddressOwnershipProof[]","name":"addressOwnershipProofs","type":"tuple[]"}],"name":"AddressOwnershipProofSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mstRoot","type":"uint256"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"}],"name":"SolvencyProofSubmitted","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressOwnershipProofs","outputs":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mstRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"ownershipProofByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Summa.AddressOwnershipProof[]","name":"_addressOwnershipProofs","type":"tuple[]"}],"name":"submitProofOfAddressOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mstRoot","type":"uint256"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"submitProofOfSolvency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"verifyInclusionProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"}],"name":"verifySolvencyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x60c06040523480156200001157600080fd5b50604051620016f3380380620016f38339810160408190526200003491620000c4565b6200003f3362000057565b6001600160a01b039182166080521660a052620000fc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000bf57600080fd5b919050565b60008060408385031215620000d857600080fd5b620000e383620000a7565b9150620000f360208401620000a7565b90509250929050565b60805160a0516115d1620001226000396000610a850152600061045e01526115d16000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610136578063a3c4bcf814610151578063c7ddca0e14610174578063c8e5814714610187578063f2fde38b1461019a57600080fd5b806323eb94a0146100a3578063413a9f2d146100d65780636c7684fe146100eb578063715018a61461010e5780637f3bfb2e14610116575b600080fd5b6100c36100b1366004610c28565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b6100e96100e4366004610d68565b6101ad565b005b6100fe6100f9366004610f22565b610444565b60405190151581526020016100cd565b6100e96104df565b6100c3610124366004610c28565b60036020526000908152604090205481565b6000546040516001600160a01b0390911681526020016100cd565b61016461015f366004610c28565b6104f3565b6040516100cd9493929190610fcc565b6100e9610182366004611024565b610753565b6100fe61019536600461117e565b6109fd565b6100e96101a83660046111eb565b610b05565b6101b5610b7e565b60015460000361022b5760405162461bcd60e51b815260206004820152603660248201527f5468652043455820686173206e6f74207375626d697474656420616e792061646044820152756472657373206f776e6572736869702070726f6f667360501b60648201526084015b60405180910390fd5b60008351600161023b9190611231565b67ffffffffffffffff81111561025357610253610c41565b60405190808252806020026020018201604052801561027c578160200160208202803683370190505b509050848160008151811061029357610293611244565b60200260200101818152505060005b845181101561038e578481815181106102bd576102bd611244565b602002602001015160200151516000141580156102f957508481815181106102e7576102e7611244565b60200260200101516000015151600014155b6103355760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b6044820152606401610222565b84818151811061034757610347611244565b602002602001015160400151828260016103619190611231565b8151811061037157610371611244565b6020908102919091010152806103868161125a565b9150506102a2565b506103998382610444565b6103d85760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b6044820152606401610222565b6000828152600360205260408120869055815183917f0473581c3cf437afc52207d88ce1541afbc7ce9fdb83b4d4d3b7214beed56ff59184919061041e5761041e611244565b602002602001015186604051610435929190611273565b60405180910390a25050505050565b604051630bd205a960e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610495908590879060040161130a565b602060405180830381865afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190611361565b90505b92915050565b6104e7610b7e565b6104f16000610bd8565b565b6001818154811061050357600080fd5b906000526020600020906004020160009150905080600001805461052690611383565b80601f016020809104026020016040519081016040528092919081815260200182805461055290611383565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050908060010180546105b490611383565b80601f01602080910402602001604051908101604052809291908181526020018280546105e090611383565b801561062d5780601f106106025761010080835404028352916020019161062d565b820191906000526020600020905b81548152906001019060200180831161061057829003601f168201915b50505050509080600201805461064290611383565b80601f016020809104026020016040519081016040528092919081815260200182805461066e90611383565b80156106bb5780601f10610690576101008083540402835291602001916106bb565b820191906000526020600020905b81548152906001019060200180831161069e57829003601f168201915b5050505050908060030180546106d090611383565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90611383565b80156107495780601f1061071e57610100808354040283529160200191610749565b820191906000526020600020905b81548152906001019060200180831161072c57829003601f168201915b5050505050905084565b61075b610b7e565b60005b81518110156109c257600082828151811061077b5761077b611244565b60200260200101516000015160405160200161079791906113bd565b60408051601f19818403018152918152815160209283012060008181526002909352912054909150801561080d5760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610222565b610818836001611231565b600083815260026020526040902055835160019085908590811061083e5761083e611244565b60209081029190910181015182546001810184556000938452919092208251600490920201908190610870908261141f565b5060208201516001820190610885908261141f565b506040820151600282019061089a908261141f565b50606082015160038201906108af908261141f565b5050508383815181106108c4576108c4611244565b6020026020010151600001515160001415801561090057508383815181106108ee576108ee611244565b60200260200101516020015151600014155b801561092b575083838151811061091957610919611244565b60200260200101516040015151600014155b8015610956575083838151811061094457610944611244565b60200260200101516060015151600014155b6109ad5760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b6064820152608401610222565b505080806109ba9061125a565b91505061075e565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516109f291906114df565b60405180910390a150565b600082600181518110610a1257610a12611244565b6020026020010151600360008481526020019081526020016000205414610a6e5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b6044820152606401610222565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610abc908690889060040161130a565b602060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190611361565b949350505050565b610b0d610b7e565b6001600160a01b038116610b725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b610b7b81610bd8565b50565b6000546001600160a01b031633146104f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c3a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b60405290565b6040516080810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ccc57610ccc610c41565b604052919050565b600067ffffffffffffffff821115610cee57610cee610c41565b5060051b60200190565b600082601f830112610d0957600080fd5b813567ffffffffffffffff811115610d2357610d23610c41565b610d36601f8201601f1916602001610ca3565b818152846020838601011115610d4b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610d7e57600080fd5b84359350602085013567ffffffffffffffff80821115610d9d57600080fd5b818701915087601f830112610db157600080fd5b610dc3610dbe8335610cd4565b610ca3565b82358082526020808301929160051b8501018a811115610de257600080fd5b602085015b81811015610e84578481351115610dfd57600080fd5b803586016060818e03601f19011215610e1557600080fd5b610e1d610c57565b602082013587811115610e2f57600080fd5b610e3e8f602083860101610cf8565b825250604082013587811115610e5357600080fd5b610e628f602083860101610cf8565b6020838101919091526060939093013560408301525085529384019301610de7565b5090965050506040870135915080821115610e9e57600080fd5b50610eab87828801610cf8565b949793965093946060013593505050565b600082601f830112610ecd57600080fd5b81356020610edd610dbe83610cd4565b82815260059290921b84018101918181019086841115610efc57600080fd5b8286015b84811015610f175780358352918301918301610f00565b509695505050505050565b60008060408385031215610f3557600080fd5b823567ffffffffffffffff80821115610f4d57600080fd5b610f5986838701610cf8565b93506020850135915080821115610f6f57600080fd5b50610f7c85828601610ebc565b9150509250929050565b6000815180845260005b81811015610fac57602081850181015186830182015201610f90565b506000602082860101526020601f19601f83011685010191505092915050565b608081526000610fdf6080830187610f86565b8281036020840152610ff18187610f86565b905082810360408401526110058186610f86565b905082810360608401526110198185610f86565b979650505050505050565b6000602080838503121561103757600080fd5b823567ffffffffffffffff8082111561104f57600080fd5b818501915085601f83011261106357600080fd5b8135611071610dbe82610cd4565b81815260059190911b8301840190848101908883111561109057600080fd5b8585015b83811015611171578035858111156110ab57600080fd5b86016080818c03601f190112156110c25760008081fd5b6110ca610c80565b88820135878111156110dc5760008081fd5b6110ea8d8b83860101610cf8565b825250604080830135888111156111015760008081fd5b61110f8e8c83870101610cf8565b8b84015250606080840135898111156111285760008081fd5b6111368f8d83880101610cf8565b838501525060808401359150888211156111505760008081fd5b61115e8e8c84870101610cf8565b9083015250845250918601918601611094565b5098975050505050505050565b60008060006060848603121561119357600080fd5b833567ffffffffffffffff808211156111ab57600080fd5b6111b787838801610cf8565b945060208601359150808211156111cd57600080fd5b506111da86828701610ebc565b925050604084013590509250925092565b6000602082840312156111fd57600080fd5b81356001600160a01b038116811461121457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104d9576104d961121b565b634e487b7160e01b600052603260045260246000fd5b60006001820161126c5761126c61121b565b5060010190565b6000604080830185845260208281860152818651808452606093508387019150838160051b88010183890160005b838110156112fa57898303605f19018552815180518885526112c589860182610f86565b905087820151858203898701526112dc8282610f86565b928b0151958b019590955250948601949250908501906001016112a1565b50909a9950505050505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561134357815184529284019290840190600101611327565b505050838103828501526113578186610f86565b9695505050505050565b60006020828403121561137357600080fd5b8151801515811461121457600080fd5b600181811c9082168061139757607f821691505b6020821081036113b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020815260006104d66020830184610f86565b601f82111561141a57600081815260208120601f850160051c810160208610156113f75750805b601f850160051c820191505b8181101561141657828155600101611403565b5050505b505050565b815167ffffffffffffffff81111561143957611439610c41565b61144d816114478454611383565b846113d0565b602080601f831160018114611482576000841561146a5750858301515b600019600386901b1c1916600185901b178555611416565b600085815260208120601f198616915b828110156114b157888601518255948401946001909101908401611492565b50858210156114cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561158d57603f1989840301855281516080815181865261152c82870182610f86565b915050888201518582038a8701526115448282610f86565b915050878201518582038987015261155c8282610f86565b915050606080830151925085820381870152506115798183610f86565b968901969450505090860190600101611506565b50909897505050505050505056fea2646970667358221220f32f840eddc80cec82eb8f05c34e311f2c0922da70b900e8971882d940e5044964736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b14610136578063a3c4bcf814610151578063c7ddca0e14610174578063c8e5814714610187578063f2fde38b1461019a57600080fd5b806323eb94a0146100a3578063413a9f2d146100d65780636c7684fe146100eb578063715018a61461010e5780637f3bfb2e14610116575b600080fd5b6100c36100b1366004610c28565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b6100e96100e4366004610d68565b6101ad565b005b6100fe6100f9366004610f22565b610444565b60405190151581526020016100cd565b6100e96104df565b6100c3610124366004610c28565b60036020526000908152604090205481565b6000546040516001600160a01b0390911681526020016100cd565b61016461015f366004610c28565b6104f3565b6040516100cd9493929190610fcc565b6100e9610182366004611024565b610753565b6100fe61019536600461117e565b6109fd565b6100e96101a83660046111eb565b610b05565b6101b5610b7e565b60015460000361022b5760405162461bcd60e51b815260206004820152603660248201527f5468652043455820686173206e6f74207375626d697474656420616e792061646044820152756472657373206f776e6572736869702070726f6f667360501b60648201526084015b60405180910390fd5b60008351600161023b9190611231565b67ffffffffffffffff81111561025357610253610c41565b60405190808252806020026020018201604052801561027c578160200160208202803683370190505b509050848160008151811061029357610293611244565b60200260200101818152505060005b845181101561038e578481815181106102bd576102bd611244565b602002602001015160200151516000141580156102f957508481815181106102e7576102e7611244565b60200260200101516000015151600014155b6103355760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b6044820152606401610222565b84818151811061034757610347611244565b602002602001015160400151828260016103619190611231565b8151811061037157610371611244565b6020908102919091010152806103868161125a565b9150506102a2565b506103998382610444565b6103d85760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b6044820152606401610222565b6000828152600360205260408120869055815183917f0473581c3cf437afc52207d88ce1541afbc7ce9fdb83b4d4d3b7214beed56ff59184919061041e5761041e611244565b602002602001015186604051610435929190611273565b60405180910390a25050505050565b604051630bd205a960e41b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610495908590879060040161130a565b602060405180830381865afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190611361565b90505b92915050565b6104e7610b7e565b6104f16000610bd8565b565b6001818154811061050357600080fd5b906000526020600020906004020160009150905080600001805461052690611383565b80601f016020809104026020016040519081016040528092919081815260200182805461055290611383565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050908060010180546105b490611383565b80601f01602080910402602001604051908101604052809291908181526020018280546105e090611383565b801561062d5780601f106106025761010080835404028352916020019161062d565b820191906000526020600020905b81548152906001019060200180831161061057829003601f168201915b50505050509080600201805461064290611383565b80601f016020809104026020016040519081016040528092919081815260200182805461066e90611383565b80156106bb5780601f10610690576101008083540402835291602001916106bb565b820191906000526020600020905b81548152906001019060200180831161069e57829003601f168201915b5050505050908060030180546106d090611383565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90611383565b80156107495780601f1061071e57610100808354040283529160200191610749565b820191906000526020600020905b81548152906001019060200180831161072c57829003601f168201915b5050505050905084565b61075b610b7e565b60005b81518110156109c257600082828151811061077b5761077b611244565b60200260200101516000015160405160200161079791906113bd565b60408051601f19818403018152918152815160209283012060008181526002909352912054909150801561080d5760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610222565b610818836001611231565b600083815260026020526040902055835160019085908590811061083e5761083e611244565b60209081029190910181015182546001810184556000938452919092208251600490920201908190610870908261141f565b5060208201516001820190610885908261141f565b506040820151600282019061089a908261141f565b50606082015160038201906108af908261141f565b5050508383815181106108c4576108c4611244565b6020026020010151600001515160001415801561090057508383815181106108ee576108ee611244565b60200260200101516020015151600014155b801561092b575083838151811061091957610919611244565b60200260200101516040015151600014155b8015610956575083838151811061094457610944611244565b60200260200101516060015151600014155b6109ad5760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b6064820152608401610222565b505080806109ba9061125a565b91505061075e565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516109f291906114df565b60405180910390a150565b600082600181518110610a1257610a12611244565b6020026020010151600360008481526020019081526020016000205414610a6e5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b6044820152606401610222565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610abc908690889060040161130a565b602060405180830381865afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd9190611361565b949350505050565b610b0d610b7e565b6001600160a01b038116610b725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b610b7b81610bd8565b50565b6000546001600160a01b031633146104f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c3a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b60405290565b6040516080810167ffffffffffffffff81118282101715610c7a57610c7a610c41565b604051601f8201601f1916810167ffffffffffffffff81118282101715610ccc57610ccc610c41565b604052919050565b600067ffffffffffffffff821115610cee57610cee610c41565b5060051b60200190565b600082601f830112610d0957600080fd5b813567ffffffffffffffff811115610d2357610d23610c41565b610d36601f8201601f1916602001610ca3565b818152846020838601011115610d4b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610d7e57600080fd5b84359350602085013567ffffffffffffffff80821115610d9d57600080fd5b818701915087601f830112610db157600080fd5b610dc3610dbe8335610cd4565b610ca3565b82358082526020808301929160051b8501018a811115610de257600080fd5b602085015b81811015610e84578481351115610dfd57600080fd5b803586016060818e03601f19011215610e1557600080fd5b610e1d610c57565b602082013587811115610e2f57600080fd5b610e3e8f602083860101610cf8565b825250604082013587811115610e5357600080fd5b610e628f602083860101610cf8565b6020838101919091526060939093013560408301525085529384019301610de7565b5090965050506040870135915080821115610e9e57600080fd5b50610eab87828801610cf8565b949793965093946060013593505050565b600082601f830112610ecd57600080fd5b81356020610edd610dbe83610cd4565b82815260059290921b84018101918181019086841115610efc57600080fd5b8286015b84811015610f175780358352918301918301610f00565b509695505050505050565b60008060408385031215610f3557600080fd5b823567ffffffffffffffff80821115610f4d57600080fd5b610f5986838701610cf8565b93506020850135915080821115610f6f57600080fd5b50610f7c85828601610ebc565b9150509250929050565b6000815180845260005b81811015610fac57602081850181015186830182015201610f90565b506000602082860101526020601f19601f83011685010191505092915050565b608081526000610fdf6080830187610f86565b8281036020840152610ff18187610f86565b905082810360408401526110058186610f86565b905082810360608401526110198185610f86565b979650505050505050565b6000602080838503121561103757600080fd5b823567ffffffffffffffff8082111561104f57600080fd5b818501915085601f83011261106357600080fd5b8135611071610dbe82610cd4565b81815260059190911b8301840190848101908883111561109057600080fd5b8585015b83811015611171578035858111156110ab57600080fd5b86016080818c03601f190112156110c25760008081fd5b6110ca610c80565b88820135878111156110dc5760008081fd5b6110ea8d8b83860101610cf8565b825250604080830135888111156111015760008081fd5b61110f8e8c83870101610cf8565b8b84015250606080840135898111156111285760008081fd5b6111368f8d83880101610cf8565b838501525060808401359150888211156111505760008081fd5b61115e8e8c84870101610cf8565b9083015250845250918601918601611094565b5098975050505050505050565b60008060006060848603121561119357600080fd5b833567ffffffffffffffff808211156111ab57600080fd5b6111b787838801610cf8565b945060208601359150808211156111cd57600080fd5b506111da86828701610ebc565b925050604084013590509250925092565b6000602082840312156111fd57600080fd5b81356001600160a01b038116811461121457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104d9576104d961121b565b634e487b7160e01b600052603260045260246000fd5b60006001820161126c5761126c61121b565b5060010190565b6000604080830185845260208281860152818651808452606093508387019150838160051b88010183890160005b838110156112fa57898303605f19018552815180518885526112c589860182610f86565b905087820151858203898701526112dc8282610f86565b928b0151958b019590955250948601949250908501906001016112a1565b50909a9950505050505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561134357815184529284019290840190600101611327565b505050838103828501526113578186610f86565b9695505050505050565b60006020828403121561137357600080fd5b8151801515811461121457600080fd5b600181811c9082168061139757607f821691505b6020821081036113b757634e487b7160e01b600052602260045260246000fd5b50919050565b6020815260006104d66020830184610f86565b601f82111561141a57600081815260208120601f850160051c810160208610156113f75750805b601f850160051c820191505b8181101561141657828155600101611403565b5050505b505050565b815167ffffffffffffffff81111561143957611439610c41565b61144d816114478454611383565b846113d0565b602080601f831160018114611482576000841561146a5750858301515b600019600386901b1c1916600185901b178555611416565b600085815260208120601f198616915b828110156114b157888601518255948401946001909101908401611492565b50858210156114cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561158d57603f1989840301855281516080815181865261152c82870182610f86565b915050888201518582038a8701526115448282610f86565b915050878201518582038987015261155c8282610f86565b915050606080830151925085820381870152506115798183610f86565b968901969450505090860190600101611506565b50909897505050505050505056fea2646970667358221220f32f840eddc80cec82eb8f05c34e311f2c0922da70b900e8971882d940e5044964736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file +{"_format":"hh-sol-artifact-1","contractName":"Summa","sourceName":"src/Summa.sol","abi":[{"inputs":[{"internalType":"contract IVerifier","name":"_inclusionVerifier","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"indexed":false,"internalType":"struct Summa.AddressOwnershipProof[]","name":"addressOwnershipProofs","type":"tuple[]"}],"name":"AddressOwnershipProofSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mstRoot","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"rootSums","type":"uint256[]"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"}],"indexed":false,"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"}],"name":"LiabilitiesCommitmentSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressOwnershipProofs","outputs":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"commitments","outputs":[{"internalType":"uint256","name":"mstRoot","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"addressHash","type":"bytes32"}],"name":"getAddressOwnershipProof","outputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Summa.AddressOwnershipProof","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mstRoot","type":"uint256"},{"internalType":"uint256[]","name":"rootSums","type":"uint256[]"},{"components":[{"internalType":"string","name":"assetName","type":"string"},{"internalType":"string","name":"chain","type":"string"}],"internalType":"struct Summa.Asset[]","name":"assets","type":"tuple[]"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"submitCommitment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Summa.AddressOwnershipProof[]","name":"_addressOwnershipProofs","type":"tuple[]"}],"name":"submitProofOfAddressOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"publicInputs","type":"uint256[]"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"verifyInclusionProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x60a060405234801561001057600080fd5b5060405162001b1d38038062001b1d8339810160408190526100319161009b565b61003a3361004b565b6001600160a01b03166080526100cb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100ad57600080fd5b81516001600160a01b03811681146100c457600080fd5b9392505050565b608051611a36620000e76000396000610a4a0152611a366000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a3c4bcf811610066578063a3c4bcf814610114578063c7ddca0e14610137578063c8e581471461014a578063da64a7501461016d578063f2fde38b1461018057600080fd5b806319b339681461009857806349ce8997146100c1578063715018a6146100ef5780638da5cb5b146100f9575b600080fd5b6100ab6100a63660046110ad565b610193565b6040516100b89190611181565b60405180910390f35b6100e16100cf3660046110ad565b60036020526000908152604090205481565b6040519081526020016100b8565b6100f76104aa565b005b6000546040516001600160a01b0390911681526020016100b8565b6101276101223660046110ad565b6104be565b6040516100b8949392919061119b565b6100f761014536600461131a565b61071e565b61015d6101583660046114df565b6109bf565b60405190151581526020016100b8565b6100f761017b36600461154c565b610aca565b6100f761018e366004611693565b610e81565b6101be6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000828152600260205260409020546102155760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81b9bdd081d995c9a599a595960621b60448201526064015b60405180910390fd5b6000828152600260205260409020546001906102329082906116d2565b81548110610242576102426116eb565b906000526020600020906004020160405180608001604052908160008201805461026b90611701565b80601f016020809104026020016040519081016040528092919081815260200182805461029790611701565b80156102e45780601f106102b9576101008083540402835291602001916102e4565b820191906000526020600020905b8154815290600101906020018083116102c757829003601f168201915b505050505081526020016001820180546102fd90611701565b80601f016020809104026020016040519081016040528092919081815260200182805461032990611701565b80156103765780601f1061034b57610100808354040283529160200191610376565b820191906000526020600020905b81548152906001019060200180831161035957829003601f168201915b5050505050815260200160028201805461038f90611701565b80601f01602080910402602001604051908101604052809291908181526020018280546103bb90611701565b80156104085780601f106103dd57610100808354040283529160200191610408565b820191906000526020600020905b8154815290600101906020018083116103eb57829003601f168201915b5050505050815260200160038201805461042190611701565b80601f016020809104026020016040519081016040528092919081815260200182805461044d90611701565b801561049a5780601f1061046f5761010080835404028352916020019161049a565b820191906000526020600020905b81548152906001019060200180831161047d57829003601f168201915b5050505050815250509050919050565b6104b2610efa565b6104bc6000610f54565b565b600181815481106104ce57600080fd5b90600052602060002090600402016000915090508060000180546104f190611701565b80601f016020809104026020016040519081016040528092919081815260200182805461051d90611701565b801561056a5780601f1061053f5761010080835404028352916020019161056a565b820191906000526020600020905b81548152906001019060200180831161054d57829003601f168201915b50505050509080600101805461057f90611701565b80601f01602080910402602001604051908101604052809291908181526020018280546105ab90611701565b80156105f85780601f106105cd576101008083540402835291602001916105f8565b820191906000526020600020905b8154815290600101906020018083116105db57829003601f168201915b50505050509080600201805461060d90611701565b80601f016020809104026020016040519081016040528092919081815260200182805461063990611701565b80156106865780601f1061065b57610100808354040283529160200191610686565b820191906000526020600020905b81548152906001019060200180831161066957829003601f168201915b50505050509080600301805461069b90611701565b80601f01602080910402602001604051908101604052809291908181526020018280546106c790611701565b80156107145780601f106106e957610100808354040283529160200191610714565b820191906000526020600020905b8154815290600101906020018083116106f757829003601f168201915b5050505050905084565b610726610efa565b60005b8151811015610984576000828281518110610746576107466116eb565b602002602001015160000151604051602001610762919061173b565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915080156107d85760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c72656164792076657269666965640000000000000000604482015260640161020c565b60018484815181106107ec576107ec6116eb565b6020908102919091018101518254600181018455600093845291909220825160049092020190819061081e90826117a6565b506020820151600182019061083390826117a6565b506040820151600282019061084890826117a6565b506060820151600382019061085d90826117a6565b5050600154600084815260026020526040902055508351849084908110610886576108866116eb565b602002602001015160000151516000141580156108c257508383815181106108b0576108b06116eb565b60200260200101516020015151600014155b80156108ed57508383815181106108db576108db6116eb565b60200260200101516040015151600014155b80156109185750838381518110610906576109066116eb565b60200260200101516060015151600014155b61096f5760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b606482015260840161020c565b5050808061097c90611866565b915050610729565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516109b4919061187f565b60405180910390a150565b6000826001815181106109d4576109d46116eb565b6020026020010151600360008481526020019081526020016000206000015414610a335760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b604482015260640161020c565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610a81908690889060040161191c565b602060405180830381865afa158015610a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac29190611941565b949350505050565b610ad2610efa565b83600003610b155760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b604482015260640161020c565b8151835114610b785760405162461bcd60e51b815260206004820152602960248201527f526f6f742061737365742073756d7320616e64206173736574206e756d626572604482015268040dad2e6dac2e8c6d60bb1b606482015260840161020c565b6000825167ffffffffffffffff811115610b9457610b946111f3565b604051908082528060200260200182016040528015610bc757816020015b6060815260200190600190039081610bb25790505b5090506000835167ffffffffffffffff811115610be657610be66111f3565b604051908082528060200260200182016040528015610c1957816020015b6060815260200190600190039081610c045790505b50905060005b8451811015610db657848181518110610c3a57610c3a6116eb565b60200260200101516020015151600014158015610c765750848181518110610c6457610c646116eb565b60200260200101516000015151600014155b610cb25760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b604482015260640161020c565b858181518110610cc457610cc46116eb565b6020026020010151600003610d2d5760405162461bcd60e51b815260206004820152602960248201527f416c6c20726f6f742073756d732073686f756c642062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161020c565b848181518110610d3f57610d3f6116eb565b602002602001015160000151838281518110610d5d57610d5d6116eb565b6020026020010181905250848181518110610d7a57610d7a6116eb565b602002602001015160200151828281518110610d9857610d986116eb565b60200260200101819052508080610dae90611866565b915050610c1f565b5060408051608081018252878152602080820188815282840186905260608301859052600087815260038352939093208251815592518051929392610e019260018501920190610fa4565b5060408201518051610e1d916002840191602090910190610fef565b5060608201518051610e39916003840191602090910190610fef565b50905050827f88bfc7389cb831ea0208ff106da6f5c9f88036ba084f1eb008d2788d3d45998d878787604051610e7193929190611963565b60405180910390a2505050505050565b610e89610efa565b6001600160a01b038116610eee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020c565b610ef781610f54565b50565b6000546001600160a01b031633146104bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610fdf579160200282015b82811115610fdf578251825591602001919060010190610fc4565b50610feb929150611041565b5090565b828054828255906000526020600020908101928215611035579160200282015b82811115611035578251829061102590826117a6565b509160200191906001019061100f565b50610feb929150611056565b5b80821115610feb5760008155600101611042565b80821115610feb57600061106a8282611073565b50600101611056565b50805461107f90611701565b6000825580601f1061108f575050565b601f016020900490600052602060002090810190610ef79190611041565b6000602082840312156110bf57600080fd5b5035919050565b60005b838110156110e15781810151838201526020016110c9565b50506000910152565b600081518084526111028160208601602086016110c6565b601f01601f19169290920160200192915050565b600081516080845261112b60808501826110ea565b90506020830151848203602086015261114482826110ea565b9150506040830151848203604086015261115e82826110ea565b9150506060830151848203606086015261117882826110ea565b95945050505050565b6020815260006111946020830184611116565b9392505050565b6080815260006111ae60808301876110ea565b82810360208401526111c081876110ea565b905082810360408401526111d481866110ea565b905082810360608401526111e881856110ea565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561122c5761122c6111f3565b60405290565b6040805190810167ffffffffffffffff8111828210171561122c5761122c6111f3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561127e5761127e6111f3565b604052919050565b600067ffffffffffffffff8211156112a0576112a06111f3565b5060051b60200190565b600082601f8301126112bb57600080fd5b813567ffffffffffffffff8111156112d5576112d56111f3565b6112e8601f8201601f1916602001611255565b8181528460208386010111156112fd57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561132d57600080fd5b823567ffffffffffffffff8082111561134557600080fd5b818501915085601f83011261135957600080fd5b813561136c61136782611286565b611255565b81815260059190911b8301840190848101908883111561138b57600080fd5b8585015b8381101561146c578035858111156113a657600080fd5b86016080818c03601f190112156113bd5760008081fd5b6113c5611209565b88820135878111156113d75760008081fd5b6113e58d8b838601016112aa565b825250604080830135888111156113fc5760008081fd5b61140a8e8c838701016112aa565b8b84015250606080840135898111156114235760008081fd5b6114318f8d838801016112aa565b8385015250608084013591508882111561144b5760008081fd5b6114598e8c848701016112aa565b908301525084525091860191860161138f565b5098975050505050505050565b600082601f83011261148a57600080fd5b8135602061149a61136783611286565b82815260059290921b840181019181810190868411156114b957600080fd5b8286015b848110156114d457803583529183019183016114bd565b509695505050505050565b6000806000606084860312156114f457600080fd5b833567ffffffffffffffff8082111561150c57600080fd5b611518878388016112aa565b9450602086013591508082111561152e57600080fd5b5061153b86828701611479565b925050604084013590509250925092565b6000806000806080858703121561156257600080fd5b84359350602085013567ffffffffffffffff8082111561158157600080fd5b61158d88838901611479565b945060408701359150808211156115a357600080fd5b818701915087601f8301126115b757600080fd5b6115c46113678335611286565b82358082526020808301929160051b8501018a8111156115e357600080fd5b602085015b8181101561167f5784813511156115fe57600080fd5b803586016040818e03601f1901121561161657600080fd5b61161e611232565b60208201358781111561163057600080fd5b61163f8f6020838601016112aa565b82525060408201358781111561165457600080fd5b6116638f6020838601016112aa565b60208301525080865250506020840193506020810190506115e8565b50979a969950976060013596505050505050565b6000602082840312156116a557600080fd5b81356001600160a01b038116811461119457600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156116e5576116e56116bc565b92915050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061171557607f821691505b60208210810361173557634e487b7160e01b600052602260045260246000fd5b50919050565b6000825161174d8184602087016110c6565b9190910192915050565b601f8211156117a157600081815260208120601f850160051c8101602086101561177e5750805b601f850160051c820191505b8181101561179d5782815560010161178a565b5050505b505050565b815167ffffffffffffffff8111156117c0576117c06111f3565b6117d4816117ce8454611701565b84611757565b602080601f83116001811461180957600084156117f15750858301515b600019600386901b1c1916600185901b17855561179d565b600085815260208120601f198616915b8281101561183857888601518255948401946001909101908401611819565b50858210156118565787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018201611878576118786116bc565b5060010190565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156118d457603f198886030184526118c2858351611116565b945092850192908501906001016118a6565b5092979650505050505050565b600081518084526020808501945080840160005b83811015611911578151875295820195908201906001016118f5565b509495945050505050565b60408152600061192f60408301856118e1565b828103602084015261117881856110ea565b60006020828403121561195357600080fd5b8151801515811461119457600080fd5b8381526000602060608184015261197d60608401866118e1565b6040848203818601528186518084528484019150848160051b85010185890160005b838110156119ef57868303601f19018552815180518785526119c3888601826110ea565b918a0151858303868c01529190506119db81836110ea565b968a0196945050509087019060010161199f565b50909b9a505050505050505050505056fea26469706673582212204f84ac77c240ca40dc1311f57cfee822538b8367a17d26986f56306d795fffbc64736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063a3c4bcf811610066578063a3c4bcf814610114578063c7ddca0e14610137578063c8e581471461014a578063da64a7501461016d578063f2fde38b1461018057600080fd5b806319b339681461009857806349ce8997146100c1578063715018a6146100ef5780638da5cb5b146100f9575b600080fd5b6100ab6100a63660046110ad565b610193565b6040516100b89190611181565b60405180910390f35b6100e16100cf3660046110ad565b60036020526000908152604090205481565b6040519081526020016100b8565b6100f76104aa565b005b6000546040516001600160a01b0390911681526020016100b8565b6101276101223660046110ad565b6104be565b6040516100b8949392919061119b565b6100f761014536600461131a565b61071e565b61015d6101583660046114df565b6109bf565b60405190151581526020016100b8565b6100f761017b36600461154c565b610aca565b6100f761018e366004611693565b610e81565b6101be6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000828152600260205260409020546102155760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81b9bdd081d995c9a599a595960621b60448201526064015b60405180910390fd5b6000828152600260205260409020546001906102329082906116d2565b81548110610242576102426116eb565b906000526020600020906004020160405180608001604052908160008201805461026b90611701565b80601f016020809104026020016040519081016040528092919081815260200182805461029790611701565b80156102e45780601f106102b9576101008083540402835291602001916102e4565b820191906000526020600020905b8154815290600101906020018083116102c757829003601f168201915b505050505081526020016001820180546102fd90611701565b80601f016020809104026020016040519081016040528092919081815260200182805461032990611701565b80156103765780601f1061034b57610100808354040283529160200191610376565b820191906000526020600020905b81548152906001019060200180831161035957829003601f168201915b5050505050815260200160028201805461038f90611701565b80601f01602080910402602001604051908101604052809291908181526020018280546103bb90611701565b80156104085780601f106103dd57610100808354040283529160200191610408565b820191906000526020600020905b8154815290600101906020018083116103eb57829003601f168201915b5050505050815260200160038201805461042190611701565b80601f016020809104026020016040519081016040528092919081815260200182805461044d90611701565b801561049a5780601f1061046f5761010080835404028352916020019161049a565b820191906000526020600020905b81548152906001019060200180831161047d57829003601f168201915b5050505050815250509050919050565b6104b2610efa565b6104bc6000610f54565b565b600181815481106104ce57600080fd5b90600052602060002090600402016000915090508060000180546104f190611701565b80601f016020809104026020016040519081016040528092919081815260200182805461051d90611701565b801561056a5780601f1061053f5761010080835404028352916020019161056a565b820191906000526020600020905b81548152906001019060200180831161054d57829003601f168201915b50505050509080600101805461057f90611701565b80601f01602080910402602001604051908101604052809291908181526020018280546105ab90611701565b80156105f85780601f106105cd576101008083540402835291602001916105f8565b820191906000526020600020905b8154815290600101906020018083116105db57829003601f168201915b50505050509080600201805461060d90611701565b80601f016020809104026020016040519081016040528092919081815260200182805461063990611701565b80156106865780601f1061065b57610100808354040283529160200191610686565b820191906000526020600020905b81548152906001019060200180831161066957829003601f168201915b50505050509080600301805461069b90611701565b80601f01602080910402602001604051908101604052809291908181526020018280546106c790611701565b80156107145780601f106106e957610100808354040283529160200191610714565b820191906000526020600020905b8154815290600101906020018083116106f757829003601f168201915b5050505050905084565b610726610efa565b60005b8151811015610984576000828281518110610746576107466116eb565b602002602001015160000151604051602001610762919061173b565b60408051601f1981840301815291815281516020928301206000818152600290935291205490915080156107d85760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c72656164792076657269666965640000000000000000604482015260640161020c565b60018484815181106107ec576107ec6116eb565b6020908102919091018101518254600181018455600093845291909220825160049092020190819061081e90826117a6565b506020820151600182019061083390826117a6565b506040820151600282019061084890826117a6565b506060820151600382019061085d90826117a6565b5050600154600084815260026020526040902055508351849084908110610886576108866116eb565b602002602001015160000151516000141580156108c257508383815181106108b0576108b06116eb565b60200260200101516020015151600014155b80156108ed57508383815181106108db576108db6116eb565b60200260200101516040015151600014155b80156109185750838381518110610906576109066116eb565b60200260200101516060015151600014155b61096f5760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b606482015260840161020c565b5050808061097c90611866565b915050610729565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516109b4919061187f565b60405180910390a150565b6000826001815181106109d4576109d46116eb565b6020026020010151600360008481526020019081526020016000206000015414610a335760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b604482015260640161020c565b604051630bd205a960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bd205a9090610a81908690889060040161191c565b602060405180830381865afa158015610a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac29190611941565b949350505050565b610ad2610efa565b83600003610b155760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081354d5081c9bdbdd60821b604482015260640161020c565b8151835114610b785760405162461bcd60e51b815260206004820152602960248201527f526f6f742061737365742073756d7320616e64206173736574206e756d626572604482015268040dad2e6dac2e8c6d60bb1b606482015260840161020c565b6000825167ffffffffffffffff811115610b9457610b946111f3565b604051908082528060200260200182016040528015610bc757816020015b6060815260200190600190039081610bb25790505b5090506000835167ffffffffffffffff811115610be657610be66111f3565b604051908082528060200260200182016040528015610c1957816020015b6060815260200190600190039081610c045790505b50905060005b8451811015610db657848181518110610c3a57610c3a6116eb565b60200260200101516020015151600014158015610c765750848181518110610c6457610c646116eb565b60200260200101516000015151600014155b610cb25760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908185cdcd95d609a1b604482015260640161020c565b858181518110610cc457610cc46116eb565b6020026020010151600003610d2d5760405162461bcd60e51b815260206004820152602960248201527f416c6c20726f6f742073756d732073686f756c642062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161020c565b848181518110610d3f57610d3f6116eb565b602002602001015160000151838281518110610d5d57610d5d6116eb565b6020026020010181905250848181518110610d7a57610d7a6116eb565b602002602001015160200151828281518110610d9857610d986116eb565b60200260200101819052508080610dae90611866565b915050610c1f565b5060408051608081018252878152602080820188815282840186905260608301859052600087815260038352939093208251815592518051929392610e019260018501920190610fa4565b5060408201518051610e1d916002840191602090910190610fef565b5060608201518051610e39916003840191602090910190610fef565b50905050827f88bfc7389cb831ea0208ff106da6f5c9f88036ba084f1eb008d2788d3d45998d878787604051610e7193929190611963565b60405180910390a2505050505050565b610e89610efa565b6001600160a01b038116610eee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161020c565b610ef781610f54565b50565b6000546001600160a01b031633146104bc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161020c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610fdf579160200282015b82811115610fdf578251825591602001919060010190610fc4565b50610feb929150611041565b5090565b828054828255906000526020600020908101928215611035579160200282015b82811115611035578251829061102590826117a6565b509160200191906001019061100f565b50610feb929150611056565b5b80821115610feb5760008155600101611042565b80821115610feb57600061106a8282611073565b50600101611056565b50805461107f90611701565b6000825580601f1061108f575050565b601f016020900490600052602060002090810190610ef79190611041565b6000602082840312156110bf57600080fd5b5035919050565b60005b838110156110e15781810151838201526020016110c9565b50506000910152565b600081518084526111028160208601602086016110c6565b601f01601f19169290920160200192915050565b600081516080845261112b60808501826110ea565b90506020830151848203602086015261114482826110ea565b9150506040830151848203604086015261115e82826110ea565b9150506060830151848203606086015261117882826110ea565b95945050505050565b6020815260006111946020830184611116565b9392505050565b6080815260006111ae60808301876110ea565b82810360208401526111c081876110ea565b905082810360408401526111d481866110ea565b905082810360608401526111e881856110ea565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561122c5761122c6111f3565b60405290565b6040805190810167ffffffffffffffff8111828210171561122c5761122c6111f3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561127e5761127e6111f3565b604052919050565b600067ffffffffffffffff8211156112a0576112a06111f3565b5060051b60200190565b600082601f8301126112bb57600080fd5b813567ffffffffffffffff8111156112d5576112d56111f3565b6112e8601f8201601f1916602001611255565b8181528460208386010111156112fd57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561132d57600080fd5b823567ffffffffffffffff8082111561134557600080fd5b818501915085601f83011261135957600080fd5b813561136c61136782611286565b611255565b81815260059190911b8301840190848101908883111561138b57600080fd5b8585015b8381101561146c578035858111156113a657600080fd5b86016080818c03601f190112156113bd5760008081fd5b6113c5611209565b88820135878111156113d75760008081fd5b6113e58d8b838601016112aa565b825250604080830135888111156113fc5760008081fd5b61140a8e8c838701016112aa565b8b84015250606080840135898111156114235760008081fd5b6114318f8d838801016112aa565b8385015250608084013591508882111561144b5760008081fd5b6114598e8c848701016112aa565b908301525084525091860191860161138f565b5098975050505050505050565b600082601f83011261148a57600080fd5b8135602061149a61136783611286565b82815260059290921b840181019181810190868411156114b957600080fd5b8286015b848110156114d457803583529183019183016114bd565b509695505050505050565b6000806000606084860312156114f457600080fd5b833567ffffffffffffffff8082111561150c57600080fd5b611518878388016112aa565b9450602086013591508082111561152e57600080fd5b5061153b86828701611479565b925050604084013590509250925092565b6000806000806080858703121561156257600080fd5b84359350602085013567ffffffffffffffff8082111561158157600080fd5b61158d88838901611479565b945060408701359150808211156115a357600080fd5b818701915087601f8301126115b757600080fd5b6115c46113678335611286565b82358082526020808301929160051b8501018a8111156115e357600080fd5b602085015b8181101561167f5784813511156115fe57600080fd5b803586016040818e03601f1901121561161657600080fd5b61161e611232565b60208201358781111561163057600080fd5b61163f8f6020838601016112aa565b82525060408201358781111561165457600080fd5b6116638f6020838601016112aa565b60208301525080865250506020840193506020810190506115e8565b50979a969950976060013596505050505050565b6000602082840312156116a557600080fd5b81356001600160a01b038116811461119457600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156116e5576116e56116bc565b92915050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061171557607f821691505b60208210810361173557634e487b7160e01b600052602260045260246000fd5b50919050565b6000825161174d8184602087016110c6565b9190910192915050565b601f8211156117a157600081815260208120601f850160051c8101602086101561177e5750805b601f850160051c820191505b8181101561179d5782815560010161178a565b5050505b505050565b815167ffffffffffffffff8111156117c0576117c06111f3565b6117d4816117ce8454611701565b84611757565b602080601f83116001811461180957600084156117f15750858301515b600019600386901b1c1916600185901b17855561179d565b600085815260208120601f198616915b8281101561183857888601518255948401946001909101908401611819565b50858210156118565787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018201611878576118786116bc565b5060010190565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156118d457603f198886030184526118c2858351611116565b945092850192908501906001016118a6565b5092979650505050505050565b600081518084526020808501945080840160005b83811015611911578151875295820195908201906001016118f5565b509495945050505050565b60408152600061192f60408301856118e1565b828103602084015261117881856110ea565b60006020828403121561195357600080fd5b8151801515811461119457600080fd5b8381526000602060608184015261197d60608401866118e1565b6040848203818601528186518084528484019150848160051b85010185890160005b838110156119ef57868303601f19018552815180518785526119c3888601826110ea565b918a0151858303868c01529190506119db81836110ea565b968a0196945050509087019060010161199f565b50909b9a505050505050505050505056fea26469706673582212204f84ac77c240ca40dc1311f57cfee822538b8367a17d26986f56306d795fffbc64736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/deployments.json b/backend/src/contracts/deployments.json index a945ae8f..fe6ceb32 100644 --- a/backend/src/contracts/deployments.json +++ b/backend/src/contracts/deployments.json @@ -1 +1 @@ -{"31337":{"address":"0xdc64a140aa3e981100a9beca4e685f962f0cf6c9"}} +{"31337":{"address":"0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9"}} diff --git a/backend/src/contracts/generated/mod.rs b/backend/src/contracts/generated/mod.rs index a944f3aa..467f80f0 100644 --- a/backend/src/contracts/generated/mod.rs +++ b/backend/src/contracts/generated/mod.rs @@ -1,3 +1,2 @@ pub mod summa_contract; -pub mod solvency_verifier; pub mod inclusion_verifier; \ No newline at end of file diff --git a/backend/src/contracts/generated/solvency_verifier.rs b/backend/src/contracts/generated/solvency_verifier.rs deleted file mode 100644 index c4614e1f..00000000 --- a/backend/src/contracts/generated/solvency_verifier.rs +++ /dev/null @@ -1,41185 +0,0 @@ -pub use solvency_verifier::*; -/// 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 solvency_verifier { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pubInputs\",\"type\":\"uint256[]\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; - ///The parsed JSON ABI of the contract. - pub static SOLVENCYVERIFIER_ABI: ::ethers::contract::Lazy< - ::ethers::core::abi::Abi, - > = ::ethers::contract::Lazy::new(|| { - ::ethers::core::utils::__serde_json::from_str(__ABI) - .expect("ABI is always valid") - }); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 80, - 18, - 128, - 97, - 0, - 32, - 96, - 0, - 57, - 96, - 0, - 243, - 254, - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 43, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 189, - 32, - 90, - 144, - 20, - 97, - 0, - 48, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 67, - 97, - 0, - 62, - 54, - 96, - 4, - 97, - 78, - 212, - 86, - 91, - 97, - 0, - 87, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 0, - 96, - 1, - 97, - 0, - 99, - 97, - 77, - 253, - 86, - 91, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 189, - 131, - 57, - 129, - 81, - 145, - 82, - 97, - 0, - 217, - 86, - 91, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 157, - 131, - 57, - 129, - 81, - 145, - 82, - 128, - 131, - 16, - 129, - 131, - 16, - 22, - 144, - 131, - 128, - 9, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 157, - 131, - 57, - 129, - 81, - 145, - 82, - 131, - 132, - 9, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 157, - 131, - 57, - 129, - 81, - 145, - 82, - 132, - 130, - 9, - 144, - 80, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 157, - 131, - 57, - 129, - 81, - 145, - 82, - 96, - 3, - 130, - 8, - 145, - 144, - 145, - 20, - 145, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 128, - 96, - 32, - 135, - 1, - 81, - 6, - 96, - 32, - 131, - 1, - 82, - 128, - 96, - 64, - 135, - 1, - 81, - 6, - 96, - 64, - 131, - 1, - 82, - 128, - 96, - 96, - 135, - 1, - 81, - 6, - 96, - 96, - 131, - 1, - 82, - 126, - 174, - 153, - 177, - 55, - 145, - 111, - 244, - 34, - 11, - 13, - 167, - 23, - 154, - 70, - 1, - 48, - 28, - 130, - 52, - 111, - 198, - 101, - 205, - 51, - 105, - 165, - 78, - 31, - 2, - 212, - 234, - 96, - 0, - 131, - 1, - 82, - 96, - 32, - 133, - 1, - 81, - 128, - 96, - 128, - 132, - 1, - 82, - 96, - 64, - 134, - 1, - 81, - 128, - 96, - 160, - 133, - 1, - 82, - 132, - 97, - 1, - 67, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 96, - 96, - 133, - 1, - 81, - 128, - 96, - 192, - 132, - 1, - 82, - 96, - 128, - 134, - 1, - 81, - 128, - 96, - 224, - 133, - 1, - 82, - 132, - 97, - 1, - 105, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 96, - 160, - 133, - 1, - 81, - 128, - 97, - 1, - 0, - 132, - 1, - 82, - 96, - 192, - 134, - 1, - 81, - 128, - 97, - 1, - 32, - 133, - 1, - 82, - 132, - 97, - 1, - 145, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 64, - 96, - 0, - 131, - 1, - 32, - 97, - 1, - 64, - 131, - 1, - 82, - 97, - 1, - 64, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 1, - 96, - 132, - 1, - 82, - 128, - 97, - 1, - 128, - 132, - 1, - 82, - 80, - 96, - 224, - 133, - 1, - 81, - 128, - 97, - 1, - 160, - 132, - 1, - 82, - 97, - 1, - 0, - 134, - 1, - 81, - 128, - 97, - 1, - 192, - 133, - 1, - 82, - 132, - 97, - 1, - 223, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 32, - 133, - 1, - 81, - 128, - 97, - 1, - 224, - 132, - 1, - 82, - 97, - 1, - 64, - 134, - 1, - 81, - 128, - 97, - 2, - 0, - 133, - 1, - 82, - 132, - 97, - 2, - 9, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 96, - 160, - 97, - 1, - 128, - 135, - 1, - 32, - 97, - 2, - 32, - 135, - 1, - 129, - 144, - 82, - 133, - 129, - 6, - 97, - 2, - 64, - 136, - 1, - 82, - 97, - 2, - 96, - 135, - 1, - 82, - 22, - 148, - 80, - 96, - 1, - 145, - 80, - 80, - 97, - 2, - 128, - 131, - 1, - 83, - 96, - 33, - 97, - 2, - 96, - 131, - 1, - 32, - 97, - 2, - 128, - 131, - 1, - 129, - 144, - 82, - 129, - 129, - 6, - 97, - 2, - 160, - 132, - 1, - 82, - 97, - 2, - 192, - 131, - 1, - 82, - 97, - 1, - 96, - 133, - 1, - 81, - 97, - 2, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 1, - 128, - 134, - 1, - 81, - 97, - 3, - 0, - 132, - 1, - 129, - 144, - 82, - 132, - 97, - 2, - 124, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 160, - 133, - 1, - 81, - 128, - 97, - 3, - 32, - 132, - 1, - 82, - 97, - 1, - 192, - 134, - 1, - 81, - 128, - 97, - 3, - 64, - 133, - 1, - 82, - 132, - 97, - 2, - 166, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 224, - 133, - 1, - 81, - 128, - 97, - 3, - 96, - 132, - 1, - 82, - 97, - 2, - 0, - 134, - 1, - 81, - 128, - 97, - 3, - 128, - 133, - 1, - 82, - 132, - 97, - 2, - 208, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 2, - 32, - 133, - 1, - 81, - 128, - 97, - 3, - 160, - 132, - 1, - 82, - 97, - 2, - 64, - 134, - 1, - 81, - 128, - 97, - 3, - 192, - 133, - 1, - 82, - 132, - 97, - 2, - 250, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 32, - 97, - 2, - 192, - 131, - 1, - 32, - 97, - 3, - 224, - 131, - 1, - 82, - 97, - 3, - 224, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 4, - 0, - 132, - 1, - 82, - 128, - 97, - 4, - 32, - 132, - 1, - 82, - 80, - 97, - 2, - 96, - 133, - 1, - 81, - 128, - 97, - 4, - 64, - 132, - 1, - 82, - 97, - 2, - 128, - 134, - 1, - 81, - 128, - 97, - 4, - 96, - 133, - 1, - 82, - 132, - 97, - 3, - 74, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 2, - 160, - 133, - 1, - 81, - 128, - 97, - 4, - 128, - 132, - 1, - 82, - 97, - 2, - 192, - 134, - 1, - 81, - 128, - 97, - 4, - 160, - 133, - 1, - 82, - 132, - 97, - 3, - 116, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 2, - 224, - 133, - 1, - 81, - 128, - 97, - 4, - 192, - 132, - 1, - 82, - 97, - 3, - 0, - 134, - 1, - 81, - 128, - 97, - 4, - 224, - 133, - 1, - 82, - 132, - 97, - 3, - 158, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 3, - 32, - 133, - 1, - 81, - 128, - 97, - 5, - 0, - 132, - 1, - 82, - 97, - 3, - 64, - 134, - 1, - 81, - 128, - 97, - 5, - 32, - 133, - 1, - 82, - 132, - 97, - 3, - 200, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 3, - 96, - 133, - 1, - 81, - 128, - 97, - 5, - 64, - 132, - 1, - 82, - 97, - 3, - 128, - 134, - 1, - 81, - 128, - 97, - 5, - 96, - 133, - 1, - 82, - 132, - 97, - 3, - 242, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 96, - 97, - 4, - 32, - 131, - 1, - 32, - 97, - 5, - 128, - 131, - 1, - 82, - 97, - 5, - 128, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 5, - 160, - 132, - 1, - 82, - 128, - 97, - 5, - 192, - 132, - 1, - 82, - 80, - 128, - 97, - 3, - 160, - 134, - 1, - 81, - 6, - 97, - 5, - 224, - 131, - 1, - 82, - 128, - 97, - 3, - 192, - 134, - 1, - 81, - 6, - 97, - 6, - 0, - 131, - 1, - 82, - 128, - 97, - 3, - 224, - 134, - 1, - 81, - 6, - 97, - 6, - 32, - 131, - 1, - 82, - 128, - 97, - 4, - 0, - 134, - 1, - 81, - 6, - 97, - 6, - 64, - 131, - 1, - 82, - 128, - 97, - 4, - 32, - 134, - 1, - 81, - 6, - 97, - 6, - 96, - 131, - 1, - 82, - 128, - 97, - 4, - 64, - 134, - 1, - 81, - 6, - 97, - 6, - 128, - 131, - 1, - 82, - 128, - 97, - 4, - 96, - 134, - 1, - 81, - 6, - 97, - 6, - 160, - 131, - 1, - 82, - 128, - 97, - 4, - 128, - 134, - 1, - 81, - 6, - 97, - 6, - 192, - 131, - 1, - 82, - 128, - 97, - 4, - 160, - 134, - 1, - 81, - 6, - 97, - 6, - 224, - 131, - 1, - 82, - 128, - 97, - 4, - 192, - 134, - 1, - 81, - 6, - 97, - 7, - 0, - 131, - 1, - 82, - 128, - 97, - 4, - 224, - 134, - 1, - 81, - 6, - 97, - 7, - 32, - 131, - 1, - 82, - 128, - 97, - 5, - 0, - 134, - 1, - 81, - 6, - 97, - 7, - 64, - 131, - 1, - 82, - 128, - 97, - 5, - 32, - 134, - 1, - 81, - 6, - 97, - 7, - 96, - 131, - 1, - 82, - 128, - 97, - 5, - 64, - 134, - 1, - 81, - 6, - 97, - 7, - 128, - 131, - 1, - 82, - 128, - 97, - 5, - 96, - 134, - 1, - 81, - 6, - 97, - 7, - 160, - 131, - 1, - 82, - 128, - 97, - 5, - 128, - 134, - 1, - 81, - 6, - 97, - 7, - 192, - 131, - 1, - 82, - 128, - 97, - 5, - 160, - 134, - 1, - 81, - 6, - 97, - 7, - 224, - 131, - 1, - 82, - 128, - 97, - 5, - 192, - 134, - 1, - 81, - 6, - 97, - 8, - 0, - 131, - 1, - 82, - 128, - 97, - 5, - 224, - 134, - 1, - 81, - 6, - 97, - 8, - 32, - 131, - 1, - 82, - 128, - 97, - 6, - 0, - 134, - 1, - 81, - 6, - 97, - 8, - 64, - 131, - 1, - 82, - 128, - 97, - 6, - 32, - 134, - 1, - 81, - 6, - 97, - 8, - 96, - 131, - 1, - 82, - 128, - 97, - 6, - 64, - 134, - 1, - 81, - 6, - 97, - 8, - 128, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 134, - 1, - 81, - 6, - 97, - 8, - 160, - 131, - 1, - 82, - 128, - 97, - 6, - 128, - 134, - 1, - 81, - 6, - 97, - 8, - 192, - 131, - 1, - 82, - 128, - 97, - 6, - 160, - 134, - 1, - 81, - 6, - 97, - 8, - 224, - 131, - 1, - 82, - 128, - 97, - 6, - 192, - 134, - 1, - 81, - 6, - 97, - 9, - 0, - 131, - 1, - 82, - 128, - 97, - 6, - 224, - 134, - 1, - 81, - 6, - 97, - 9, - 32, - 131, - 1, - 82, - 128, - 97, - 7, - 0, - 134, - 1, - 81, - 6, - 97, - 9, - 64, - 131, - 1, - 82, - 128, - 97, - 7, - 32, - 134, - 1, - 81, - 6, - 97, - 9, - 96, - 131, - 1, - 82, - 128, - 97, - 7, - 64, - 134, - 1, - 81, - 6, - 97, - 9, - 128, - 131, - 1, - 82, - 128, - 97, - 7, - 96, - 134, - 1, - 81, - 6, - 97, - 9, - 160, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 134, - 1, - 81, - 6, - 97, - 9, - 192, - 131, - 1, - 82, - 128, - 97, - 7, - 160, - 134, - 1, - 81, - 6, - 97, - 9, - 224, - 131, - 1, - 82, - 97, - 4, - 64, - 97, - 5, - 192, - 131, - 1, - 32, - 97, - 10, - 0, - 131, - 1, - 82, - 97, - 10, - 0, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 10, - 32, - 132, - 1, - 82, - 128, - 97, - 10, - 64, - 132, - 1, - 82, - 80, - 96, - 1, - 97, - 10, - 96, - 131, - 1, - 83, - 96, - 33, - 97, - 10, - 64, - 131, - 1, - 32, - 97, - 10, - 96, - 131, - 1, - 129, - 144, - 82, - 129, - 129, - 6, - 97, - 10, - 128, - 132, - 1, - 82, - 97, - 10, - 160, - 131, - 1, - 82, - 97, - 7, - 192, - 133, - 1, - 81, - 97, - 10, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 224, - 134, - 1, - 81, - 97, - 10, - 224, - 132, - 1, - 129, - 144, - 82, - 132, - 97, - 6, - 95, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 96, - 96, - 97, - 10, - 160, - 131, - 1, - 32, - 97, - 11, - 0, - 131, - 1, - 82, - 97, - 11, - 0, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 11, - 32, - 132, - 1, - 82, - 128, - 97, - 11, - 64, - 132, - 1, - 82, - 80, - 97, - 8, - 0, - 133, - 1, - 81, - 128, - 97, - 11, - 96, - 132, - 1, - 82, - 97, - 8, - 32, - 134, - 1, - 81, - 128, - 97, - 11, - 128, - 133, - 1, - 82, - 132, - 97, - 6, - 174, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 128, - 97, - 5, - 160, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 11, - 160, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 11, - 192, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 11, - 224, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 0, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 32, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 64, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 96, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 128, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 160, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 192, - 131, - 1, - 82, - 128, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 0, - 97, - 12, - 192, - 132, - 1, - 81, - 8, - 97, - 12, - 224, - 131, - 1, - 82, - 128, - 127, - 48, - 88, - 53, - 95, - 68, - 121, - 83, - 193, - 173, - 226, - 49, - 165, - 19, - 224, - 248, - 7, - 16, - 233, - 219, - 78, - 103, - 155, - 2, - 53, - 31, - 144, - 253, - 22, - 139, - 4, - 0, - 1, - 97, - 12, - 224, - 132, - 1, - 81, - 9, - 97, - 13, - 0, - 131, - 1, - 82, - 128, - 127, - 21, - 247, - 157, - 185, - 195, - 145, - 129, - 188, - 62, - 49, - 200, - 63, - 146, - 145, - 218, - 118, - 238, - 223, - 27, - 35, - 196, - 16, - 173, - 215, - 233, - 9, - 132, - 100, - 170, - 164, - 251, - 38, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 13, - 32, - 131, - 1, - 82, - 128, - 127, - 26, - 108, - 176, - 185, - 29, - 160, - 30, - 109, - 122, - 30, - 125, - 118, - 238, - 239, - 125, - 230, - 57, - 84, - 205, - 36, - 181, - 168, - 194, - 185, - 90, - 216, - 113, - 47, - 69, - 91, - 4, - 219, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 13, - 64, - 131, - 1, - 82, - 128, - 127, - 3, - 183, - 67, - 215, - 79, - 217, - 221, - 180, - 31, - 146, - 1, - 121, - 172, - 48, - 224, - 75, - 14, - 189, - 147, - 229, - 128, - 185, - 192, - 181, - 0, - 97, - 8, - 121, - 4, - 17, - 11, - 212, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 13, - 96, - 131, - 1, - 82, - 128, - 127, - 44, - 173, - 10, - 155, - 145, - 87, - 194, - 117, - 152, - 190, - 68, - 60, - 213, - 80, - 120, - 18, - 25, - 118, - 84, - 98, - 248, - 255, - 175, - 220, - 67, - 128, - 237, - 26, - 235, - 238, - 244, - 45, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 13, - 128, - 131, - 1, - 82, - 128, - 127, - 31, - 77, - 113, - 128, - 223, - 80, - 20, - 132, - 152, - 37, - 243, - 201, - 176, - 232, - 157, - 121, - 67, - 44, - 81, - 244, - 142, - 181, - 132, - 106, - 230, - 59, - 67, - 63, - 40, - 171, - 161, - 11, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 13, - 160, - 131, - 1, - 82, - 128, - 127, - 17, - 22, - 220, - 242, - 1, - 225, - 139, - 165, - 32, - 42, - 81, - 236, - 208, - 152, - 186, - 227, - 229, - 7, - 150, - 83, - 235, - 3, - 236, - 38, - 93, - 166, - 178, - 84, - 199, - 84, - 94, - 246, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 13, - 192, - 131, - 1, - 82, - 128, - 127, - 34, - 181, - 86, - 3, - 88, - 109, - 95, - 196, - 44, - 108, - 20, - 194, - 252, - 39, - 160, - 40, - 194, - 7, - 218, - 139, - 44, - 113, - 203, - 51, - 213, - 73, - 250, - 74, - 43, - 229, - 211, - 2, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 13, - 224, - 131, - 1, - 82, - 128, - 127, - 13, - 174, - 248, - 111, - 136, - 196, - 64, - 101, - 139, - 228, - 48, - 243, - 133, - 89, - 184, - 52, - 102, - 44, - 13, - 189, - 77, - 71, - 165, - 93, - 110, - 151, - 251, - 73, - 196, - 26, - 44, - 255, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 14, - 0, - 131, - 1, - 82, - 128, - 127, - 9, - 107, - 159, - 139, - 133, - 152, - 183, - 195, - 135, - 251, - 105, - 171, - 242, - 54, - 176, - 213, - 224, - 78, - 36, - 210, - 117, - 238, - 152, - 36, - 68, - 67, - 237, - 165, - 211, - 188, - 64, - 53, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 14, - 32, - 131, - 1, - 82, - 128, - 127, - 38, - 248, - 174, - 231, - 91, - 152, - 232, - 102, - 48, - 84, - 220, - 10, - 143, - 74, - 167, - 135, - 71, - 229, - 195, - 118, - 3, - 202, - 216, - 108, - 255, - 158, - 7, - 238, - 28, - 67, - 191, - 204, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 14, - 64, - 131, - 1, - 82, - 128, - 127, - 10, - 227, - 201, - 95, - 192, - 60, - 10, - 95, - 45, - 232, - 168, - 244, - 108, - 3, - 204, - 223, - 223, - 237, - 43, - 185, - 140, - 158, - 74, - 224, - 177, - 11, - 21, - 237, - 164, - 227, - 177, - 227, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 14, - 96, - 131, - 1, - 82, - 128, - 127, - 37, - 128, - 133, - 19, - 32, - 245, - 149, - 202, - 138, - 103, - 156, - 194, - 21, - 125, - 139, - 125, - 72, - 70, - 188, - 142, - 237, - 27, - 37, - 176, - 146, - 214, - 223, - 166, - 75, - 28, - 78, - 30, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 14, - 128, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 14, - 160, - 131, - 1, - 82, - 128, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 0, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 14, - 192, - 131, - 1, - 82, - 128, - 127, - 42, - 217, - 2, - 30, - 208, - 124, - 66, - 171, - 25, - 247, - 124, - 92, - 242, - 203, - 210, - 222, - 177, - 53, - 234, - 51, - 15, - 27, - 21, - 115, - 189, - 8, - 217, - 147, - 9, - 196, - 187, - 125, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 14, - 224, - 131, - 1, - 82, - 128, - 127, - 5, - 139, - 76, - 84, - 16, - 181, - 93, - 126, - 158, - 88, - 201, - 89, - 142, - 181, - 133, - 126, - 118, - 253, - 254, - 21, - 106, - 158, - 91, - 29, - 134, - 217, - 28, - 0, - 230, - 59, - 68, - 132, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 15, - 0, - 131, - 1, - 82, - 128, - 127, - 13, - 211, - 11, - 154, - 216, - 193, - 115, - 85, - 93, - 42, - 51, - 2, - 155, - 200, - 7, - 172, - 22, - 91, - 97, - 40, - 30, - 144, - 84, - 161, - 115, - 175, - 127, - 244, - 228, - 252, - 136, - 252, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 15, - 32, - 131, - 1, - 82, - 128, - 127, - 34, - 145, - 66, - 216, - 8, - 112, - 44, - 212, - 91, - 38, - 18, - 179, - 229, - 185, - 80, - 177, - 17, - 216, - 135, - 32, - 91, - 41, - 27, - 239, - 208, - 50, - 117, - 159, - 11, - 3, - 119, - 5, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 15, - 64, - 131, - 1, - 82, - 97, - 13, - 64, - 130, - 1, - 81, - 129, - 129, - 97, - 13, - 128, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 96, - 132, - 1, - 82, - 129, - 129, - 97, - 13, - 192, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 128, - 132, - 1, - 82, - 129, - 129, - 97, - 14, - 0, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 160, - 132, - 1, - 82, - 129, - 129, - 97, - 14, - 64, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 192, - 132, - 1, - 82, - 129, - 129, - 97, - 14, - 128, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 224, - 132, - 1, - 82, - 129, - 129, - 97, - 14, - 192, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 16, - 0, - 132, - 1, - 82, - 129, - 129, - 97, - 15, - 0, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 16, - 32, - 132, - 1, - 82, - 129, - 129, - 97, - 15, - 64, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 16, - 64, - 132, - 1, - 82, - 129, - 129, - 97, - 12, - 224, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 16, - 96, - 132, - 1, - 82, - 80, - 96, - 32, - 97, - 16, - 160, - 131, - 1, - 82, - 96, - 32, - 97, - 16, - 192, - 131, - 1, - 82, - 96, - 32, - 97, - 16, - 224, - 131, - 1, - 82, - 97, - 16, - 96, - 130, - 1, - 81, - 97, - 17, - 0, - 131, - 1, - 82, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 239, - 255, - 255, - 255, - 97, - 17, - 32, - 131, - 1, - 82, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 189, - 131, - 57, - 129, - 81, - 145, - 82, - 97, - 17, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 32, - 97, - 16, - 128, - 133, - 1, - 96, - 192, - 97, - 16, - 160, - 135, - 1, - 96, - 5, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 16, - 128, - 130, - 1, - 81, - 96, - 0, - 97, - 12, - 224, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 16, - 64, - 134, - 1, - 81, - 9, - 97, - 12, - 224, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 15, - 64, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 16, - 32, - 134, - 1, - 81, - 9, - 97, - 15, - 64, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 15, - 0, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 16, - 0, - 134, - 1, - 81, - 9, - 97, - 15, - 0, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 14, - 192, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 224, - 134, - 1, - 81, - 9, - 97, - 14, - 192, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 14, - 128, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 192, - 134, - 1, - 81, - 9, - 97, - 14, - 128, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 14, - 64, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 160, - 134, - 1, - 81, - 9, - 97, - 14, - 64, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 14, - 0, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 128, - 134, - 1, - 81, - 9, - 97, - 14, - 0, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 13, - 192, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 96, - 134, - 1, - 81, - 9, - 97, - 13, - 192, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 13, - 128, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 13, - 64, - 134, - 1, - 81, - 9, - 97, - 13, - 128, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 97, - 13, - 64, - 133, - 1, - 129, - 144, - 82, - 97, - 13, - 32, - 133, - 1, - 81, - 132, - 147, - 80, - 144, - 145, - 80, - 9, - 97, - 17, - 96, - 131, - 1, - 82, - 128, - 97, - 13, - 128, - 131, - 1, - 81, - 97, - 13, - 96, - 132, - 1, - 81, - 9, - 97, - 17, - 128, - 131, - 1, - 82, - 128, - 97, - 13, - 192, - 131, - 1, - 81, - 97, - 13, - 160, - 132, - 1, - 81, - 9, - 97, - 17, - 160, - 131, - 1, - 82, - 128, - 97, - 14, - 0, - 131, - 1, - 81, - 97, - 13, - 224, - 132, - 1, - 81, - 9, - 97, - 17, - 192, - 131, - 1, - 82, - 128, - 97, - 14, - 64, - 131, - 1, - 81, - 97, - 14, - 32, - 132, - 1, - 81, - 9, - 97, - 17, - 224, - 131, - 1, - 82, - 128, - 97, - 14, - 128, - 131, - 1, - 81, - 97, - 14, - 96, - 132, - 1, - 81, - 9, - 97, - 18, - 0, - 131, - 1, - 82, - 128, - 97, - 14, - 192, - 131, - 1, - 81, - 97, - 14, - 160, - 132, - 1, - 81, - 9, - 97, - 18, - 32, - 131, - 1, - 82, - 128, - 97, - 15, - 0, - 131, - 1, - 81, - 97, - 14, - 224, - 132, - 1, - 81, - 9, - 97, - 18, - 64, - 131, - 1, - 82, - 128, - 97, - 15, - 64, - 131, - 1, - 81, - 97, - 15, - 32, - 132, - 1, - 81, - 9, - 97, - 18, - 96, - 131, - 1, - 82, - 128, - 96, - 32, - 131, - 1, - 81, - 97, - 18, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 96, - 64, - 134, - 1, - 81, - 97, - 18, - 64, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 129, - 129, - 131, - 96, - 96, - 134, - 1, - 81, - 97, - 18, - 96, - 135, - 1, - 81, - 9, - 8, - 97, - 18, - 128, - 132, - 1, - 82, - 80, - 97, - 7, - 32, - 130, - 1, - 81, - 97, - 5, - 224, - 131, - 1, - 81, - 130, - 145, - 144, - 8, - 97, - 18, - 160, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 18, - 192, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 18, - 224, - 131, - 1, - 82, - 128, - 97, - 18, - 224, - 131, - 1, - 81, - 97, - 18, - 160, - 132, - 1, - 81, - 9, - 97, - 19, - 0, - 131, - 1, - 82, - 128, - 127, - 6, - 111, - 111, - 133, - 214, - 246, - 138, - 133, - 236, - 16, - 52, - 83, - 81, - 162, - 58, - 58, - 175, - 7, - 243, - 138, - 248, - 201, - 82, - 167, - 188, - 236, - 167, - 11, - 210, - 175, - 122, - 213, - 97, - 19, - 0, - 132, - 1, - 81, - 9, - 97, - 19, - 32, - 131, - 1, - 82, - 128, - 97, - 7, - 64, - 131, - 1, - 81, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 19, - 64, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 19, - 96, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 19, - 128, - 131, - 1, - 82, - 128, - 97, - 19, - 128, - 131, - 1, - 81, - 97, - 19, - 64, - 132, - 1, - 81, - 9, - 97, - 19, - 160, - 131, - 1, - 82, - 128, - 127, - 43, - 157, - 75, - 65, - 16, - 201, - 174, - 153, - 119, - 130, - 225, - 80, - 155, - 29, - 15, - 219, - 32, - 167, - 192, - 43, - 189, - 139, - 234, - 115, - 5, - 70, - 43, - 159, - 129, - 37, - 177, - 232, - 97, - 19, - 160, - 132, - 1, - 81, - 9, - 97, - 19, - 192, - 131, - 1, - 82, - 128, - 97, - 19, - 192, - 131, - 1, - 81, - 97, - 19, - 32, - 132, - 1, - 81, - 8, - 97, - 19, - 224, - 131, - 1, - 82, - 128, - 97, - 6, - 32, - 131, - 1, - 81, - 130, - 3, - 97, - 19, - 224, - 132, - 1, - 81, - 8, - 97, - 20, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 160, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 20, - 32, - 131, - 1, - 82, - 128, - 97, - 20, - 32, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 20, - 64, - 131, - 1, - 82, - 128, - 127, - 12, - 197, - 124, - 219, - 176, - 133, - 7, - 214, - 43, - 246, - 122, - 68, - 147, - 204, - 38, - 47, - 182, - 192, - 157, - 85, - 112, - 19, - 255, - 241, - 245, - 115, - 244, - 49, - 34, - 31, - 143, - 249, - 97, - 19, - 0, - 132, - 1, - 81, - 9, - 97, - 20, - 96, - 131, - 1, - 82, - 128, - 127, - 18, - 116, - 230, - 73, - 163, - 46, - 211, - 85, - 163, - 26, - 110, - 214, - 151, - 36, - 225, - 173, - 173, - 232, - 87, - 232, - 110, - 181, - 195, - 161, - 33, - 188, - 209, - 71, - 148, - 50, - 3, - 200, - 97, - 19, - 160, - 132, - 1, - 81, - 9, - 97, - 20, - 128, - 131, - 1, - 82, - 128, - 97, - 20, - 128, - 131, - 1, - 81, - 97, - 20, - 96, - 132, - 1, - 81, - 8, - 97, - 20, - 160, - 131, - 1, - 82, - 128, - 97, - 6, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 20, - 160, - 132, - 1, - 81, - 8, - 97, - 20, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 160, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 20, - 224, - 131, - 1, - 82, - 128, - 97, - 20, - 224, - 131, - 1, - 81, - 97, - 20, - 64, - 132, - 1, - 81, - 8, - 97, - 21, - 0, - 131, - 1, - 82, - 128, - 97, - 21, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 21, - 32, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 130, - 3, - 97, - 19, - 0, - 132, - 1, - 81, - 8, - 97, - 21, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 21, - 96, - 131, - 1, - 82, - 128, - 97, - 21, - 96, - 131, - 1, - 81, - 97, - 21, - 32, - 132, - 1, - 81, - 8, - 97, - 21, - 128, - 131, - 1, - 82, - 128, - 97, - 21, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 21, - 160, - 131, - 1, - 82, - 128, - 127, - 6, - 111, - 111, - 133, - 214, - 246, - 138, - 133, - 236, - 16, - 52, - 83, - 81, - 162, - 58, - 58, - 175, - 7, - 243, - 138, - 248, - 201, - 82, - 167, - 188, - 236, - 167, - 11, - 210, - 175, - 122, - 213, - 97, - 6, - 96, - 132, - 1, - 81, - 9, - 97, - 21, - 192, - 131, - 1, - 82, - 128, - 127, - 43, - 157, - 75, - 65, - 16, - 201, - 174, - 153, - 119, - 130, - 225, - 80, - 155, - 29, - 15, - 219, - 32, - 167, - 192, - 43, - 189, - 139, - 234, - 115, - 5, - 70, - 43, - 159, - 129, - 37, - 177, - 232, - 97, - 19, - 64, - 132, - 1, - 81, - 9, - 97, - 21, - 224, - 131, - 1, - 82, - 128, - 97, - 21, - 224, - 131, - 1, - 81, - 97, - 21, - 192, - 132, - 1, - 81, - 8, - 97, - 22, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 6, - 224, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 22, - 32, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 22, - 64, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 22, - 96, - 131, - 1, - 82, - 128, - 97, - 22, - 96, - 131, - 1, - 81, - 97, - 22, - 32, - 132, - 1, - 81, - 9, - 97, - 22, - 128, - 131, - 1, - 82, - 128, - 127, - 19, - 171, - 236, - 57, - 10, - 218, - 127, - 67, - 112, - 129, - 154, - 177, - 199, - 132, - 111, - 33, - 5, - 84, - 86, - 157, - 155, - 41, - 209, - 234, - 141, - 190, - 189, - 15, - 168, - 197, - 62, - 102, - 97, - 6, - 32, - 132, - 1, - 81, - 9, - 97, - 22, - 160, - 131, - 1, - 82, - 128, - 127, - 30, - 185, - 225, - 220, - 25, - 163, - 58, - 98, - 76, - 152, - 98, - 161, - 217, - 125, - 21, - 16, - 189, - 82, - 30, - 173, - 93, - 254, - 3, - 69, - 170, - 246, - 24, - 91, - 26, - 30, - 96, - 254, - 97, - 6, - 64, - 132, - 1, - 81, - 9, - 97, - 22, - 192, - 131, - 1, - 82, - 128, - 97, - 22, - 192, - 131, - 1, - 81, - 97, - 22, - 160, - 132, - 1, - 81, - 8, - 97, - 22, - 224, - 131, - 1, - 82, - 128, - 97, - 22, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 22, - 128, - 132, - 1, - 81, - 8, - 97, - 23, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 23, - 32, - 131, - 1, - 82, - 128, - 97, - 23, - 32, - 131, - 1, - 81, - 97, - 21, - 160, - 132, - 1, - 81, - 8, - 97, - 23, - 64, - 131, - 1, - 82, - 128, - 97, - 23, - 64, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 23, - 96, - 131, - 1, - 82, - 128, - 127, - 12, - 197, - 124, - 219, - 176, - 133, - 7, - 214, - 43, - 246, - 122, - 68, - 147, - 204, - 38, - 47, - 182, - 192, - 157, - 85, - 112, - 19, - 255, - 241, - 245, - 115, - 244, - 49, - 34, - 31, - 143, - 249, - 97, - 6, - 96, - 132, - 1, - 81, - 9, - 97, - 23, - 128, - 131, - 1, - 82, - 128, - 127, - 18, - 116, - 230, - 73, - 163, - 46, - 211, - 85, - 163, - 26, - 110, - 214, - 151, - 36, - 225, - 173, - 173, - 232, - 87, - 232, - 110, - 181, - 195, - 161, - 33, - 188, - 209, - 71, - 148, - 50, - 3, - 200, - 97, - 19, - 64, - 132, - 1, - 81, - 9, - 97, - 23, - 160, - 131, - 1, - 82, - 128, - 97, - 23, - 160, - 131, - 1, - 81, - 97, - 23, - 128, - 132, - 1, - 81, - 8, - 97, - 23, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 0, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 23, - 224, - 131, - 1, - 82, - 128, - 127, - 15, - 193, - 201, - 57, - 77, - 184, - 155, - 178, - 96, - 26, - 188, - 73, - 253, - 173, - 79, - 3, - 140, - 229, - 22, - 144, - 48, - 162, - 173, - 105, - 118, - 63, - 120, - 117, - 3, - 107, - 203, - 2, - 97, - 6, - 32, - 132, - 1, - 81, - 9, - 97, - 24, - 0, - 131, - 1, - 82, - 128, - 127, - 22, - 169, - 233, - 140, - 73, - 58, - 144, - 43, - 149, - 2, - 5, - 78, - 220, - 3, - 231, - 178, - 43, - 126, - 172, - 52, - 52, - 89, - 97, - 188, - 138, - 188, - 237, - 107, - 209, - 71, - 200, - 190, - 97, - 6, - 64, - 132, - 1, - 81, - 9, - 97, - 24, - 32, - 131, - 1, - 82, - 128, - 97, - 24, - 32, - 131, - 1, - 81, - 97, - 24, - 0, - 132, - 1, - 81, - 8, - 97, - 24, - 64, - 131, - 1, - 82, - 128, - 97, - 24, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 23, - 224, - 132, - 1, - 81, - 8, - 97, - 24, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 24, - 128, - 131, - 1, - 82, - 128, - 97, - 24, - 128, - 131, - 1, - 81, - 97, - 23, - 96, - 132, - 1, - 81, - 8, - 97, - 24, - 160, - 131, - 1, - 82, - 128, - 97, - 24, - 160, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 24, - 192, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 24, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 25, - 0, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 3, - 96, - 2, - 8, - 97, - 25, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 25, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 25, - 64, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 3, - 96, - 3, - 8, - 97, - 25, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 25, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 25, - 128, - 131, - 1, - 82, - 128, - 97, - 5, - 224, - 131, - 1, - 81, - 97, - 6, - 160, - 132, - 1, - 81, - 8, - 97, - 25, - 160, - 131, - 1, - 82, - 128, - 97, - 6, - 32, - 131, - 1, - 81, - 130, - 3, - 97, - 25, - 160, - 132, - 1, - 81, - 8, - 97, - 25, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 25, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 25, - 224, - 131, - 1, - 82, - 128, - 97, - 25, - 224, - 131, - 1, - 81, - 97, - 24, - 192, - 132, - 1, - 81, - 8, - 97, - 26, - 0, - 131, - 1, - 82, - 128, - 97, - 26, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 26, - 32, - 131, - 1, - 82, - 128, - 97, - 6, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 128, - 132, - 1, - 81, - 8, - 97, - 26, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 25, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 26, - 96, - 131, - 1, - 82, - 128, - 97, - 26, - 96, - 131, - 1, - 81, - 97, - 26, - 32, - 132, - 1, - 81, - 8, - 97, - 26, - 128, - 131, - 1, - 82, - 128, - 97, - 26, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 26, - 160, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 97, - 25, - 32, - 132, - 1, - 81, - 9, - 97, - 26, - 192, - 131, - 1, - 82, - 128, - 97, - 26, - 192, - 131, - 1, - 81, - 97, - 25, - 96, - 132, - 1, - 81, - 9, - 97, - 26, - 224, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 3, - 96, - 4, - 8, - 97, - 27, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 26, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 27, - 32, - 131, - 1, - 82, - 128, - 97, - 27, - 32, - 131, - 1, - 81, - 97, - 6, - 96, - 132, - 1, - 81, - 9, - 97, - 27, - 64, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 27, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 27, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 27, - 128, - 131, - 1, - 82, - 128, - 97, - 27, - 128, - 131, - 1, - 81, - 97, - 26, - 160, - 132, - 1, - 81, - 8, - 97, - 27, - 160, - 131, - 1, - 82, - 128, - 97, - 27, - 160, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 27, - 192, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 96, - 2, - 9, - 97, - 27, - 224, - 131, - 1, - 82, - 128, - 97, - 5, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 28, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 27, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 28, - 32, - 131, - 1, - 82, - 128, - 97, - 5, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 32, - 132, - 1, - 81, - 8, - 97, - 28, - 64, - 131, - 1, - 82, - 128, - 97, - 28, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 28, - 32, - 132, - 1, - 81, - 8, - 97, - 28, - 96, - 131, - 1, - 82, - 128, - 97, - 6, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 28, - 128, - 131, - 1, - 82, - 128, - 97, - 28, - 128, - 131, - 1, - 81, - 130, - 3, - 97, - 28, - 96, - 132, - 1, - 81, - 8, - 97, - 28, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 27, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 28, - 192, - 131, - 1, - 82, - 128, - 97, - 28, - 192, - 131, - 1, - 81, - 97, - 27, - 192, - 132, - 1, - 81, - 8, - 97, - 28, - 224, - 131, - 1, - 82, - 128, - 97, - 28, - 224, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 29, - 0, - 131, - 1, - 82, - 128, - 97, - 25, - 0, - 131, - 1, - 81, - 97, - 25, - 96, - 132, - 1, - 81, - 9, - 97, - 29, - 32, - 131, - 1, - 82, - 128, - 97, - 29, - 32, - 131, - 1, - 81, - 97, - 27, - 0, - 132, - 1, - 81, - 9, - 97, - 29, - 64, - 131, - 1, - 82, - 128, - 97, - 6, - 0, - 131, - 1, - 81, - 97, - 5, - 224, - 132, - 1, - 81, - 8, - 97, - 29, - 96, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 130, - 3, - 97, - 29, - 96, - 132, - 1, - 81, - 8, - 97, - 29, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 29, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 29, - 160, - 131, - 1, - 82, - 128, - 97, - 29, - 160, - 131, - 1, - 81, - 97, - 29, - 0, - 132, - 1, - 81, - 8, - 97, - 29, - 192, - 131, - 1, - 82, - 128, - 97, - 29, - 192, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 29, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 29, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 30, - 0, - 131, - 1, - 82, - 128, - 97, - 30, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 30, - 32, - 131, - 1, - 82, - 128, - 97, - 25, - 64, - 131, - 1, - 81, - 97, - 27, - 0, - 132, - 1, - 81, - 9, - 97, - 30, - 64, - 131, - 1, - 82, - 128, - 97, - 6, - 0, - 131, - 1, - 81, - 130, - 3, - 97, - 5, - 224, - 132, - 1, - 81, - 8, - 97, - 30, - 96, - 131, - 1, - 82, - 128, - 96, - 1, - 96, - 112, - 27, - 97, - 30, - 96, - 132, - 1, - 81, - 8, - 97, - 30, - 128, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 130, - 3, - 97, - 30, - 128, - 132, - 1, - 81, - 8, - 97, - 30, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 30, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 30, - 192, - 131, - 1, - 82, - 128, - 97, - 30, - 192, - 131, - 1, - 81, - 97, - 30, - 32, - 132, - 1, - 81, - 8, - 97, - 30, - 224, - 131, - 1, - 82, - 128, - 97, - 30, - 224, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 31, - 0, - 131, - 1, - 82, - 128, - 97, - 8, - 192, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 31, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 31, - 64, - 131, - 1, - 82, - 128, - 97, - 31, - 64, - 131, - 1, - 81, - 97, - 31, - 0, - 132, - 1, - 81, - 8, - 97, - 31, - 96, - 131, - 1, - 82, - 128, - 97, - 31, - 96, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 31, - 128, - 131, - 1, - 82, - 97, - 9, - 32, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 31, - 160, - 131, - 1, - 82, - 128, - 97, - 9, - 32, - 131, - 1, - 81, - 130, - 3, - 97, - 31, - 160, - 132, - 1, - 81, - 8, - 97, - 31, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 17, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 31, - 224, - 131, - 1, - 82, - 128, - 97, - 31, - 224, - 131, - 1, - 81, - 97, - 31, - 128, - 132, - 1, - 81, - 8, - 97, - 32, - 0, - 131, - 1, - 82, - 128, - 97, - 32, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 32, - 32, - 131, - 1, - 82, - 128, - 97, - 9, - 0, - 131, - 1, - 81, - 130, - 3, - 97, - 9, - 32, - 132, - 1, - 81, - 8, - 97, - 32, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 32, - 96, - 131, - 1, - 82, - 128, - 97, - 32, - 96, - 131, - 1, - 81, - 97, - 32, - 32, - 132, - 1, - 81, - 8, - 97, - 32, - 128, - 131, - 1, - 82, - 128, - 97, - 32, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 32, - 160, - 131, - 1, - 82, - 128, - 97, - 17, - 96, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 32, - 192, - 131, - 1, - 82, - 128, - 97, - 17, - 160, - 131, - 1, - 81, - 97, - 17, - 128, - 132, - 1, - 81, - 8, - 97, - 32, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 17, - 192, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 33, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 17, - 224, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 33, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 0, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 33, - 64, - 131, - 1, - 82, - 128, - 97, - 33, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 32, - 192, - 132, - 1, - 81, - 8, - 97, - 33, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 0, - 132, - 1, - 81, - 9, - 97, - 33, - 128, - 131, - 1, - 82, - 128, - 97, - 33, - 128, - 131, - 1, - 81, - 97, - 6, - 224, - 132, - 1, - 81, - 8, - 97, - 33, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 33, - 192, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 32, - 132, - 1, - 81, - 9, - 97, - 33, - 224, - 131, - 1, - 82, - 128, - 97, - 33, - 224, - 131, - 1, - 81, - 97, - 5, - 224, - 132, - 1, - 81, - 8, - 97, - 34, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 34, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 33, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 34, - 64, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 64, - 132, - 1, - 81, - 9, - 97, - 34, - 96, - 131, - 1, - 82, - 128, - 97, - 34, - 96, - 131, - 1, - 81, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 34, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 34, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 34, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 34, - 192, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 96, - 132, - 1, - 81, - 9, - 97, - 34, - 224, - 131, - 1, - 82, - 128, - 97, - 34, - 224, - 131, - 1, - 81, - 97, - 7, - 0, - 132, - 1, - 81, - 8, - 97, - 35, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 35, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 34, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 35, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 8, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 35, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 35, - 128, - 131, - 1, - 82, - 128, - 97, - 35, - 128, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 35, - 160, - 131, - 1, - 82, - 128, - 97, - 35, - 160, - 131, - 1, - 81, - 97, - 6, - 224, - 132, - 1, - 81, - 8, - 97, - 35, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 35, - 224, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 127, - 9, - 34, - 107, - 110, - 34, - 198, - 240, - 202, - 100, - 236, - 38, - 170, - 212, - 200, - 110, - 113, - 91, - 95, - 137, - 142, - 94, - 150, - 63, - 37, - 135, - 14, - 86, - 187, - 229, - 51, - 233, - 162, - 9, - 97, - 36, - 0, - 131, - 1, - 82, - 128, - 97, - 36, - 0, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 36, - 32, - 131, - 1, - 82, - 128, - 97, - 36, - 32, - 131, - 1, - 81, - 97, - 5, - 224, - 132, - 1, - 81, - 8, - 97, - 36, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 36, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 35, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 36, - 128, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 127, - 19, - 179, - 96, - 212, - 232, - 47, - 233, - 21, - 254, - 209, - 96, - 129, - 3, - 143, - 152, - 194, - 17, - 66, - 123, - 135, - 162, - 129, - 189, - 115, - 60, - 39, - 125, - 186, - 223, - 16, - 55, - 43, - 9, - 97, - 36, - 160, - 131, - 1, - 82, - 128, - 97, - 36, - 160, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 36, - 192, - 131, - 1, - 82, - 128, - 97, - 36, - 192, - 131, - 1, - 81, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 36, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 37, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 36, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 37, - 32, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 127, - 24, - 175, - 223, - 35, - 233, - 189, - 147, - 2, - 103, - 63, - 193, - 224, - 118, - 164, - 146, - 212, - 214, - 91, - 209, - 142, - 188, - 77, - 133, - 78, - 209, - 137, - 19, - 155, - 171, - 49, - 62, - 82, - 9, - 97, - 37, - 64, - 131, - 1, - 82, - 128, - 97, - 37, - 64, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 37, - 96, - 131, - 1, - 82, - 128, - 97, - 37, - 96, - 131, - 1, - 81, - 97, - 7, - 0, - 132, - 1, - 81, - 8, - 97, - 37, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 37, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 37, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 37, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 8, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 37, - 224, - 131, - 1, - 82, - 128, - 97, - 37, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 35, - 96, - 132, - 1, - 81, - 8, - 97, - 38, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 33, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 38, - 32, - 131, - 1, - 82, - 128, - 97, - 38, - 32, - 131, - 1, - 81, - 97, - 32, - 160, - 132, - 1, - 81, - 8, - 97, - 38, - 64, - 131, - 1, - 82, - 128, - 97, - 38, - 64, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 38, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 128, - 132, - 1, - 81, - 9, - 97, - 38, - 128, - 131, - 1, - 82, - 128, - 97, - 38, - 128, - 131, - 1, - 81, - 97, - 6, - 96, - 132, - 1, - 81, - 8, - 97, - 38, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 38, - 192, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 160, - 132, - 1, - 81, - 9, - 97, - 38, - 224, - 131, - 1, - 82, - 128, - 97, - 38, - 224, - 131, - 1, - 81, - 97, - 18, - 128, - 132, - 1, - 81, - 8, - 97, - 39, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 39, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 38, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 39, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 9, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 39, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 126, - 161, - 54, - 186, - 19, - 175, - 166, - 200, - 62, - 183, - 184, - 47, - 179, - 112, - 226, - 40, - 231, - 65, - 85, - 228, - 143, - 184, - 241, - 193, - 207, - 195, - 63, - 176, - 218, - 138, - 251, - 66, - 9, - 97, - 39, - 128, - 131, - 1, - 82, - 128, - 97, - 39, - 128, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 39, - 160, - 131, - 1, - 82, - 128, - 97, - 39, - 160, - 131, - 1, - 81, - 97, - 6, - 96, - 132, - 1, - 81, - 8, - 97, - 39, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 39, - 224, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 127, - 46, - 185, - 117, - 13, - 206, - 84, - 95, - 23, - 212, - 146, - 5, - 141, - 210, - 1, - 161, - 37, - 31, - 243, - 217, - 7, - 120, - 100, - 88, - 61, - 68, - 234, - 249, - 190, - 144, - 8, - 105, - 157, - 9, - 97, - 40, - 0, - 131, - 1, - 82, - 128, - 97, - 40, - 0, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 40, - 32, - 131, - 1, - 82, - 128, - 97, - 40, - 32, - 131, - 1, - 81, - 97, - 18, - 128, - 132, - 1, - 81, - 8, - 97, - 40, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 40, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 39, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 40, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 9, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 40, - 160, - 131, - 1, - 82, - 128, - 97, - 40, - 160, - 131, - 1, - 81, - 130, - 3, - 97, - 39, - 96, - 132, - 1, - 81, - 8, - 97, - 40, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 33, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 40, - 224, - 131, - 1, - 82, - 128, - 97, - 40, - 224, - 131, - 1, - 81, - 97, - 38, - 96, - 132, - 1, - 81, - 8, - 97, - 41, - 0, - 131, - 1, - 82, - 128, - 97, - 41, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 41, - 32, - 131, - 1, - 82, - 128, - 97, - 9, - 96, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 41, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 41, - 96, - 131, - 1, - 82, - 128, - 97, - 41, - 96, - 131, - 1, - 81, - 97, - 41, - 32, - 132, - 1, - 81, - 8, - 97, - 41, - 128, - 131, - 1, - 82, - 128, - 97, - 41, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 41, - 160, - 131, - 1, - 82, - 97, - 9, - 96, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 41, - 192, - 131, - 1, - 82, - 128, - 97, - 9, - 96, - 131, - 1, - 81, - 130, - 3, - 97, - 41, - 192, - 132, - 1, - 81, - 8, - 97, - 41, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 17, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 42, - 0, - 131, - 1, - 82, - 128, - 97, - 42, - 0, - 131, - 1, - 81, - 97, - 41, - 160, - 132, - 1, - 81, - 8, - 97, - 42, - 32, - 131, - 1, - 82, - 128, - 97, - 42, - 32, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 42, - 64, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 9, - 160, - 132, - 1, - 81, - 8, - 97, - 42, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 9, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 42, - 128, - 131, - 1, - 82, - 128, - 97, - 2, - 160, - 131, - 1, - 81, - 97, - 9, - 224, - 132, - 1, - 81, - 8, - 97, - 42, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 42, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 42, - 192, - 131, - 1, - 82, - 128, - 97, - 6, - 192, - 131, - 1, - 81, - 97, - 1, - 0, - 9, - 97, - 42, - 224, - 131, - 1, - 82, - 128, - 97, - 42, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 96, - 132, - 1, - 81, - 8, - 97, - 43, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 43, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 64, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 43, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 9, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 43, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 160, - 131, - 1, - 81, - 97, - 7, - 32, - 132, - 1, - 81, - 8, - 97, - 43, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 43, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 43, - 160, - 131, - 1, - 82, - 128, - 97, - 43, - 160, - 131, - 1, - 81, - 130, - 3, - 97, - 42, - 192, - 132, - 1, - 81, - 8, - 97, - 43, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 33, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 43, - 224, - 131, - 1, - 82, - 128, - 97, - 43, - 224, - 131, - 1, - 81, - 97, - 42, - 64, - 132, - 1, - 81, - 8, - 97, - 44, - 0, - 131, - 1, - 82, - 128, - 97, - 44, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 44, - 32, - 131, - 1, - 82, - 128, - 97, - 9, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 9, - 160, - 132, - 1, - 81, - 8, - 97, - 44, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 44, - 96, - 131, - 1, - 82, - 128, - 97, - 44, - 96, - 131, - 1, - 81, - 97, - 44, - 32, - 132, - 1, - 81, - 8, - 97, - 44, - 128, - 131, - 1, - 82, - 128, - 97, - 44, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 44, - 160, - 131, - 1, - 82, - 128, - 97, - 33, - 96, - 131, - 1, - 81, - 97, - 44, - 64, - 132, - 1, - 81, - 9, - 97, - 44, - 192, - 131, - 1, - 82, - 128, - 97, - 9, - 192, - 131, - 1, - 81, - 130, - 3, - 97, - 9, - 160, - 132, - 1, - 81, - 8, - 97, - 44, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 44, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 45, - 0, - 131, - 1, - 82, - 128, - 97, - 45, - 0, - 131, - 1, - 81, - 97, - 44, - 160, - 132, - 1, - 81, - 8, - 97, - 45, - 32, - 131, - 1, - 82, - 97, - 12, - 192, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 45, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 12, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 45, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 12, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 45, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 12, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 45, - 160, - 131, - 1, - 82, - 128, - 97, - 12, - 192, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 45, - 192, - 131, - 1, - 82, - 128, - 97, - 45, - 64, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 45, - 224, - 131, - 1, - 82, - 128, - 97, - 45, - 96, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 46, - 0, - 131, - 1, - 82, - 128, - 97, - 45, - 128, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 46, - 32, - 131, - 1, - 82, - 128, - 97, - 12, - 224, - 131, - 1, - 81, - 97, - 45, - 32, - 132, - 1, - 81, - 9, - 97, - 46, - 64, - 131, - 1, - 82, - 128, - 97, - 5, - 160, - 131, - 1, - 81, - 97, - 11, - 160, - 132, - 1, - 81, - 9, - 97, - 46, - 96, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 46, - 128, - 131, - 1, - 82, - 128, - 97, - 46, - 128, - 131, - 1, - 81, - 130, - 3, - 97, - 11, - 32, - 132, - 1, - 81, - 8, - 97, - 46, - 160, - 131, - 1, - 82, - 128, - 127, - 10, - 227, - 201, - 95, - 192, - 60, - 10, - 95, - 45, - 232, - 168, - 244, - 108, - 3, - 204, - 223, - 223, - 237, - 43, - 185, - 140, - 158, - 74, - 224, - 177, - 11, - 21, - 237, - 164, - 227, - 177, - 227, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 46, - 192, - 131, - 1, - 82, - 128, - 97, - 46, - 192, - 131, - 1, - 81, - 130, - 3, - 97, - 11, - 32, - 132, - 1, - 81, - 8, - 97, - 46, - 224, - 131, - 1, - 82, - 128, - 127, - 21, - 247, - 157, - 185, - 195, - 145, - 129, - 188, - 62, - 49, - 200, - 63, - 146, - 145, - 218, - 118, - 238, - 223, - 27, - 35, - 196, - 16, - 173, - 215, - 233, - 9, - 132, - 100, - 170, - 164, - 251, - 38, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 47, - 0, - 131, - 1, - 82, - 128, - 97, - 47, - 0, - 131, - 1, - 81, - 130, - 3, - 97, - 11, - 32, - 132, - 1, - 81, - 8, - 97, - 47, - 32, - 131, - 1, - 82, - 128, - 127, - 42, - 217, - 2, - 30, - 208, - 124, - 66, - 171, - 25, - 247, - 124, - 92, - 242, - 203, - 210, - 222, - 177, - 53, - 234, - 51, - 15, - 27, - 21, - 115, - 189, - 8, - 217, - 147, - 9, - 196, - 187, - 125, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 47, - 64, - 131, - 1, - 82, - 128, - 97, - 47, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 11, - 32, - 132, - 1, - 81, - 8, - 97, - 47, - 96, - 131, - 1, - 82, - 128, - 129, - 127, - 43, - 11, - 209, - 103, - 49, - 170, - 243, - 73, - 40, - 192, - 102, - 27, - 164, - 51, - 16, - 251, - 191, - 68, - 186, - 164, - 87, - 185, - 128, - 206, - 25, - 175, - 251, - 167, - 49, - 87, - 146, - 164, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 5, - 88, - 125, - 11, - 175, - 134, - 172, - 224, - 143, - 143, - 223, - 154, - 221, - 78, - 71, - 97, - 104, - 239, - 45, - 164, - 33, - 255, - 239, - 195, - 42, - 49, - 249, - 236, - 190, - 168, - 109, - 93, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 47, - 128, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 30, - 66, - 33, - 78, - 169, - 178, - 219, - 51, - 41, - 107, - 165, - 80, - 150, - 129, - 90, - 10, - 109, - 70, - 138, - 247, - 21, - 204, - 250, - 159, - 171, - 147, - 177, - 227, - 112, - 27, - 127, - 98, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 22, - 72, - 204, - 5, - 91, - 17, - 175, - 78, - 15, - 98, - 146, - 61, - 150, - 39, - 227, - 119, - 177, - 212, - 19, - 192, - 134, - 74, - 244, - 150, - 58, - 130, - 111, - 204, - 106, - 2, - 49, - 250, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 47, - 160, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 41, - 96, - 216, - 74, - 149, - 216, - 240, - 15, - 116, - 10, - 61, - 20, - 120, - 254, - 182, - 212, - 177, - 150, - 227, - 75, - 248, - 107, - 98, - 183, - 80, - 65, - 177, - 75, - 56, - 157, - 73, - 206, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 33, - 254, - 97, - 90, - 206, - 153, - 2, - 136, - 65, - 200, - 67, - 147, - 227, - 148, - 53, - 234, - 38, - 103, - 94, - 73, - 79, - 212, - 136, - 98, - 99, - 230, - 254, - 221, - 60, - 186, - 31, - 22, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 47, - 192, - 132, - 1, - 82, - 80, - 97, - 46, - 160, - 130, - 1, - 81, - 129, - 144, - 96, - 1, - 9, - 97, - 47, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 47, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 48, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 46, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 48, - 32, - 131, - 1, - 82, - 128, - 129, - 127, - 5, - 139, - 76, - 84, - 16, - 181, - 93, - 126, - 158, - 88, - 201, - 89, - 142, - 181, - 133, - 126, - 118, - 253, - 254, - 21, - 106, - 158, - 91, - 29, - 134, - 217, - 28, - 0, - 230, - 59, - 68, - 133, - 97, - 5, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 42, - 217, - 2, - 30, - 208, - 124, - 66, - 171, - 25, - 247, - 124, - 92, - 242, - 203, - 210, - 222, - 177, - 53, - 234, - 51, - 15, - 27, - 21, - 115, - 189, - 8, - 217, - 147, - 9, - 196, - 187, - 124, - 97, - 5, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 48, - 64, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 42, - 217, - 2, - 30, - 208, - 124, - 66, - 171, - 25, - 247, - 124, - 92, - 242, - 203, - 210, - 222, - 177, - 53, - 234, - 51, - 15, - 27, - 21, - 115, - 189, - 8, - 217, - 147, - 9, - 196, - 187, - 124, - 97, - 5, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 29, - 5, - 246, - 131, - 247, - 186, - 207, - 85, - 188, - 205, - 73, - 90, - 87, - 3, - 203, - 50, - 154, - 218, - 137, - 10, - 240, - 138, - 192, - 210, - 73, - 89, - 89, - 158, - 36, - 200, - 50, - 129, - 97, - 5, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 48, - 96, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 35, - 175, - 64, - 228, - 126, - 47, - 89, - 160, - 56, - 9, - 72, - 74, - 41, - 213, - 227, - 175, - 191, - 16, - 95, - 31, - 161, - 0, - 222, - 139, - 226, - 18, - 149, - 169, - 47, - 167, - 85, - 52, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 12, - 181, - 13, - 142, - 99, - 2, - 70, - 137, - 128, - 70, - 253, - 108, - 87, - 171, - 116, - 173, - 105, - 35, - 137, - 40, - 216, - 184, - 146, - 5, - 97, - 207, - 95, - 234, - 192, - 88, - 170, - 205, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 48, - 128, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 37, - 158, - 177, - 209, - 93, - 46, - 116, - 220, - 26, - 34, - 195, - 34, - 16, - 222, - 135, - 86, - 109, - 122, - 230, - 123, - 204, - 133, - 156, - 225, - 227, - 49, - 23, - 225, - 113, - 203, - 188, - 210, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 7, - 5, - 247, - 144, - 26, - 11, - 163, - 115, - 109, - 255, - 8, - 48, - 168, - 19, - 205, - 199, - 53, - 12, - 231, - 156, - 133, - 43, - 162, - 216, - 99, - 83, - 208, - 255, - 132, - 216, - 11, - 181, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 48, - 160, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 42, - 107, - 190, - 181, - 99, - 50, - 242, - 32, - 195, - 15, - 202, - 172, - 115, - 127, - 216, - 133, - 195, - 89, - 100, - 128, - 240, - 202, - 47, - 240, - 125, - 39, - 51, - 86, - 25, - 17, - 183, - 189, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 38, - 160, - 248, - 77, - 118, - 68, - 75, - 94, - 10, - 96, - 248, - 150, - 108, - 198, - 200, - 140, - 9, - 207, - 7, - 19, - 189, - 4, - 75, - 169, - 254, - 108, - 155, - 46, - 139, - 98, - 99, - 183, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 48, - 192, - 132, - 1, - 82, - 80, - 97, - 47, - 32, - 130, - 1, - 81, - 97, - 48, - 0, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 48, - 224, - 131, - 1, - 82, - 128, - 129, - 127, - 37, - 128, - 133, - 19, - 32, - 245, - 149, - 202, - 138, - 103, - 156, - 194, - 21, - 125, - 139, - 125, - 72, - 70, - 188, - 142, - 237, - 27, - 37, - 176, - 146, - 214, - 223, - 166, - 75, - 28, - 78, - 31, - 97, - 5, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 10, - 227, - 201, - 95, - 192, - 60, - 10, - 95, - 45, - 232, - 168, - 244, - 108, - 3, - 204, - 223, - 223, - 237, - 43, - 185, - 140, - 158, - 74, - 224, - 177, - 11, - 21, - 237, - 164, - 227, - 177, - 226, - 97, - 5, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 49, - 0, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 10, - 227, - 201, - 95, - 192, - 60, - 10, - 95, - 45, - 232, - 168, - 244, - 108, - 3, - 204, - 223, - 223, - 237, - 43, - 185, - 140, - 158, - 74, - 224, - 177, - 11, - 21, - 237, - 164, - 227, - 177, - 226, - 97, - 5, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 1, - 120, - 41, - 212, - 58, - 163, - 82, - 155, - 165, - 237, - 63, - 72, - 121, - 205, - 28, - 9, - 255, - 159, - 6, - 231, - 22, - 175, - 178, - 188, - 108, - 199, - 40, - 71, - 209, - 39, - 113, - 174, - 97, - 5, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 49, - 32, - 132, - 1, - 82, - 80, - 97, - 46, - 224, - 130, - 1, - 81, - 97, - 47, - 224, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 49, - 64, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 0, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 49, - 96, - 132, - 1, - 82, - 80, - 97, - 47, - 128, - 130, - 1, - 81, - 97, - 47, - 160, - 131, - 1, - 81, - 130, - 144, - 130, - 144, - 9, - 144, - 80, - 128, - 97, - 49, - 128, - 132, - 1, - 82, - 129, - 129, - 97, - 47, - 192, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 49, - 160, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 64, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 49, - 192, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 96, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 49, - 224, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 0, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 0, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 128, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 32, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 160, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 64, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 192, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 96, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 224, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 128, - 132, - 1, - 82, - 129, - 129, - 97, - 49, - 0, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 160, - 132, - 1, - 82, - 129, - 129, - 97, - 49, - 32, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 192, - 132, - 1, - 82, - 129, - 129, - 97, - 49, - 64, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 224, - 132, - 1, - 82, - 129, - 129, - 97, - 49, - 96, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 51, - 0, - 132, - 1, - 82, - 129, - 129, - 97, - 47, - 224, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 51, - 32, - 132, - 1, - 82, - 80, - 96, - 32, - 97, - 51, - 96, - 131, - 1, - 82, - 96, - 32, - 97, - 51, - 128, - 131, - 1, - 82, - 96, - 32, - 97, - 51, - 160, - 131, - 1, - 82, - 97, - 51, - 32, - 130, - 1, - 81, - 97, - 51, - 192, - 131, - 1, - 82, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 239, - 255, - 255, - 255, - 97, - 51, - 224, - 131, - 1, - 82, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 189, - 131, - 57, - 129, - 81, - 145, - 82, - 97, - 52, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 32, - 97, - 51, - 64, - 133, - 1, - 96, - 192, - 97, - 51, - 96, - 135, - 1, - 96, - 5, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 51, - 64, - 130, - 1, - 81, - 96, - 0, - 97, - 47, - 224, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 51, - 0, - 134, - 1, - 81, - 9, - 97, - 47, - 224, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 49, - 96, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 224, - 134, - 1, - 81, - 9, - 97, - 49, - 96, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 49, - 64, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 192, - 134, - 1, - 81, - 9, - 97, - 49, - 64, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 49, - 32, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 160, - 134, - 1, - 81, - 9, - 97, - 49, - 32, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 49, - 0, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 128, - 134, - 1, - 81, - 9, - 97, - 49, - 0, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 224, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 96, - 134, - 1, - 81, - 9, - 97, - 48, - 224, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 192, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 64, - 134, - 1, - 81, - 9, - 97, - 48, - 192, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 160, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 32, - 134, - 1, - 81, - 9, - 97, - 48, - 160, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 128, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 0, - 134, - 1, - 81, - 9, - 97, - 48, - 128, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 0, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 49, - 224, - 134, - 1, - 81, - 9, - 97, - 48, - 0, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 96, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 49, - 192, - 134, - 1, - 81, - 9, - 97, - 48, - 96, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 64, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 49, - 160, - 134, - 1, - 81, - 9, - 97, - 48, - 64, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 47, - 192, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 49, - 128, - 134, - 1, - 81, - 9, - 97, - 47, - 192, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 47, - 160, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 47, - 128, - 134, - 1, - 81, - 9, - 97, - 47, - 160, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 97, - 47, - 128, - 133, - 1, - 129, - 144, - 82, - 97, - 47, - 160, - 133, - 1, - 81, - 144, - 146, - 80, - 131, - 145, - 80, - 130, - 144, - 8, - 144, - 80, - 129, - 129, - 97, - 47, - 192, - 133, - 1, - 81, - 8, - 97, - 52, - 32, - 132, - 1, - 82, - 80, - 97, - 48, - 0, - 130, - 1, - 81, - 97, - 48, - 32, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 52, - 64, - 131, - 1, - 82, - 97, - 48, - 64, - 130, - 1, - 81, - 129, - 129, - 97, - 48, - 96, - 133, - 1, - 81, - 8, - 97, - 52, - 96, - 132, - 1, - 82, - 80, - 97, - 48, - 224, - 130, - 1, - 81, - 97, - 48, - 32, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 52, - 128, - 131, - 1, - 82, - 97, - 48, - 128, - 130, - 1, - 81, - 129, - 129, - 97, - 48, - 160, - 133, - 1, - 81, - 8, - 144, - 80, - 129, - 129, - 97, - 48, - 192, - 133, - 1, - 81, - 8, - 97, - 52, - 160, - 132, - 1, - 82, - 80, - 97, - 49, - 64, - 130, - 1, - 81, - 97, - 48, - 32, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 52, - 192, - 131, - 1, - 82, - 97, - 49, - 0, - 130, - 1, - 81, - 129, - 129, - 97, - 49, - 32, - 133, - 1, - 81, - 8, - 97, - 52, - 224, - 132, - 1, - 82, - 80, - 97, - 47, - 224, - 130, - 1, - 81, - 97, - 48, - 32, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 53, - 0, - 131, - 1, - 82, - 97, - 49, - 96, - 130, - 1, - 81, - 128, - 97, - 53, - 32, - 132, - 1, - 82, - 80, - 97, - 52, - 32, - 130, - 1, - 81, - 129, - 129, - 97, - 52, - 96, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 53, - 64, - 132, - 1, - 82, - 129, - 129, - 97, - 52, - 160, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 53, - 96, - 132, - 1, - 82, - 129, - 129, - 97, - 52, - 224, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 53, - 128, - 132, - 1, - 82, - 129, - 129, - 97, - 53, - 32, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 53, - 160, - 132, - 1, - 82, - 80, - 96, - 32, - 97, - 53, - 224, - 131, - 1, - 82, - 96, - 32, - 97, - 54, - 0, - 131, - 1, - 82, - 96, - 32, - 97, - 54, - 32, - 131, - 1, - 82, - 97, - 53, - 160, - 130, - 1, - 81, - 97, - 54, - 64, - 131, - 1, - 82, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 239, - 255, - 255, - 255, - 97, - 54, - 96, - 131, - 1, - 82, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 189, - 131, - 57, - 129, - 81, - 145, - 82, - 97, - 54, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 32, - 97, - 53, - 192, - 133, - 1, - 96, - 192, - 97, - 53, - 224, - 135, - 1, - 96, - 5, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 53, - 192, - 130, - 1, - 81, - 96, - 0, - 97, - 53, - 32, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 53, - 128, - 134, - 1, - 81, - 9, - 97, - 53, - 32, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 52, - 224, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 53, - 96, - 134, - 1, - 81, - 9, - 97, - 52, - 224, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 52, - 160, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 53, - 64, - 134, - 1, - 81, - 9, - 97, - 52, - 160, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 52, - 96, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 52, - 32, - 134, - 1, - 81, - 9, - 97, - 52, - 96, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 97, - 52, - 32, - 133, - 1, - 82, - 80, - 80, - 97, - 52, - 96, - 130, - 1, - 81, - 97, - 52, - 64, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 54, - 160, - 131, - 1, - 82, - 128, - 97, - 52, - 160, - 131, - 1, - 81, - 97, - 52, - 128, - 132, - 1, - 81, - 9, - 97, - 54, - 192, - 131, - 1, - 82, - 128, - 97, - 52, - 224, - 131, - 1, - 81, - 97, - 52, - 192, - 132, - 1, - 81, - 9, - 97, - 54, - 224, - 131, - 1, - 82, - 128, - 97, - 53, - 32, - 131, - 1, - 81, - 97, - 53, - 0, - 132, - 1, - 81, - 9, - 97, - 55, - 0, - 131, - 1, - 82, - 97, - 10, - 32, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 55, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 57, - 0, - 131, - 1, - 82, - 97, - 10, - 128, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 57, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 57, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 57, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 57, - 128, - 131, - 1, - 82, - 128, - 97, - 47, - 128, - 131, - 1, - 81, - 97, - 5, - 224, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 47, - 160, - 134, - 1, - 81, - 97, - 6, - 32, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 129, - 129, - 131, - 97, - 47, - 192, - 134, - 1, - 81, - 97, - 6, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 57, - 160, - 132, - 1, - 129, - 144, - 82, - 97, - 52, - 32, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 57, - 192, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 57, - 192, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 57, - 224, - 131, - 1, - 82, - 128, - 97, - 47, - 128, - 131, - 1, - 81, - 97, - 6, - 0, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 47, - 160, - 134, - 1, - 81, - 97, - 6, - 64, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 129, - 129, - 131, - 97, - 47, - 192, - 134, - 1, - 81, - 97, - 6, - 128, - 135, - 1, - 81, - 9, - 8, - 97, - 58, - 0, - 132, - 1, - 129, - 144, - 82, - 97, - 52, - 32, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 58, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 58, - 64, - 131, - 1, - 82, - 128, - 97, - 10, - 32, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 58, - 96, - 131, - 1, - 82, - 128, - 97, - 58, - 64, - 131, - 1, - 81, - 97, - 57, - 224, - 132, - 1, - 81, - 8, - 97, - 58, - 128, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 58, - 128, - 132, - 1, - 81, - 9, - 97, - 58, - 160, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 58, - 96, - 132, - 1, - 81, - 9, - 97, - 58, - 192, - 131, - 1, - 82, - 128, - 97, - 52, - 64, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 58, - 224, - 131, - 1, - 82, - 128, - 97, - 48, - 64, - 131, - 1, - 81, - 97, - 6, - 96, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 48, - 96, - 134, - 1, - 81, - 97, - 6, - 192, - 135, - 1, - 81, - 9, - 8, - 97, - 59, - 0, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 160, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 59, - 32, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 59, - 32, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 59, - 64, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 58, - 224, - 132, - 1, - 81, - 9, - 97, - 59, - 96, - 131, - 1, - 82, - 128, - 97, - 48, - 64, - 131, - 1, - 81, - 97, - 9, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 48, - 96, - 134, - 1, - 81, - 97, - 9, - 64, - 135, - 1, - 81, - 9, - 8, - 97, - 59, - 128, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 160, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 59, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 59, - 192, - 131, - 1, - 82, - 128, - 97, - 10, - 32, - 131, - 1, - 81, - 97, - 58, - 224, - 132, - 1, - 81, - 9, - 97, - 59, - 224, - 131, - 1, - 82, - 128, - 97, - 59, - 192, - 131, - 1, - 81, - 97, - 59, - 64, - 132, - 1, - 81, - 8, - 97, - 60, - 0, - 131, - 1, - 82, - 128, - 97, - 48, - 64, - 131, - 1, - 81, - 97, - 9, - 96, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 48, - 96, - 134, - 1, - 81, - 97, - 9, - 128, - 135, - 1, - 81, - 9, - 8, - 97, - 60, - 32, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 160, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 60, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 60, - 96, - 131, - 1, - 82, - 128, - 97, - 55, - 32, - 131, - 1, - 81, - 97, - 58, - 224, - 132, - 1, - 81, - 9, - 97, - 60, - 128, - 131, - 1, - 82, - 128, - 97, - 60, - 96, - 131, - 1, - 81, - 97, - 60, - 0, - 132, - 1, - 81, - 8, - 97, - 60, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 60, - 192, - 131, - 1, - 82, - 128, - 97, - 10, - 128, - 131, - 1, - 81, - 97, - 59, - 96, - 132, - 1, - 81, - 9, - 97, - 60, - 224, - 131, - 1, - 82, - 128, - 97, - 10, - 128, - 131, - 1, - 81, - 97, - 59, - 224, - 132, - 1, - 81, - 9, - 97, - 61, - 0, - 131, - 1, - 82, - 128, - 97, - 10, - 128, - 131, - 1, - 81, - 97, - 60, - 128, - 132, - 1, - 81, - 9, - 97, - 61, - 32, - 131, - 1, - 82, - 128, - 97, - 60, - 192, - 131, - 1, - 81, - 97, - 58, - 160, - 132, - 1, - 81, - 8, - 97, - 61, - 64, - 131, - 1, - 82, - 128, - 97, - 52, - 128, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 61, - 96, - 131, - 1, - 82, - 128, - 97, - 48, - 128, - 131, - 1, - 81, - 97, - 8, - 192, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 48, - 160, - 134, - 1, - 81, - 97, - 8, - 224, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 129, - 129, - 131, - 97, - 48, - 192, - 134, - 1, - 81, - 97, - 9, - 0, - 135, - 1, - 81, - 9, - 8, - 97, - 61, - 128, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 192, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 61, - 160, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 61, - 160, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 61, - 192, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 61, - 96, - 132, - 1, - 81, - 9, - 97, - 61, - 224, - 131, - 1, - 82, - 128, - 97, - 57, - 32, - 131, - 1, - 81, - 97, - 61, - 192, - 132, - 1, - 81, - 9, - 97, - 62, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 32, - 131, - 1, - 81, - 97, - 61, - 224, - 132, - 1, - 81, - 9, - 97, - 62, - 32, - 131, - 1, - 82, - 128, - 97, - 62, - 0, - 131, - 1, - 81, - 97, - 61, - 64, - 132, - 1, - 81, - 8, - 97, - 62, - 64, - 131, - 1, - 82, - 128, - 97, - 52, - 192, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 62, - 96, - 131, - 1, - 82, - 128, - 97, - 49, - 0, - 131, - 1, - 81, - 97, - 9, - 160, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 49, - 32, - 134, - 1, - 81, - 97, - 9, - 192, - 135, - 1, - 81, - 9, - 8, - 97, - 62, - 128, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 224, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 62, - 160, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 62, - 160, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 62, - 192, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 62, - 96, - 132, - 1, - 81, - 9, - 97, - 62, - 224, - 131, - 1, - 82, - 128, - 97, - 57, - 64, - 131, - 1, - 81, - 97, - 62, - 192, - 132, - 1, - 81, - 9, - 97, - 63, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 64, - 131, - 1, - 81, - 97, - 62, - 224, - 132, - 1, - 81, - 9, - 97, - 63, - 32, - 131, - 1, - 82, - 128, - 97, - 63, - 0, - 131, - 1, - 81, - 97, - 62, - 64, - 132, - 1, - 81, - 8, - 97, - 63, - 64, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 63, - 96, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 9, - 224, - 132, - 1, - 81, - 9, - 97, - 63, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 63, - 160, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 63, - 160, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 63, - 192, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 63, - 224, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 6, - 224, - 132, - 1, - 81, - 9, - 97, - 64, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 64, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 64, - 64, - 131, - 1, - 82, - 128, - 97, - 10, - 32, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 64, - 96, - 131, - 1, - 82, - 128, - 97, - 64, - 64, - 131, - 1, - 81, - 97, - 63, - 192, - 132, - 1, - 81, - 8, - 97, - 64, - 128, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 0, - 132, - 1, - 81, - 9, - 97, - 64, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 64, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 64, - 224, - 131, - 1, - 82, - 128, - 97, - 55, - 32, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 65, - 0, - 131, - 1, - 82, - 128, - 97, - 64, - 224, - 131, - 1, - 81, - 97, - 64, - 128, - 132, - 1, - 81, - 8, - 97, - 65, - 32, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 32, - 132, - 1, - 81, - 9, - 97, - 65, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 65, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 64, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 65, - 128, - 131, - 1, - 82, - 128, - 97, - 55, - 64, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 65, - 160, - 131, - 1, - 82, - 128, - 97, - 65, - 128, - 131, - 1, - 81, - 97, - 65, - 32, - 132, - 1, - 81, - 8, - 97, - 65, - 192, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 64, - 132, - 1, - 81, - 9, - 97, - 65, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 66, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 96, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 66, - 32, - 131, - 1, - 82, - 128, - 97, - 55, - 96, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 66, - 64, - 131, - 1, - 82, - 128, - 97, - 66, - 32, - 131, - 1, - 81, - 97, - 65, - 192, - 132, - 1, - 81, - 8, - 97, - 66, - 96, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 96, - 132, - 1, - 81, - 9, - 97, - 66, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 66, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 128, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 66, - 192, - 131, - 1, - 82, - 128, - 97, - 55, - 128, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 66, - 224, - 131, - 1, - 82, - 128, - 97, - 66, - 192, - 131, - 1, - 81, - 97, - 66, - 96, - 132, - 1, - 81, - 8, - 97, - 67, - 0, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 128, - 132, - 1, - 81, - 9, - 97, - 67, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 67, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 160, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 67, - 96, - 131, - 1, - 82, - 128, - 97, - 55, - 160, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 67, - 128, - 131, - 1, - 82, - 128, - 97, - 67, - 96, - 131, - 1, - 81, - 97, - 67, - 0, - 132, - 1, - 81, - 8, - 97, - 67, - 160, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 160, - 132, - 1, - 81, - 9, - 97, - 67, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 67, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 192, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 68, - 0, - 131, - 1, - 82, - 128, - 97, - 55, - 192, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 68, - 32, - 131, - 1, - 82, - 128, - 97, - 68, - 0, - 131, - 1, - 81, - 97, - 67, - 160, - 132, - 1, - 81, - 8, - 97, - 68, - 64, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 192, - 132, - 1, - 81, - 9, - 97, - 68, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 68, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 224, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 68, - 160, - 131, - 1, - 82, - 128, - 97, - 55, - 224, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 68, - 192, - 131, - 1, - 82, - 128, - 97, - 68, - 160, - 131, - 1, - 81, - 97, - 68, - 64, - 132, - 1, - 81, - 8, - 97, - 68, - 224, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 0, - 132, - 1, - 81, - 9, - 97, - 69, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 69, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 0, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 69, - 64, - 131, - 1, - 82, - 128, - 97, - 56, - 0, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 69, - 96, - 131, - 1, - 82, - 128, - 97, - 69, - 64, - 131, - 1, - 81, - 97, - 68, - 224, - 132, - 1, - 81, - 8, - 97, - 69, - 128, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 32, - 132, - 1, - 81, - 9, - 97, - 69, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 69, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 69, - 224, - 131, - 1, - 82, - 128, - 97, - 56, - 32, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 70, - 0, - 131, - 1, - 82, - 128, - 97, - 69, - 224, - 131, - 1, - 81, - 97, - 69, - 128, - 132, - 1, - 81, - 8, - 97, - 70, - 32, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 64, - 132, - 1, - 81, - 9, - 97, - 70, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 70, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 64, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 70, - 128, - 131, - 1, - 82, - 128, - 97, - 56, - 64, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 70, - 160, - 131, - 1, - 82, - 128, - 97, - 70, - 128, - 131, - 1, - 81, - 97, - 70, - 32, - 132, - 1, - 81, - 8, - 97, - 70, - 192, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 96, - 132, - 1, - 81, - 9, - 97, - 70, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 71, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 96, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 71, - 32, - 131, - 1, - 82, - 128, - 97, - 56, - 96, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 71, - 64, - 131, - 1, - 82, - 128, - 97, - 71, - 32, - 131, - 1, - 81, - 97, - 70, - 192, - 132, - 1, - 81, - 8, - 97, - 71, - 96, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 128, - 132, - 1, - 81, - 9, - 97, - 71, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 71, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 128, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 71, - 192, - 131, - 1, - 82, - 128, - 97, - 56, - 128, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 71, - 224, - 131, - 1, - 82, - 128, - 97, - 71, - 192, - 131, - 1, - 81, - 97, - 71, - 96, - 132, - 1, - 81, - 8, - 97, - 72, - 0, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 160, - 132, - 1, - 81, - 9, - 97, - 72, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 72, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 160, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 72, - 96, - 131, - 1, - 82, - 128, - 97, - 56, - 160, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 72, - 128, - 131, - 1, - 82, - 128, - 97, - 72, - 96, - 131, - 1, - 81, - 97, - 72, - 0, - 132, - 1, - 81, - 8, - 97, - 72, - 160, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 97, - 45, - 192, - 132, - 1, - 81, - 9, - 97, - 72, - 192, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 97, - 45, - 224, - 132, - 1, - 81, - 9, - 97, - 72, - 224, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 97, - 46, - 0, - 132, - 1, - 81, - 9, - 97, - 73, - 0, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 97, - 46, - 32, - 132, - 1, - 81, - 9, - 97, - 73, - 32, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 46, - 64, - 132, - 1, - 81, - 9, - 97, - 73, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 73, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 192, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 73, - 128, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 73, - 160, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 72, - 192, - 132, - 1, - 81, - 9, - 97, - 73, - 192, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 72, - 224, - 132, - 1, - 81, - 9, - 97, - 73, - 224, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 73, - 0, - 132, - 1, - 81, - 9, - 97, - 74, - 0, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 73, - 32, - 132, - 1, - 81, - 9, - 97, - 74, - 32, - 131, - 1, - 82, - 128, - 97, - 73, - 128, - 131, - 1, - 81, - 97, - 72, - 160, - 132, - 1, - 81, - 8, - 97, - 74, - 64, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 224, - 132, - 1, - 81, - 9, - 97, - 74, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 74, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 224, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 74, - 160, - 131, - 1, - 82, - 128, - 97, - 56, - 224, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 74, - 192, - 131, - 1, - 82, - 128, - 97, - 74, - 160, - 131, - 1, - 81, - 97, - 74, - 64, - 132, - 1, - 81, - 8, - 97, - 74, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 57, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 75, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 63, - 224, - 132, - 1, - 81, - 9, - 97, - 75, - 32, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 64, - 96, - 132, - 1, - 81, - 9, - 97, - 75, - 64, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 65, - 0, - 132, - 1, - 81, - 9, - 97, - 75, - 96, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 65, - 160, - 132, - 1, - 81, - 9, - 97, - 75, - 128, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 66, - 64, - 132, - 1, - 81, - 9, - 97, - 75, - 160, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 66, - 224, - 132, - 1, - 81, - 9, - 97, - 75, - 192, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 67, - 128, - 132, - 1, - 81, - 9, - 97, - 75, - 224, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 68, - 32, - 132, - 1, - 81, - 9, - 97, - 76, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 68, - 192, - 132, - 1, - 81, - 9, - 97, - 76, - 32, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 69, - 96, - 132, - 1, - 81, - 9, - 97, - 76, - 64, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 70, - 0, - 132, - 1, - 81, - 9, - 97, - 76, - 96, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 70, - 160, - 132, - 1, - 81, - 9, - 97, - 76, - 128, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 71, - 64, - 132, - 1, - 81, - 9, - 97, - 76, - 160, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 71, - 224, - 132, - 1, - 81, - 9, - 97, - 76, - 192, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 72, - 128, - 132, - 1, - 81, - 9, - 97, - 76, - 224, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 73, - 160, - 132, - 1, - 81, - 9, - 97, - 77, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 73, - 192, - 132, - 1, - 81, - 9, - 97, - 77, - 32, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 73, - 224, - 132, - 1, - 81, - 9, - 97, - 77, - 64, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 74, - 0, - 132, - 1, - 81, - 9, - 97, - 77, - 96, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 74, - 32, - 132, - 1, - 81, - 9, - 97, - 77, - 128, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 74, - 192, - 132, - 1, - 81, - 9, - 97, - 77, - 160, - 131, - 1, - 82, - 128, - 97, - 75, - 0, - 131, - 1, - 81, - 97, - 63, - 64, - 132, - 1, - 81, - 8, - 97, - 77, - 192, - 131, - 1, - 82, - 128, - 97, - 48, - 32, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 77, - 224, - 131, - 1, - 82, - 128, - 97, - 11, - 32, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 78, - 0, - 131, - 1, - 82, - 96, - 1, - 97, - 78, - 32, - 131, - 1, - 129, - 129, - 82, - 96, - 2, - 97, - 78, - 64, - 133, - 1, - 82, - 97, - 77, - 192, - 132, - 1, - 81, - 97, - 78, - 96, - 133, - 1, - 82, - 132, - 145, - 144, - 96, - 64, - 144, - 96, - 96, - 129, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 78, - 32, - 130, - 1, - 81, - 97, - 78, - 128, - 131, - 1, - 82, - 97, - 78, - 64, - 130, - 1, - 81, - 97, - 78, - 160, - 131, - 1, - 82, - 96, - 128, - 130, - 1, - 81, - 97, - 78, - 192, - 131, - 1, - 82, - 96, - 160, - 130, - 1, - 81, - 97, - 78, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 78, - 128, - 133, - 1, - 96, - 128, - 97, - 78, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 96, - 192, - 130, - 1, - 81, - 97, - 79, - 0, - 131, - 1, - 82, - 96, - 224, - 130, - 1, - 81, - 97, - 79, - 32, - 131, - 1, - 82, - 97, - 58, - 192, - 130, - 1, - 81, - 97, - 79, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 79, - 0, - 133, - 1, - 96, - 96, - 97, - 79, - 0, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 78, - 128, - 130, - 1, - 81, - 97, - 79, - 96, - 131, - 1, - 82, - 97, - 78, - 160, - 130, - 1, - 81, - 97, - 79, - 128, - 131, - 1, - 82, - 97, - 79, - 0, - 130, - 1, - 81, - 97, - 79, - 160, - 131, - 1, - 82, - 97, - 79, - 32, - 130, - 1, - 81, - 97, - 79, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 79, - 96, - 133, - 1, - 96, - 128, - 97, - 79, - 96, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 1, - 0, - 130, - 1, - 81, - 97, - 79, - 224, - 131, - 1, - 82, - 97, - 1, - 32, - 130, - 1, - 81, - 97, - 80, - 0, - 131, - 1, - 82, - 97, - 60, - 224, - 130, - 1, - 81, - 97, - 80, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 79, - 224, - 133, - 1, - 96, - 96, - 97, - 79, - 224, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 79, - 96, - 130, - 1, - 81, - 97, - 80, - 64, - 131, - 1, - 82, - 97, - 79, - 128, - 130, - 1, - 81, - 97, - 80, - 96, - 131, - 1, - 82, - 97, - 79, - 224, - 130, - 1, - 81, - 97, - 80, - 128, - 131, - 1, - 82, - 97, - 80, - 0, - 130, - 1, - 81, - 97, - 80, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 80, - 64, - 133, - 1, - 96, - 128, - 97, - 80, - 64, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 3, - 32, - 130, - 1, - 81, - 97, - 80, - 192, - 131, - 1, - 82, - 97, - 3, - 64, - 130, - 1, - 81, - 97, - 80, - 224, - 131, - 1, - 82, - 97, - 61, - 0, - 130, - 1, - 81, - 97, - 81, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 80, - 192, - 133, - 1, - 96, - 96, - 97, - 80, - 192, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 80, - 64, - 130, - 1, - 81, - 97, - 81, - 32, - 131, - 1, - 82, - 97, - 80, - 96, - 130, - 1, - 81, - 97, - 81, - 64, - 131, - 1, - 82, - 97, - 80, - 192, - 130, - 1, - 81, - 97, - 81, - 96, - 131, - 1, - 82, - 97, - 80, - 224, - 130, - 1, - 81, - 97, - 81, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 81, - 32, - 133, - 1, - 96, - 128, - 97, - 81, - 32, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 3, - 96, - 130, - 1, - 81, - 97, - 81, - 160, - 131, - 1, - 82, - 97, - 3, - 128, - 130, - 1, - 81, - 97, - 81, - 192, - 131, - 1, - 82, - 97, - 61, - 32, - 130, - 1, - 81, - 97, - 81, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 81, - 160, - 133, - 1, - 96, - 96, - 97, - 81, - 160, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 81, - 32, - 130, - 1, - 81, - 97, - 82, - 0, - 131, - 1, - 82, - 97, - 81, - 64, - 130, - 1, - 81, - 97, - 82, - 32, - 131, - 1, - 82, - 97, - 81, - 160, - 130, - 1, - 81, - 97, - 82, - 64, - 131, - 1, - 82, - 97, - 81, - 192, - 130, - 1, - 81, - 97, - 82, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 82, - 0, - 133, - 1, - 96, - 128, - 97, - 82, - 0, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 2, - 224, - 130, - 1, - 81, - 97, - 82, - 128, - 131, - 1, - 82, - 97, - 3, - 0, - 130, - 1, - 81, - 97, - 82, - 160, - 131, - 1, - 82, - 97, - 62, - 32, - 130, - 1, - 81, - 97, - 82, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 82, - 128, - 133, - 1, - 96, - 96, - 97, - 82, - 128, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 82, - 0, - 130, - 1, - 81, - 97, - 82, - 224, - 131, - 1, - 82, - 97, - 82, - 32, - 130, - 1, - 81, - 97, - 83, - 0, - 131, - 1, - 82, - 97, - 82, - 128, - 130, - 1, - 81, - 97, - 83, - 32, - 131, - 1, - 82, - 97, - 82, - 160, - 130, - 1, - 81, - 97, - 83, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 82, - 224, - 133, - 1, - 96, - 128, - 97, - 82, - 224, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 1, - 160, - 130, - 1, - 81, - 97, - 83, - 96, - 131, - 1, - 82, - 97, - 1, - 192, - 130, - 1, - 81, - 97, - 83, - 128, - 131, - 1, - 82, - 97, - 63, - 32, - 130, - 1, - 81, - 97, - 83, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 83, - 96, - 133, - 1, - 96, - 96, - 97, - 83, - 96, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 82, - 224, - 130, - 1, - 81, - 97, - 83, - 192, - 131, - 1, - 82, - 97, - 83, - 0, - 130, - 1, - 81, - 97, - 83, - 224, - 131, - 1, - 82, - 97, - 83, - 96, - 130, - 1, - 81, - 97, - 84, - 0, - 131, - 1, - 82, - 97, - 83, - 128, - 130, - 1, - 81, - 97, - 84, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 83, - 192, - 133, - 1, - 96, - 128, - 97, - 83, - 192, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 1, - 224, - 130, - 1, - 81, - 97, - 84, - 64, - 131, - 1, - 82, - 97, - 2, - 0, - 130, - 1, - 81, - 97, - 84, - 96, - 131, - 1, - 82, - 97, - 75, - 32, - 130, - 1, - 81, - 97, - 84, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 84, - 64, - 133, - 1, - 96, - 96, - 97, - 84, - 64, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 83, - 192, - 130, - 1, - 81, - 97, - 84, - 160, - 131, - 1, - 82, - 97, - 83, - 224, - 130, - 1, - 81, - 97, - 84, - 192, - 131, - 1, - 82, - 97, - 84, - 64, - 130, - 1, - 81, - 97, - 84, - 224, - 131, - 1, - 82, - 97, - 84, - 96, - 130, - 1, - 81, - 97, - 85, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 84, - 160, - 133, - 1, - 96, - 128, - 97, - 84, - 160, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 6, - 85, - 214, - 41, - 121, - 220, - 6, - 45, - 193, - 232, - 193, - 83, - 52, - 191, - 23, - 207, - 92, - 126, - 99, - 82, - 33, - 156, - 11, - 208, - 176, - 204, - 3, - 149, - 152, - 217, - 166, - 105, - 97, - 85, - 32, - 131, - 1, - 82, - 127, - 1, - 149, - 137, - 211, - 0, - 47, - 106, - 13, - 237, - 70, - 166, - 144, - 83, - 240, - 192, - 94, - 122, - 124, - 164, - 83, - 57, - 179, - 210, - 186, - 232, - 93, - 0, - 242, - 106, - 192, - 243, - 62, - 97, - 85, - 64, - 131, - 1, - 82, - 97, - 75, - 64, - 130, - 1, - 81, - 97, - 85, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 85, - 32, - 133, - 1, - 96, - 96, - 97, - 85, - 32, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 84, - 160, - 130, - 1, - 81, - 97, - 85, - 128, - 131, - 1, - 82, - 97, - 84, - 192, - 130, - 1, - 81, - 97, - 85, - 160, - 131, - 1, - 82, - 97, - 85, - 32, - 130, - 1, - 81, - 97, - 85, - 192, - 131, - 1, - 82, - 97, - 85, - 64, - 130, - 1, - 81, - 97, - 85, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 85, - 128, - 133, - 1, - 96, - 128, - 97, - 85, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 30, - 171, - 153, - 149, - 146, - 56, - 82, - 8, - 180, - 42, - 18, - 220, - 192, - 71, - 118, - 62, - 229, - 207, - 18, - 5, - 46, - 180, - 176, - 217, - 167, - 162, - 134, - 224, - 67, - 243, - 223, - 159, - 97, - 86, - 0, - 131, - 1, - 82, - 127, - 24, - 136, - 126, - 179, - 198, - 70, - 255, - 212, - 150, - 18, - 38, - 201, - 27, - 172, - 150, - 97, - 0, - 71, - 152, - 177, - 252, - 106, - 57, - 196, - 63, - 154, - 109, - 29, - 3, - 118, - 113, - 148, - 97, - 86, - 32, - 131, - 1, - 82, - 97, - 75, - 96, - 130, - 1, - 81, - 97, - 86, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 86, - 0, - 133, - 1, - 96, - 96, - 97, - 86, - 0, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 85, - 128, - 130, - 1, - 81, - 97, - 86, - 96, - 131, - 1, - 82, - 97, - 85, - 160, - 130, - 1, - 81, - 97, - 86, - 128, - 131, - 1, - 82, - 97, - 86, - 0, - 130, - 1, - 81, - 97, - 86, - 160, - 131, - 1, - 82, - 97, - 86, - 32, - 130, - 1, - 81, - 97, - 86, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 86, - 96, - 133, - 1, - 96, - 128, - 97, - 86, - 96, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 7, - 104, - 6, - 5, - 139, - 2, - 225, - 181, - 233, - 155, - 47, - 46, - 142, - 238, - 97, - 49, - 148, - 248, - 223, - 115, - 72, - 22, - 89, - 245, - 147, - 139, - 170, - 205, - 100, - 228, - 215, - 184, - 97, - 86, - 224, - 131, - 1, - 82, - 127, - 5, - 174, - 129, - 100, - 75, - 36, - 77, - 206, - 234, - 83, - 80, - 168, - 74, - 121, - 203, - 240, - 161, - 153, - 187, - 214, - 193, - 250, - 217, - 136, - 116, - 35, - 248, - 200, - 4, - 142, - 96, - 57, - 97, - 87, - 0, - 131, - 1, - 82, - 97, - 75, - 128, - 130, - 1, - 81, - 97, - 87, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 86, - 224, - 133, - 1, - 96, - 96, - 97, - 86, - 224, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 86, - 96, - 130, - 1, - 81, - 97, - 87, - 64, - 131, - 1, - 82, - 97, - 86, - 128, - 130, - 1, - 81, - 97, - 87, - 96, - 131, - 1, - 82, - 97, - 86, - 224, - 130, - 1, - 81, - 97, - 87, - 128, - 131, - 1, - 82, - 97, - 87, - 0, - 130, - 1, - 81, - 97, - 87, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 87, - 64, - 133, - 1, - 96, - 128, - 97, - 87, - 64, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 4, - 56, - 135, - 63, - 192, - 2, - 49, - 174, - 82, - 126, - 252, - 247, - 77, - 144, - 146, - 245, - 5, - 157, - 250, - 5, - 39, - 92, - 190, - 115, - 129, - 233, - 72, - 254, - 59, - 123, - 97, - 216, - 97, - 87, - 192, - 131, - 1, - 82, - 127, - 3, - 192, - 243, - 20, - 201, - 52, - 3, - 121, - 43, - 168, - 110, - 195, - 132, - 27, - 48, - 128, - 242, - 247, - 205, - 9, - 44, - 107, - 203, - 99, - 44, - 219, - 194, - 18, - 42, - 19, - 205, - 239, - 97, - 87, - 224, - 131, - 1, - 82, - 97, - 75, - 160, - 130, - 1, - 81, - 97, - 88, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 87, - 192, - 133, - 1, - 96, - 96, - 97, - 87, - 192, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 87, - 64, - 130, - 1, - 81, - 97, - 88, - 32, - 131, - 1, - 82, - 97, - 87, - 96, - 130, - 1, - 81, - 97, - 88, - 64, - 131, - 1, - 82, - 97, - 87, - 192, - 130, - 1, - 81, - 97, - 88, - 96, - 131, - 1, - 82, - 97, - 87, - 224, - 130, - 1, - 81, - 97, - 88, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 88, - 32, - 133, - 1, - 96, - 128, - 97, - 88, - 32, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 43, - 18, - 177, - 50, - 166, - 38, - 26, - 214, - 2, - 73, - 20, - 117, - 153, - 202, - 224, - 213, - 179, - 84, - 126, - 81, - 13, - 234, - 187, - 166, - 85, - 38, - 209, - 48, - 240, - 79, - 36, - 2, - 97, - 88, - 160, - 131, - 1, - 82, - 127, - 19, - 227, - 192, - 44, - 224, - 15, - 107, - 126, - 0, - 213, - 176, - 153, - 237, - 165, - 241, - 21, - 89, - 86, - 174, - 131, - 137, - 154, - 45, - 89, - 206, - 252, - 176, - 13, - 173, - 102, - 167, - 246, - 97, - 88, - 192, - 131, - 1, - 82, - 97, - 75, - 192, - 130, - 1, - 81, - 97, - 88, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 88, - 160, - 133, - 1, - 96, - 96, - 97, - 88, - 160, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 88, - 32, - 130, - 1, - 81, - 97, - 89, - 0, - 131, - 1, - 82, - 97, - 88, - 64, - 130, - 1, - 81, - 97, - 89, - 32, - 131, - 1, - 82, - 97, - 88, - 160, - 130, - 1, - 81, - 97, - 89, - 64, - 131, - 1, - 82, - 97, - 88, - 192, - 130, - 1, - 81, - 97, - 89, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 89, - 0, - 133, - 1, - 96, - 128, - 97, - 89, - 0, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 14, - 216, - 51, - 112, - 39, - 126, - 15, - 211, - 94, - 130, - 88, - 221, - 86, - 48, - 206, - 12, - 227, - 73, - 31, - 223, - 126, - 22, - 109, - 41, - 55, - 69, - 99, - 91, - 12, - 196, - 235, - 165, - 97, - 89, - 128, - 131, - 1, - 82, - 127, - 3, - 153, - 78, - 126, - 119, - 173, - 88, - 7, - 43, - 120, - 117, - 119, - 0, - 171, - 11, - 121, - 36, - 127, - 46, - 70, - 43, - 12, - 246, - 165, - 161, - 139, - 96, - 116, - 20, - 192, - 149, - 219, - 97, - 89, - 160, - 131, - 1, - 82, - 97, - 75, - 224, - 130, - 1, - 81, - 97, - 89, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 89, - 128, - 133, - 1, - 96, - 96, - 97, - 89, - 128, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 89, - 0, - 130, - 1, - 81, - 97, - 89, - 224, - 131, - 1, - 82, - 97, - 89, - 32, - 130, - 1, - 81, - 97, - 90, - 0, - 131, - 1, - 82, - 97, - 89, - 128, - 130, - 1, - 81, - 97, - 90, - 32, - 131, - 1, - 82, - 97, - 89, - 160, - 130, - 1, - 81, - 97, - 90, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 89, - 224, - 133, - 1, - 96, - 128, - 97, - 89, - 224, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 35, - 186, - 75, - 196, - 155, - 170, - 181, - 99, - 233, - 213, - 191, - 7, - 218, - 35, - 26, - 68, - 150, - 211, - 91, - 107, - 199, - 130, - 219, - 189, - 118, - 19, - 95, - 228, - 76, - 49, - 203, - 207, - 97, - 90, - 96, - 131, - 1, - 82, - 127, - 40, - 184, - 128, - 151, - 231, - 237, - 241, - 178, - 144, - 79, - 108, - 37, - 193, - 227, - 12, - 160, - 227, - 140, - 116, - 165, - 33, - 37, - 178, - 153, - 92, - 76, - 240, - 167, - 80, - 104, - 56, - 84, - 97, - 90, - 128, - 131, - 1, - 82, - 97, - 76, - 0, - 130, - 1, - 81, - 97, - 90, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 90, - 96, - 133, - 1, - 96, - 96, - 97, - 90, - 96, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 89, - 224, - 130, - 1, - 81, - 97, - 90, - 192, - 131, - 1, - 82, - 97, - 90, - 0, - 130, - 1, - 81, - 97, - 90, - 224, - 131, - 1, - 82, - 97, - 90, - 96, - 130, - 1, - 81, - 97, - 91, - 0, - 131, - 1, - 82, - 97, - 90, - 128, - 130, - 1, - 81, - 97, - 91, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 90, - 192, - 133, - 1, - 96, - 128, - 97, - 90, - 192, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 23, - 220, - 187, - 160, - 187, - 226, - 210, - 69, - 102, - 222, - 98, - 9, - 152, - 246, - 47, - 245, - 78, - 165, - 48, - 42, - 218, - 106, - 235, - 24, - 2, - 139, - 97, - 180, - 220, - 25, - 187, - 211, - 97, - 91, - 64, - 131, - 1, - 82, - 127, - 14, - 31, - 144, - 128, - 7, - 165, - 194, - 204, - 147, - 68, - 38, - 194, - 109, - 231, - 32, - 108, - 83, - 250, - 16, - 199, - 157, - 99, - 239, - 82, - 238, - 145, - 191, - 181, - 104, - 199, - 47, - 189, - 97, - 91, - 96, - 131, - 1, - 82, - 97, - 76, - 32, - 130, - 1, - 81, - 97, - 91, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 91, - 64, - 133, - 1, - 96, - 96, - 97, - 91, - 64, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 90, - 192, - 130, - 1, - 81, - 97, - 91, - 160, - 131, - 1, - 82, - 97, - 90, - 224, - 130, - 1, - 81, - 97, - 91, - 192, - 131, - 1, - 82, - 97, - 91, - 64, - 130, - 1, - 81, - 97, - 91, - 224, - 131, - 1, - 82, - 97, - 91, - 96, - 130, - 1, - 81, - 97, - 92, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 91, - 160, - 133, - 1, - 96, - 128, - 97, - 91, - 160, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 44, - 120, - 35, - 249, - 156, - 178, - 173, - 183, - 22, - 190, - 203, - 150, - 9, - 20, - 255, - 161, - 214, - 226, - 242, - 87, - 135, - 95, - 221, - 3, - 194, - 190, - 229, - 46, - 245, - 113, - 212, - 30, - 97, - 92, - 32, - 131, - 1, - 82, - 127, - 9, - 171, - 131, - 235, - 198, - 128, - 62, - 101, - 178, - 230, - 131, - 28, - 135, - 6, - 217, - 161, - 52, - 246, - 177, - 207, - 111, - 110, - 197, - 194, - 105, - 122, - 254, - 224, - 149, - 50, - 14, - 225, - 97, - 92, - 64, - 131, - 1, - 82, - 97, - 76, - 64, - 130, - 1, - 81, - 97, - 92, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 92, - 32, - 133, - 1, - 96, - 96, - 97, - 92, - 32, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 91, - 160, - 130, - 1, - 81, - 97, - 92, - 128, - 131, - 1, - 82, - 97, - 91, - 192, - 130, - 1, - 81, - 97, - 92, - 160, - 131, - 1, - 82, - 97, - 92, - 32, - 130, - 1, - 81, - 97, - 92, - 192, - 131, - 1, - 82, - 97, - 92, - 64, - 130, - 1, - 81, - 97, - 92, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 92, - 128, - 133, - 1, - 96, - 128, - 97, - 92, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 45, - 193, - 44, - 32, - 81, - 82, - 191, - 172, - 195, - 84, - 200, - 56, - 34, - 85, - 113, - 23, - 44, - 33, - 94, - 1, - 166, - 77, - 230, - 162, - 202, - 102, - 101, - 199, - 9, - 55, - 172, - 88, - 97, - 93, - 0, - 131, - 1, - 82, - 127, - 4, - 73, - 235, - 82, - 159, - 0, - 56, - 162, - 189, - 47, - 108, - 11, - 98, - 19, - 167, - 4, - 136, - 182, - 155, - 71, - 157, - 144, - 169, - 83, - 87, - 158, - 76, - 157, - 69, - 98, - 27, - 133, - 97, - 93, - 32, - 131, - 1, - 82, - 97, - 76, - 96, - 130, - 1, - 81, - 97, - 93, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 93, - 0, - 133, - 1, - 96, - 96, - 97, - 93, - 0, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 92, - 128, - 130, - 1, - 81, - 97, - 93, - 96, - 131, - 1, - 82, - 97, - 92, - 160, - 130, - 1, - 81, - 97, - 93, - 128, - 131, - 1, - 82, - 97, - 93, - 0, - 130, - 1, - 81, - 97, - 93, - 160, - 131, - 1, - 82, - 97, - 93, - 32, - 130, - 1, - 81, - 97, - 93, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 93, - 96, - 133, - 1, - 96, - 128, - 97, - 93, - 96, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 9, - 162, - 171, - 57, - 19, - 164, - 119, - 15, - 213, - 15, - 107, - 169, - 236, - 76, - 224, - 179, - 23, - 139, - 84, - 215, - 191, - 202, - 91, - 66, - 254, - 126, - 142, - 28, - 229, - 207, - 96, - 169, - 97, - 93, - 224, - 131, - 1, - 82, - 127, - 19, - 236, - 49, - 249, - 64, - 38, - 86, - 156, - 75, - 183, - 110, - 44, - 76, - 234, - 163, - 230, - 82, - 84, - 56, - 255, - 180, - 167, - 166, - 156, - 222, - 97, - 246, - 215, - 123, - 147, - 186, - 215, - 97, - 94, - 0, - 131, - 1, - 82, - 97, - 76, - 128, - 130, - 1, - 81, - 97, - 94, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 93, - 224, - 133, - 1, - 96, - 96, - 97, - 93, - 224, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 93, - 96, - 130, - 1, - 81, - 97, - 94, - 64, - 131, - 1, - 82, - 97, - 93, - 128, - 130, - 1, - 81, - 97, - 94, - 96, - 131, - 1, - 82, - 97, - 93, - 224, - 130, - 1, - 81, - 97, - 94, - 128, - 131, - 1, - 82, - 97, - 94, - 0, - 130, - 1, - 81, - 97, - 94, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 94, - 64, - 133, - 1, - 96, - 128, - 97, - 94, - 64, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 7, - 67, - 234, - 64, - 241, - 64, - 132, - 219, - 38, - 115, - 33, - 114, - 131, - 170, - 5, - 63, - 152, - 104, - 150, - 238, - 124, - 24, - 31, - 82, - 17, - 132, - 66, - 233, - 156, - 69, - 41, - 116, - 97, - 94, - 192, - 131, - 1, - 82, - 127, - 2, - 3, - 227, - 73, - 58, - 37, - 148, - 236, - 229, - 125, - 34, - 204, - 117, - 221, - 8, - 26, - 198, - 130, - 113, - 236, - 124, - 117, - 129, - 83, - 207, - 210, - 21, - 43, - 251, - 92, - 25, - 227, - 97, - 94, - 224, - 131, - 1, - 82, - 97, - 76, - 160, - 130, - 1, - 81, - 97, - 95, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 94, - 192, - 133, - 1, - 96, - 96, - 97, - 94, - 192, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 94, - 64, - 130, - 1, - 81, - 97, - 95, - 32, - 131, - 1, - 82, - 97, - 94, - 96, - 130, - 1, - 81, - 97, - 95, - 64, - 131, - 1, - 82, - 97, - 94, - 192, - 130, - 1, - 81, - 97, - 95, - 96, - 131, - 1, - 82, - 97, - 94, - 224, - 130, - 1, - 81, - 97, - 95, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 95, - 32, - 133, - 1, - 96, - 128, - 97, - 95, - 32, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 2, - 169, - 167, - 125, - 142, - 111, - 111, - 216, - 159, - 51, - 186, - 86, - 254, - 69, - 246, - 245, - 201, - 7, - 229, - 11, - 162, - 140, - 221, - 65, - 152, - 172, - 251, - 86, - 46, - 178, - 17, - 3, - 97, - 95, - 160, - 131, - 1, - 82, - 127, - 35, - 171, - 238, - 104, - 216, - 60, - 45, - 102, - 50, - 87, - 110, - 94, - 149, - 202, - 1, - 166, - 30, - 94, - 62, - 109, - 148, - 56, - 194, - 172, - 100, - 40, - 200, - 182, - 237, - 254, - 42, - 186, - 97, - 95, - 192, - 131, - 1, - 82, - 97, - 76, - 192, - 130, - 1, - 81, - 97, - 95, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 95, - 160, - 133, - 1, - 96, - 96, - 97, - 95, - 160, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 95, - 32, - 130, - 1, - 81, - 97, - 96, - 0, - 131, - 1, - 82, - 97, - 95, - 64, - 130, - 1, - 81, - 97, - 96, - 32, - 131, - 1, - 82, - 97, - 95, - 160, - 130, - 1, - 81, - 97, - 96, - 64, - 131, - 1, - 82, - 97, - 95, - 192, - 130, - 1, - 81, - 97, - 96, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 96, - 0, - 133, - 1, - 96, - 128, - 97, - 96, - 0, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 44, - 243, - 109, - 54, - 191, - 172, - 190, - 26, - 141, - 140, - 98, - 106, - 239, - 167, - 90, - 192, - 254, - 180, - 107, - 114, - 89, - 137, - 168, - 230, - 250, - 190, - 208, - 116, - 191, - 159, - 106, - 247, - 97, - 96, - 128, - 131, - 1, - 82, - 127, - 6, - 15, - 222, - 211, - 237, - 94, - 197, - 109, - 158, - 0, - 100, - 215, - 60, - 71, - 34, - 69, - 164, - 196, - 182, - 236, - 55, - 30, - 152, - 8, - 105, - 43, - 247, - 242, - 89, - 211, - 183, - 48, - 97, - 96, - 160, - 131, - 1, - 82, - 97, - 76, - 224, - 130, - 1, - 81, - 97, - 96, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 96, - 128, - 133, - 1, - 96, - 96, - 97, - 96, - 128, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 96, - 0, - 130, - 1, - 81, - 97, - 96, - 224, - 131, - 1, - 82, - 97, - 96, - 32, - 130, - 1, - 81, - 97, - 97, - 0, - 131, - 1, - 82, - 97, - 96, - 128, - 130, - 1, - 81, - 97, - 97, - 32, - 131, - 1, - 82, - 97, - 96, - 160, - 130, - 1, - 81, - 97, - 97, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 96, - 224, - 133, - 1, - 96, - 128, - 97, - 96, - 224, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 4, - 64, - 130, - 1, - 81, - 97, - 97, - 96, - 131, - 1, - 82, - 97, - 4, - 96, - 130, - 1, - 81, - 97, - 97, - 128, - 131, - 1, - 82, - 97, - 77, - 0, - 130, - 1, - 81, - 97, - 97, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 97, - 96, - 133, - 1, - 96, - 96, - 97, - 97, - 96, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 96, - 224, - 130, - 1, - 81, - 97, - 97, - 192, - 131, - 1, - 82, - 97, - 97, - 0, - 130, - 1, - 81, - 97, - 97, - 224, - 131, - 1, - 82, - 97, - 97, - 96, - 130, - 1, - 81, - 97, - 98, - 0, - 131, - 1, - 82, - 97, - 97, - 128, - 130, - 1, - 81, - 97, - 98, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 97, - 192, - 133, - 1, - 96, - 128, - 97, - 97, - 192, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 4, - 128, - 130, - 1, - 81, - 97, - 98, - 64, - 131, - 1, - 82, - 97, - 4, - 160, - 130, - 1, - 81, - 97, - 98, - 96, - 131, - 1, - 82, - 97, - 77, - 32, - 130, - 1, - 81, - 97, - 98, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 98, - 64, - 133, - 1, - 96, - 96, - 97, - 98, - 64, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 97, - 192, - 130, - 1, - 81, - 97, - 98, - 160, - 131, - 1, - 82, - 97, - 97, - 224, - 130, - 1, - 81, - 97, - 98, - 192, - 131, - 1, - 82, - 97, - 98, - 64, - 130, - 1, - 81, - 97, - 98, - 224, - 131, - 1, - 82, - 97, - 98, - 96, - 130, - 1, - 81, - 97, - 99, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 98, - 160, - 133, - 1, - 96, - 128, - 97, - 98, - 160, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 4, - 192, - 130, - 1, - 81, - 97, - 99, - 32, - 131, - 1, - 82, - 97, - 4, - 224, - 130, - 1, - 81, - 97, - 99, - 64, - 131, - 1, - 82, - 97, - 77, - 64, - 130, - 1, - 81, - 97, - 99, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 99, - 32, - 133, - 1, - 96, - 96, - 97, - 99, - 32, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 98, - 160, - 130, - 1, - 81, - 97, - 99, - 128, - 131, - 1, - 82, - 97, - 98, - 192, - 130, - 1, - 81, - 97, - 99, - 160, - 131, - 1, - 82, - 97, - 99, - 32, - 130, - 1, - 81, - 97, - 99, - 192, - 131, - 1, - 82, - 97, - 99, - 64, - 130, - 1, - 81, - 97, - 99, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 99, - 128, - 133, - 1, - 96, - 128, - 97, - 99, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 5, - 0, - 130, - 1, - 81, - 97, - 100, - 0, - 131, - 1, - 82, - 97, - 5, - 32, - 130, - 1, - 81, - 97, - 100, - 32, - 131, - 1, - 82, - 97, - 77, - 96, - 130, - 1, - 81, - 97, - 100, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 100, - 0, - 133, - 1, - 96, - 96, - 97, - 100, - 0, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 99, - 128, - 130, - 1, - 81, - 97, - 100, - 96, - 131, - 1, - 82, - 97, - 99, - 160, - 130, - 1, - 81, - 97, - 100, - 128, - 131, - 1, - 82, - 97, - 100, - 0, - 130, - 1, - 81, - 97, - 100, - 160, - 131, - 1, - 82, - 97, - 100, - 32, - 130, - 1, - 81, - 97, - 100, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 100, - 96, - 133, - 1, - 96, - 128, - 97, - 100, - 96, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 5, - 64, - 130, - 1, - 81, - 97, - 100, - 224, - 131, - 1, - 82, - 97, - 5, - 96, - 130, - 1, - 81, - 97, - 101, - 0, - 131, - 1, - 82, - 97, - 77, - 128, - 130, - 1, - 81, - 97, - 101, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 100, - 224, - 133, - 1, - 96, - 96, - 97, - 100, - 224, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 100, - 96, - 130, - 1, - 81, - 97, - 101, - 64, - 131, - 1, - 82, - 97, - 100, - 128, - 130, - 1, - 81, - 97, - 101, - 96, - 131, - 1, - 82, - 97, - 100, - 224, - 130, - 1, - 81, - 97, - 101, - 128, - 131, - 1, - 82, - 97, - 101, - 0, - 130, - 1, - 81, - 97, - 101, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 101, - 64, - 133, - 1, - 96, - 128, - 97, - 101, - 64, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 3, - 160, - 130, - 1, - 81, - 97, - 101, - 192, - 131, - 1, - 82, - 97, - 3, - 192, - 130, - 1, - 81, - 97, - 101, - 224, - 131, - 1, - 82, - 97, - 77, - 160, - 130, - 1, - 81, - 97, - 102, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 101, - 192, - 133, - 1, - 96, - 96, - 97, - 101, - 192, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 101, - 64, - 130, - 1, - 81, - 97, - 102, - 32, - 131, - 1, - 82, - 97, - 101, - 96, - 130, - 1, - 81, - 97, - 102, - 64, - 131, - 1, - 82, - 97, - 101, - 192, - 130, - 1, - 81, - 97, - 102, - 96, - 131, - 1, - 82, - 97, - 101, - 224, - 130, - 1, - 81, - 97, - 102, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 102, - 32, - 133, - 1, - 96, - 128, - 97, - 102, - 32, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 10, - 192, - 130, - 1, - 81, - 97, - 102, - 160, - 131, - 1, - 82, - 97, - 10, - 224, - 130, - 1, - 81, - 97, - 102, - 192, - 131, - 1, - 82, - 97, - 77, - 224, - 130, - 1, - 81, - 129, - 3, - 97, - 102, - 224, - 131, - 1, - 82, - 80, - 129, - 96, - 1, - 96, - 64, - 97, - 102, - 160, - 132, - 1, - 96, - 96, - 97, - 102, - 160, - 134, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 145, - 80, - 97, - 102, - 32, - 129, - 1, - 81, - 97, - 103, - 0, - 130, - 1, - 82, - 97, - 102, - 64, - 129, - 1, - 81, - 97, - 103, - 32, - 130, - 1, - 82, - 97, - 102, - 160, - 129, - 1, - 81, - 97, - 103, - 64, - 130, - 1, - 82, - 97, - 102, - 192, - 129, - 1, - 81, - 97, - 103, - 96, - 130, - 1, - 82, - 129, - 96, - 1, - 96, - 64, - 97, - 103, - 0, - 132, - 1, - 96, - 128, - 97, - 103, - 0, - 134, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 145, - 80, - 97, - 11, - 96, - 129, - 1, - 81, - 97, - 103, - 128, - 130, - 1, - 82, - 97, - 11, - 128, - 129, - 1, - 81, - 97, - 103, - 160, - 130, - 1, - 82, - 97, - 78, - 0, - 129, - 1, - 81, - 97, - 103, - 192, - 130, - 1, - 82, - 129, - 96, - 1, - 96, - 64, - 97, - 103, - 128, - 132, - 1, - 96, - 96, - 97, - 103, - 128, - 134, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 145, - 80, - 97, - 103, - 0, - 129, - 1, - 81, - 97, - 103, - 224, - 130, - 1, - 82, - 97, - 103, - 32, - 129, - 1, - 81, - 97, - 104, - 0, - 130, - 1, - 82, - 97, - 103, - 128, - 129, - 1, - 81, - 97, - 104, - 32, - 130, - 1, - 82, - 97, - 103, - 160, - 129, - 1, - 81, - 97, - 104, - 64, - 130, - 1, - 82, - 129, - 96, - 1, - 96, - 64, - 97, - 103, - 224, - 132, - 1, - 96, - 128, - 97, - 103, - 224, - 134, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 145, - 80, - 97, - 103, - 224, - 129, - 1, - 81, - 97, - 104, - 96, - 130, - 1, - 82, - 97, - 104, - 0, - 129, - 1, - 81, - 97, - 104, - 128, - 130, - 1, - 82, - 127, - 25, - 142, - 147, - 147, - 146, - 13, - 72, - 58, - 114, - 96, - 191, - 183, - 49, - 251, - 93, - 37, - 241, - 170, - 73, - 51, - 53, - 169, - 231, - 18, - 151, - 228, - 133, - 183, - 174, - 243, - 18, - 194, - 97, - 104, - 160, - 130, - 1, - 82, - 127, - 24, - 0, - 222, - 239, - 18, - 31, - 30, - 118, - 66, - 106, - 0, - 102, - 94, - 92, - 68, - 121, - 103, - 67, - 34, - 212, - 247, - 94, - 218, - 221, - 70, - 222, - 189, - 92, - 217, - 146, - 246, - 237, - 97, - 104, - 192, - 130, - 1, - 82, - 127, - 9, - 6, - 137, - 208, - 88, - 95, - 240, - 117, - 236, - 158, - 153, - 173, - 105, - 12, - 51, - 149, - 188, - 75, - 49, - 51, - 112, - 179, - 142, - 243, - 85, - 172, - 218, - 220, - 209, - 34, - 151, - 91, - 97, - 104, - 224, - 130, - 1, - 82, - 127, - 18, - 200, - 94, - 165, - 219, - 140, - 109, - 235, - 74, - 171, - 113, - 128, - 141, - 203, - 64, - 143, - 227, - 209, - 231, - 105, - 12, - 67, - 211, - 123, - 76, - 230, - 204, - 1, - 102, - 250, - 125, - 170, - 97, - 105, - 0, - 130, - 1, - 82, - 97, - 11, - 96, - 129, - 1, - 81, - 97, - 105, - 32, - 130, - 1, - 82, - 97, - 11, - 128, - 129, - 1, - 81, - 97, - 105, - 64, - 130, - 1, - 82, - 127, - 38, - 24, - 106, - 45, - 101, - 238, - 77, - 47, - 156, - 154, - 91, - 145, - 248, - 101, - 151, - 211, - 95, - 25, - 44, - 209, - 32, - 202, - 247, - 233, - 53, - 216, - 68, - 61, - 25, - 56, - 226, - 61, - 97, - 105, - 96, - 130, - 1, - 82, - 127, - 48, - 68, - 31, - 209, - 181, - 211, - 55, - 4, - 130, - 196, - 33, - 82, - 168, - 137, - 144, - 39, - 113, - 105, - 137, - 166, - 153, - 108, - 37, - 53, - 188, - 159, - 127, - 238, - 138, - 174, - 247, - 158, - 97, - 105, - 128, - 130, - 1, - 82, - 127, - 22, - 243, - 99, - 241, - 3, - 200, - 13, - 123, - 188, - 138, - 211, - 198, - 134, - 126, - 8, - 34, - 187, - 198, - 0, - 11, - 233, - 26, - 70, - 137, - 117, - 92, - 125, - 244, - 2, - 33, - 193, - 69, - 97, - 105, - 160, - 130, - 1, - 82, - 127, - 43, - 28, - 187, - 62, - 82, - 30, - 223, - 90, - 98, - 45, - 130, - 118, - 42, - 68, - 165, - 230, - 63, - 30, - 80, - 179, - 50, - 215, - 17, - 84, - 164, - 167, - 149, - 141, - 96, - 17, - 222, - 255, - 97, - 105, - 192, - 130, - 1, - 82, - 129, - 96, - 1, - 96, - 32, - 97, - 104, - 96, - 132, - 1, - 97, - 1, - 128, - 97, - 104, - 96, - 134, - 1, - 96, - 8, - 90, - 250, - 97, - 104, - 96, - 147, - 144, - 147, - 1, - 81, - 96, - 1, - 20, - 146, - 20, - 22, - 22, - 145, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 64, - 81, - 128, - 97, - 105, - 192, - 1, - 96, - 64, - 82, - 128, - 97, - 3, - 78, - 144, - 96, - 32, - 130, - 2, - 128, - 54, - 131, - 55, - 80, - 145, - 146, - 145, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 64, - 81, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 129, - 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, - 130, - 16, - 23, - 21, - 97, - 78, - 92, - 87, - 97, - 78, - 92, - 97, - 78, - 29, - 86, - 91, - 96, - 64, - 82, - 145, - 144, - 80, - 86, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 78, - 117, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 78, - 143, - 87, - 97, - 78, - 143, - 97, - 78, - 29, - 86, - 91, - 97, - 78, - 162, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 96, - 32, - 1, - 97, - 78, - 51, - 86, - 91, - 129, - 129, - 82, - 132, - 96, - 32, - 131, - 134, - 1, - 1, - 17, - 21, - 97, - 78, - 183, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 96, - 32, - 133, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 145, - 129, - 1, - 96, - 32, - 1, - 145, - 144, - 145, - 82, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 64, - 131, - 133, - 3, - 18, - 21, - 97, - 78, - 231, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 78, - 255, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 133, - 1, - 145, - 80, - 133, - 96, - 31, - 131, - 1, - 18, - 97, - 79, - 19, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 96, - 32, - 130, - 130, - 17, - 21, - 97, - 79, - 39, - 87, - 97, - 79, - 39, - 97, - 78, - 29, - 86, - 91, - 129, - 96, - 5, - 27, - 97, - 79, - 54, - 130, - 130, - 1, - 97, - 78, - 51, - 86, - 91, - 146, - 131, - 82, - 132, - 129, - 1, - 130, - 1, - 146, - 130, - 129, - 1, - 144, - 138, - 133, - 17, - 21, - 97, - 79, - 80, - 87, - 96, - 0, - 128, - 253, - 91, - 149, - 131, - 1, - 149, - 91, - 132, - 135, - 16, - 21, - 97, - 79, - 110, - 87, - 134, - 53, - 130, - 82, - 149, - 131, - 1, - 149, - 144, - 131, - 1, - 144, - 97, - 79, - 85, - 86, - 91, - 151, - 80, - 80, - 80, - 134, - 1, - 53, - 146, - 80, - 80, - 128, - 130, - 17, - 21, - 97, - 79, - 133, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 79, - 146, - 133, - 130, - 134, - 1, - 97, - 78, - 100, - 86, - 91, - 145, - 80, - 80, - 146, - 80, - 146, - 144, - 80, - 86, - 254, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 151, - 129, - 106, - 145, - 104, - 113, - 202, - 141, - 60, - 32, - 140, - 22, - 216, - 124, - 253, - 71, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 212, - 178, - 220, - 135, - 152, - 186, - 177, - 123, - 101, - 162, - 231, - 44, - 60, - 209, - 59, - 7, - 180, - 165, - 138, - 174, - 54, - 106, - 119, - 120, - 72, - 82, - 51, - 60, - 117, - 170, - 120, - 185, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static SOLVENCYVERIFIER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 43, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 189, - 32, - 90, - 144, - 20, - 97, - 0, - 48, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 67, - 97, - 0, - 62, - 54, - 96, - 4, - 97, - 78, - 212, - 86, - 91, - 97, - 0, - 87, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 0, - 96, - 1, - 97, - 0, - 99, - 97, - 77, - 253, - 86, - 91, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 189, - 131, - 57, - 129, - 81, - 145, - 82, - 97, - 0, - 217, - 86, - 91, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 157, - 131, - 57, - 129, - 81, - 145, - 82, - 128, - 131, - 16, - 129, - 131, - 16, - 22, - 144, - 131, - 128, - 9, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 157, - 131, - 57, - 129, - 81, - 145, - 82, - 131, - 132, - 9, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 157, - 131, - 57, - 129, - 81, - 145, - 82, - 132, - 130, - 9, - 144, - 80, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 157, - 131, - 57, - 129, - 81, - 145, - 82, - 96, - 3, - 130, - 8, - 145, - 144, - 145, - 20, - 145, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 128, - 96, - 32, - 135, - 1, - 81, - 6, - 96, - 32, - 131, - 1, - 82, - 128, - 96, - 64, - 135, - 1, - 81, - 6, - 96, - 64, - 131, - 1, - 82, - 128, - 96, - 96, - 135, - 1, - 81, - 6, - 96, - 96, - 131, - 1, - 82, - 126, - 174, - 153, - 177, - 55, - 145, - 111, - 244, - 34, - 11, - 13, - 167, - 23, - 154, - 70, - 1, - 48, - 28, - 130, - 52, - 111, - 198, - 101, - 205, - 51, - 105, - 165, - 78, - 31, - 2, - 212, - 234, - 96, - 0, - 131, - 1, - 82, - 96, - 32, - 133, - 1, - 81, - 128, - 96, - 128, - 132, - 1, - 82, - 96, - 64, - 134, - 1, - 81, - 128, - 96, - 160, - 133, - 1, - 82, - 132, - 97, - 1, - 67, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 96, - 96, - 133, - 1, - 81, - 128, - 96, - 192, - 132, - 1, - 82, - 96, - 128, - 134, - 1, - 81, - 128, - 96, - 224, - 133, - 1, - 82, - 132, - 97, - 1, - 105, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 96, - 160, - 133, - 1, - 81, - 128, - 97, - 1, - 0, - 132, - 1, - 82, - 96, - 192, - 134, - 1, - 81, - 128, - 97, - 1, - 32, - 133, - 1, - 82, - 132, - 97, - 1, - 145, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 64, - 96, - 0, - 131, - 1, - 32, - 97, - 1, - 64, - 131, - 1, - 82, - 97, - 1, - 64, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 1, - 96, - 132, - 1, - 82, - 128, - 97, - 1, - 128, - 132, - 1, - 82, - 80, - 96, - 224, - 133, - 1, - 81, - 128, - 97, - 1, - 160, - 132, - 1, - 82, - 97, - 1, - 0, - 134, - 1, - 81, - 128, - 97, - 1, - 192, - 133, - 1, - 82, - 132, - 97, - 1, - 223, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 32, - 133, - 1, - 81, - 128, - 97, - 1, - 224, - 132, - 1, - 82, - 97, - 1, - 64, - 134, - 1, - 81, - 128, - 97, - 2, - 0, - 133, - 1, - 82, - 132, - 97, - 2, - 9, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 96, - 160, - 97, - 1, - 128, - 135, - 1, - 32, - 97, - 2, - 32, - 135, - 1, - 129, - 144, - 82, - 133, - 129, - 6, - 97, - 2, - 64, - 136, - 1, - 82, - 97, - 2, - 96, - 135, - 1, - 82, - 22, - 148, - 80, - 96, - 1, - 145, - 80, - 80, - 97, - 2, - 128, - 131, - 1, - 83, - 96, - 33, - 97, - 2, - 96, - 131, - 1, - 32, - 97, - 2, - 128, - 131, - 1, - 129, - 144, - 82, - 129, - 129, - 6, - 97, - 2, - 160, - 132, - 1, - 82, - 97, - 2, - 192, - 131, - 1, - 82, - 97, - 1, - 96, - 133, - 1, - 81, - 97, - 2, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 1, - 128, - 134, - 1, - 81, - 97, - 3, - 0, - 132, - 1, - 129, - 144, - 82, - 132, - 97, - 2, - 124, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 160, - 133, - 1, - 81, - 128, - 97, - 3, - 32, - 132, - 1, - 82, - 97, - 1, - 192, - 134, - 1, - 81, - 128, - 97, - 3, - 64, - 133, - 1, - 82, - 132, - 97, - 2, - 166, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 224, - 133, - 1, - 81, - 128, - 97, - 3, - 96, - 132, - 1, - 82, - 97, - 2, - 0, - 134, - 1, - 81, - 128, - 97, - 3, - 128, - 133, - 1, - 82, - 132, - 97, - 2, - 208, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 2, - 32, - 133, - 1, - 81, - 128, - 97, - 3, - 160, - 132, - 1, - 82, - 97, - 2, - 64, - 134, - 1, - 81, - 128, - 97, - 3, - 192, - 133, - 1, - 82, - 132, - 97, - 2, - 250, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 32, - 97, - 2, - 192, - 131, - 1, - 32, - 97, - 3, - 224, - 131, - 1, - 82, - 97, - 3, - 224, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 4, - 0, - 132, - 1, - 82, - 128, - 97, - 4, - 32, - 132, - 1, - 82, - 80, - 97, - 2, - 96, - 133, - 1, - 81, - 128, - 97, - 4, - 64, - 132, - 1, - 82, - 97, - 2, - 128, - 134, - 1, - 81, - 128, - 97, - 4, - 96, - 133, - 1, - 82, - 132, - 97, - 3, - 74, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 2, - 160, - 133, - 1, - 81, - 128, - 97, - 4, - 128, - 132, - 1, - 82, - 97, - 2, - 192, - 134, - 1, - 81, - 128, - 97, - 4, - 160, - 133, - 1, - 82, - 132, - 97, - 3, - 116, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 2, - 224, - 133, - 1, - 81, - 128, - 97, - 4, - 192, - 132, - 1, - 82, - 97, - 3, - 0, - 134, - 1, - 81, - 128, - 97, - 4, - 224, - 133, - 1, - 82, - 132, - 97, - 3, - 158, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 3, - 32, - 133, - 1, - 81, - 128, - 97, - 5, - 0, - 132, - 1, - 82, - 97, - 3, - 64, - 134, - 1, - 81, - 128, - 97, - 5, - 32, - 133, - 1, - 82, - 132, - 97, - 3, - 200, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 3, - 96, - 133, - 1, - 81, - 128, - 97, - 5, - 64, - 132, - 1, - 82, - 97, - 3, - 128, - 134, - 1, - 81, - 128, - 97, - 5, - 96, - 133, - 1, - 82, - 132, - 97, - 3, - 242, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 97, - 1, - 96, - 97, - 4, - 32, - 131, - 1, - 32, - 97, - 5, - 128, - 131, - 1, - 82, - 97, - 5, - 128, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 5, - 160, - 132, - 1, - 82, - 128, - 97, - 5, - 192, - 132, - 1, - 82, - 80, - 128, - 97, - 3, - 160, - 134, - 1, - 81, - 6, - 97, - 5, - 224, - 131, - 1, - 82, - 128, - 97, - 3, - 192, - 134, - 1, - 81, - 6, - 97, - 6, - 0, - 131, - 1, - 82, - 128, - 97, - 3, - 224, - 134, - 1, - 81, - 6, - 97, - 6, - 32, - 131, - 1, - 82, - 128, - 97, - 4, - 0, - 134, - 1, - 81, - 6, - 97, - 6, - 64, - 131, - 1, - 82, - 128, - 97, - 4, - 32, - 134, - 1, - 81, - 6, - 97, - 6, - 96, - 131, - 1, - 82, - 128, - 97, - 4, - 64, - 134, - 1, - 81, - 6, - 97, - 6, - 128, - 131, - 1, - 82, - 128, - 97, - 4, - 96, - 134, - 1, - 81, - 6, - 97, - 6, - 160, - 131, - 1, - 82, - 128, - 97, - 4, - 128, - 134, - 1, - 81, - 6, - 97, - 6, - 192, - 131, - 1, - 82, - 128, - 97, - 4, - 160, - 134, - 1, - 81, - 6, - 97, - 6, - 224, - 131, - 1, - 82, - 128, - 97, - 4, - 192, - 134, - 1, - 81, - 6, - 97, - 7, - 0, - 131, - 1, - 82, - 128, - 97, - 4, - 224, - 134, - 1, - 81, - 6, - 97, - 7, - 32, - 131, - 1, - 82, - 128, - 97, - 5, - 0, - 134, - 1, - 81, - 6, - 97, - 7, - 64, - 131, - 1, - 82, - 128, - 97, - 5, - 32, - 134, - 1, - 81, - 6, - 97, - 7, - 96, - 131, - 1, - 82, - 128, - 97, - 5, - 64, - 134, - 1, - 81, - 6, - 97, - 7, - 128, - 131, - 1, - 82, - 128, - 97, - 5, - 96, - 134, - 1, - 81, - 6, - 97, - 7, - 160, - 131, - 1, - 82, - 128, - 97, - 5, - 128, - 134, - 1, - 81, - 6, - 97, - 7, - 192, - 131, - 1, - 82, - 128, - 97, - 5, - 160, - 134, - 1, - 81, - 6, - 97, - 7, - 224, - 131, - 1, - 82, - 128, - 97, - 5, - 192, - 134, - 1, - 81, - 6, - 97, - 8, - 0, - 131, - 1, - 82, - 128, - 97, - 5, - 224, - 134, - 1, - 81, - 6, - 97, - 8, - 32, - 131, - 1, - 82, - 128, - 97, - 6, - 0, - 134, - 1, - 81, - 6, - 97, - 8, - 64, - 131, - 1, - 82, - 128, - 97, - 6, - 32, - 134, - 1, - 81, - 6, - 97, - 8, - 96, - 131, - 1, - 82, - 128, - 97, - 6, - 64, - 134, - 1, - 81, - 6, - 97, - 8, - 128, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 134, - 1, - 81, - 6, - 97, - 8, - 160, - 131, - 1, - 82, - 128, - 97, - 6, - 128, - 134, - 1, - 81, - 6, - 97, - 8, - 192, - 131, - 1, - 82, - 128, - 97, - 6, - 160, - 134, - 1, - 81, - 6, - 97, - 8, - 224, - 131, - 1, - 82, - 128, - 97, - 6, - 192, - 134, - 1, - 81, - 6, - 97, - 9, - 0, - 131, - 1, - 82, - 128, - 97, - 6, - 224, - 134, - 1, - 81, - 6, - 97, - 9, - 32, - 131, - 1, - 82, - 128, - 97, - 7, - 0, - 134, - 1, - 81, - 6, - 97, - 9, - 64, - 131, - 1, - 82, - 128, - 97, - 7, - 32, - 134, - 1, - 81, - 6, - 97, - 9, - 96, - 131, - 1, - 82, - 128, - 97, - 7, - 64, - 134, - 1, - 81, - 6, - 97, - 9, - 128, - 131, - 1, - 82, - 128, - 97, - 7, - 96, - 134, - 1, - 81, - 6, - 97, - 9, - 160, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 134, - 1, - 81, - 6, - 97, - 9, - 192, - 131, - 1, - 82, - 128, - 97, - 7, - 160, - 134, - 1, - 81, - 6, - 97, - 9, - 224, - 131, - 1, - 82, - 97, - 4, - 64, - 97, - 5, - 192, - 131, - 1, - 32, - 97, - 10, - 0, - 131, - 1, - 82, - 97, - 10, - 0, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 10, - 32, - 132, - 1, - 82, - 128, - 97, - 10, - 64, - 132, - 1, - 82, - 80, - 96, - 1, - 97, - 10, - 96, - 131, - 1, - 83, - 96, - 33, - 97, - 10, - 64, - 131, - 1, - 32, - 97, - 10, - 96, - 131, - 1, - 129, - 144, - 82, - 129, - 129, - 6, - 97, - 10, - 128, - 132, - 1, - 82, - 97, - 10, - 160, - 131, - 1, - 82, - 97, - 7, - 192, - 133, - 1, - 81, - 97, - 10, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 224, - 134, - 1, - 81, - 97, - 10, - 224, - 132, - 1, - 129, - 144, - 82, - 132, - 97, - 6, - 95, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 96, - 96, - 97, - 10, - 160, - 131, - 1, - 32, - 97, - 11, - 0, - 131, - 1, - 82, - 97, - 11, - 0, - 130, - 1, - 81, - 129, - 129, - 6, - 97, - 11, - 32, - 132, - 1, - 82, - 128, - 97, - 11, - 64, - 132, - 1, - 82, - 80, - 97, - 8, - 0, - 133, - 1, - 81, - 128, - 97, - 11, - 96, - 132, - 1, - 82, - 97, - 8, - 32, - 134, - 1, - 81, - 128, - 97, - 11, - 128, - 133, - 1, - 82, - 132, - 97, - 6, - 174, - 130, - 132, - 97, - 0, - 119, - 86, - 91, - 22, - 148, - 80, - 80, - 80, - 128, - 97, - 5, - 160, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 11, - 160, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 11, - 192, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 11, - 224, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 0, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 32, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 64, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 96, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 128, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 160, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 12, - 192, - 131, - 1, - 82, - 128, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 0, - 97, - 12, - 192, - 132, - 1, - 81, - 8, - 97, - 12, - 224, - 131, - 1, - 82, - 128, - 127, - 48, - 88, - 53, - 95, - 68, - 121, - 83, - 193, - 173, - 226, - 49, - 165, - 19, - 224, - 248, - 7, - 16, - 233, - 219, - 78, - 103, - 155, - 2, - 53, - 31, - 144, - 253, - 22, - 139, - 4, - 0, - 1, - 97, - 12, - 224, - 132, - 1, - 81, - 9, - 97, - 13, - 0, - 131, - 1, - 82, - 128, - 127, - 21, - 247, - 157, - 185, - 195, - 145, - 129, - 188, - 62, - 49, - 200, - 63, - 146, - 145, - 218, - 118, - 238, - 223, - 27, - 35, - 196, - 16, - 173, - 215, - 233, - 9, - 132, - 100, - 170, - 164, - 251, - 38, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 13, - 32, - 131, - 1, - 82, - 128, - 127, - 26, - 108, - 176, - 185, - 29, - 160, - 30, - 109, - 122, - 30, - 125, - 118, - 238, - 239, - 125, - 230, - 57, - 84, - 205, - 36, - 181, - 168, - 194, - 185, - 90, - 216, - 113, - 47, - 69, - 91, - 4, - 219, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 13, - 64, - 131, - 1, - 82, - 128, - 127, - 3, - 183, - 67, - 215, - 79, - 217, - 221, - 180, - 31, - 146, - 1, - 121, - 172, - 48, - 224, - 75, - 14, - 189, - 147, - 229, - 128, - 185, - 192, - 181, - 0, - 97, - 8, - 121, - 4, - 17, - 11, - 212, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 13, - 96, - 131, - 1, - 82, - 128, - 127, - 44, - 173, - 10, - 155, - 145, - 87, - 194, - 117, - 152, - 190, - 68, - 60, - 213, - 80, - 120, - 18, - 25, - 118, - 84, - 98, - 248, - 255, - 175, - 220, - 67, - 128, - 237, - 26, - 235, - 238, - 244, - 45, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 13, - 128, - 131, - 1, - 82, - 128, - 127, - 31, - 77, - 113, - 128, - 223, - 80, - 20, - 132, - 152, - 37, - 243, - 201, - 176, - 232, - 157, - 121, - 67, - 44, - 81, - 244, - 142, - 181, - 132, - 106, - 230, - 59, - 67, - 63, - 40, - 171, - 161, - 11, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 13, - 160, - 131, - 1, - 82, - 128, - 127, - 17, - 22, - 220, - 242, - 1, - 225, - 139, - 165, - 32, - 42, - 81, - 236, - 208, - 152, - 186, - 227, - 229, - 7, - 150, - 83, - 235, - 3, - 236, - 38, - 93, - 166, - 178, - 84, - 199, - 84, - 94, - 246, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 13, - 192, - 131, - 1, - 82, - 128, - 127, - 34, - 181, - 86, - 3, - 88, - 109, - 95, - 196, - 44, - 108, - 20, - 194, - 252, - 39, - 160, - 40, - 194, - 7, - 218, - 139, - 44, - 113, - 203, - 51, - 213, - 73, - 250, - 74, - 43, - 229, - 211, - 2, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 13, - 224, - 131, - 1, - 82, - 128, - 127, - 13, - 174, - 248, - 111, - 136, - 196, - 64, - 101, - 139, - 228, - 48, - 243, - 133, - 89, - 184, - 52, - 102, - 44, - 13, - 189, - 77, - 71, - 165, - 93, - 110, - 151, - 251, - 73, - 196, - 26, - 44, - 255, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 14, - 0, - 131, - 1, - 82, - 128, - 127, - 9, - 107, - 159, - 139, - 133, - 152, - 183, - 195, - 135, - 251, - 105, - 171, - 242, - 54, - 176, - 213, - 224, - 78, - 36, - 210, - 117, - 238, - 152, - 36, - 68, - 67, - 237, - 165, - 211, - 188, - 64, - 53, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 14, - 32, - 131, - 1, - 82, - 128, - 127, - 38, - 248, - 174, - 231, - 91, - 152, - 232, - 102, - 48, - 84, - 220, - 10, - 143, - 74, - 167, - 135, - 71, - 229, - 195, - 118, - 3, - 202, - 216, - 108, - 255, - 158, - 7, - 238, - 28, - 67, - 191, - 204, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 14, - 64, - 131, - 1, - 82, - 128, - 127, - 10, - 227, - 201, - 95, - 192, - 60, - 10, - 95, - 45, - 232, - 168, - 244, - 108, - 3, - 204, - 223, - 223, - 237, - 43, - 185, - 140, - 158, - 74, - 224, - 177, - 11, - 21, - 237, - 164, - 227, - 177, - 227, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 14, - 96, - 131, - 1, - 82, - 128, - 127, - 37, - 128, - 133, - 19, - 32, - 245, - 149, - 202, - 138, - 103, - 156, - 194, - 21, - 125, - 139, - 125, - 72, - 70, - 188, - 142, - 237, - 27, - 37, - 176, - 146, - 214, - 223, - 166, - 75, - 28, - 78, - 30, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 14, - 128, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 14, - 160, - 131, - 1, - 82, - 128, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 0, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 14, - 192, - 131, - 1, - 82, - 128, - 127, - 42, - 217, - 2, - 30, - 208, - 124, - 66, - 171, - 25, - 247, - 124, - 92, - 242, - 203, - 210, - 222, - 177, - 53, - 234, - 51, - 15, - 27, - 21, - 115, - 189, - 8, - 217, - 147, - 9, - 196, - 187, - 125, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 14, - 224, - 131, - 1, - 82, - 128, - 127, - 5, - 139, - 76, - 84, - 16, - 181, - 93, - 126, - 158, - 88, - 201, - 89, - 142, - 181, - 133, - 126, - 118, - 253, - 254, - 21, - 106, - 158, - 91, - 29, - 134, - 217, - 28, - 0, - 230, - 59, - 68, - 132, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 15, - 0, - 131, - 1, - 82, - 128, - 127, - 13, - 211, - 11, - 154, - 216, - 193, - 115, - 85, - 93, - 42, - 51, - 2, - 155, - 200, - 7, - 172, - 22, - 91, - 97, - 40, - 30, - 144, - 84, - 161, - 115, - 175, - 127, - 244, - 228, - 252, - 136, - 252, - 97, - 13, - 0, - 132, - 1, - 81, - 9, - 97, - 15, - 32, - 131, - 1, - 82, - 128, - 127, - 34, - 145, - 66, - 216, - 8, - 112, - 44, - 212, - 91, - 38, - 18, - 179, - 229, - 185, - 80, - 177, - 17, - 216, - 135, - 32, - 91, - 41, - 27, - 239, - 208, - 50, - 117, - 159, - 11, - 3, - 119, - 5, - 97, - 5, - 160, - 132, - 1, - 81, - 8, - 97, - 15, - 64, - 131, - 1, - 82, - 97, - 13, - 64, - 130, - 1, - 81, - 129, - 129, - 97, - 13, - 128, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 96, - 132, - 1, - 82, - 129, - 129, - 97, - 13, - 192, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 128, - 132, - 1, - 82, - 129, - 129, - 97, - 14, - 0, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 160, - 132, - 1, - 82, - 129, - 129, - 97, - 14, - 64, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 192, - 132, - 1, - 82, - 129, - 129, - 97, - 14, - 128, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 15, - 224, - 132, - 1, - 82, - 129, - 129, - 97, - 14, - 192, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 16, - 0, - 132, - 1, - 82, - 129, - 129, - 97, - 15, - 0, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 16, - 32, - 132, - 1, - 82, - 129, - 129, - 97, - 15, - 64, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 16, - 64, - 132, - 1, - 82, - 129, - 129, - 97, - 12, - 224, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 16, - 96, - 132, - 1, - 82, - 80, - 96, - 32, - 97, - 16, - 160, - 131, - 1, - 82, - 96, - 32, - 97, - 16, - 192, - 131, - 1, - 82, - 96, - 32, - 97, - 16, - 224, - 131, - 1, - 82, - 97, - 16, - 96, - 130, - 1, - 81, - 97, - 17, - 0, - 131, - 1, - 82, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 239, - 255, - 255, - 255, - 97, - 17, - 32, - 131, - 1, - 82, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 189, - 131, - 57, - 129, - 81, - 145, - 82, - 97, - 17, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 32, - 97, - 16, - 128, - 133, - 1, - 96, - 192, - 97, - 16, - 160, - 135, - 1, - 96, - 5, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 16, - 128, - 130, - 1, - 81, - 96, - 0, - 97, - 12, - 224, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 16, - 64, - 134, - 1, - 81, - 9, - 97, - 12, - 224, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 15, - 64, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 16, - 32, - 134, - 1, - 81, - 9, - 97, - 15, - 64, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 15, - 0, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 16, - 0, - 134, - 1, - 81, - 9, - 97, - 15, - 0, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 14, - 192, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 224, - 134, - 1, - 81, - 9, - 97, - 14, - 192, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 14, - 128, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 192, - 134, - 1, - 81, - 9, - 97, - 14, - 128, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 14, - 64, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 160, - 134, - 1, - 81, - 9, - 97, - 14, - 64, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 14, - 0, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 128, - 134, - 1, - 81, - 9, - 97, - 14, - 0, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 13, - 192, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 15, - 96, - 134, - 1, - 81, - 9, - 97, - 13, - 192, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 13, - 128, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 13, - 64, - 134, - 1, - 81, - 9, - 97, - 13, - 128, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 97, - 13, - 64, - 133, - 1, - 129, - 144, - 82, - 97, - 13, - 32, - 133, - 1, - 81, - 132, - 147, - 80, - 144, - 145, - 80, - 9, - 97, - 17, - 96, - 131, - 1, - 82, - 128, - 97, - 13, - 128, - 131, - 1, - 81, - 97, - 13, - 96, - 132, - 1, - 81, - 9, - 97, - 17, - 128, - 131, - 1, - 82, - 128, - 97, - 13, - 192, - 131, - 1, - 81, - 97, - 13, - 160, - 132, - 1, - 81, - 9, - 97, - 17, - 160, - 131, - 1, - 82, - 128, - 97, - 14, - 0, - 131, - 1, - 81, - 97, - 13, - 224, - 132, - 1, - 81, - 9, - 97, - 17, - 192, - 131, - 1, - 82, - 128, - 97, - 14, - 64, - 131, - 1, - 81, - 97, - 14, - 32, - 132, - 1, - 81, - 9, - 97, - 17, - 224, - 131, - 1, - 82, - 128, - 97, - 14, - 128, - 131, - 1, - 81, - 97, - 14, - 96, - 132, - 1, - 81, - 9, - 97, - 18, - 0, - 131, - 1, - 82, - 128, - 97, - 14, - 192, - 131, - 1, - 81, - 97, - 14, - 160, - 132, - 1, - 81, - 9, - 97, - 18, - 32, - 131, - 1, - 82, - 128, - 97, - 15, - 0, - 131, - 1, - 81, - 97, - 14, - 224, - 132, - 1, - 81, - 9, - 97, - 18, - 64, - 131, - 1, - 82, - 128, - 97, - 15, - 64, - 131, - 1, - 81, - 97, - 15, - 32, - 132, - 1, - 81, - 9, - 97, - 18, - 96, - 131, - 1, - 82, - 128, - 96, - 32, - 131, - 1, - 81, - 97, - 18, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 96, - 64, - 134, - 1, - 81, - 97, - 18, - 64, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 129, - 129, - 131, - 96, - 96, - 134, - 1, - 81, - 97, - 18, - 96, - 135, - 1, - 81, - 9, - 8, - 97, - 18, - 128, - 132, - 1, - 82, - 80, - 97, - 7, - 32, - 130, - 1, - 81, - 97, - 5, - 224, - 131, - 1, - 81, - 130, - 145, - 144, - 8, - 97, - 18, - 160, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 18, - 192, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 18, - 224, - 131, - 1, - 82, - 128, - 97, - 18, - 224, - 131, - 1, - 81, - 97, - 18, - 160, - 132, - 1, - 81, - 9, - 97, - 19, - 0, - 131, - 1, - 82, - 128, - 127, - 6, - 111, - 111, - 133, - 214, - 246, - 138, - 133, - 236, - 16, - 52, - 83, - 81, - 162, - 58, - 58, - 175, - 7, - 243, - 138, - 248, - 201, - 82, - 167, - 188, - 236, - 167, - 11, - 210, - 175, - 122, - 213, - 97, - 19, - 0, - 132, - 1, - 81, - 9, - 97, - 19, - 32, - 131, - 1, - 82, - 128, - 97, - 7, - 64, - 131, - 1, - 81, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 19, - 64, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 19, - 96, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 19, - 128, - 131, - 1, - 82, - 128, - 97, - 19, - 128, - 131, - 1, - 81, - 97, - 19, - 64, - 132, - 1, - 81, - 9, - 97, - 19, - 160, - 131, - 1, - 82, - 128, - 127, - 43, - 157, - 75, - 65, - 16, - 201, - 174, - 153, - 119, - 130, - 225, - 80, - 155, - 29, - 15, - 219, - 32, - 167, - 192, - 43, - 189, - 139, - 234, - 115, - 5, - 70, - 43, - 159, - 129, - 37, - 177, - 232, - 97, - 19, - 160, - 132, - 1, - 81, - 9, - 97, - 19, - 192, - 131, - 1, - 82, - 128, - 97, - 19, - 192, - 131, - 1, - 81, - 97, - 19, - 32, - 132, - 1, - 81, - 8, - 97, - 19, - 224, - 131, - 1, - 82, - 128, - 97, - 6, - 32, - 131, - 1, - 81, - 130, - 3, - 97, - 19, - 224, - 132, - 1, - 81, - 8, - 97, - 20, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 160, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 20, - 32, - 131, - 1, - 82, - 128, - 97, - 20, - 32, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 20, - 64, - 131, - 1, - 82, - 128, - 127, - 12, - 197, - 124, - 219, - 176, - 133, - 7, - 214, - 43, - 246, - 122, - 68, - 147, - 204, - 38, - 47, - 182, - 192, - 157, - 85, - 112, - 19, - 255, - 241, - 245, - 115, - 244, - 49, - 34, - 31, - 143, - 249, - 97, - 19, - 0, - 132, - 1, - 81, - 9, - 97, - 20, - 96, - 131, - 1, - 82, - 128, - 127, - 18, - 116, - 230, - 73, - 163, - 46, - 211, - 85, - 163, - 26, - 110, - 214, - 151, - 36, - 225, - 173, - 173, - 232, - 87, - 232, - 110, - 181, - 195, - 161, - 33, - 188, - 209, - 71, - 148, - 50, - 3, - 200, - 97, - 19, - 160, - 132, - 1, - 81, - 9, - 97, - 20, - 128, - 131, - 1, - 82, - 128, - 97, - 20, - 128, - 131, - 1, - 81, - 97, - 20, - 96, - 132, - 1, - 81, - 8, - 97, - 20, - 160, - 131, - 1, - 82, - 128, - 97, - 6, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 20, - 160, - 132, - 1, - 81, - 8, - 97, - 20, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 160, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 20, - 224, - 131, - 1, - 82, - 128, - 97, - 20, - 224, - 131, - 1, - 81, - 97, - 20, - 64, - 132, - 1, - 81, - 8, - 97, - 21, - 0, - 131, - 1, - 82, - 128, - 97, - 21, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 21, - 32, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 130, - 3, - 97, - 19, - 0, - 132, - 1, - 81, - 8, - 97, - 21, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 21, - 96, - 131, - 1, - 82, - 128, - 97, - 21, - 96, - 131, - 1, - 81, - 97, - 21, - 32, - 132, - 1, - 81, - 8, - 97, - 21, - 128, - 131, - 1, - 82, - 128, - 97, - 21, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 21, - 160, - 131, - 1, - 82, - 128, - 127, - 6, - 111, - 111, - 133, - 214, - 246, - 138, - 133, - 236, - 16, - 52, - 83, - 81, - 162, - 58, - 58, - 175, - 7, - 243, - 138, - 248, - 201, - 82, - 167, - 188, - 236, - 167, - 11, - 210, - 175, - 122, - 213, - 97, - 6, - 96, - 132, - 1, - 81, - 9, - 97, - 21, - 192, - 131, - 1, - 82, - 128, - 127, - 43, - 157, - 75, - 65, - 16, - 201, - 174, - 153, - 119, - 130, - 225, - 80, - 155, - 29, - 15, - 219, - 32, - 167, - 192, - 43, - 189, - 139, - 234, - 115, - 5, - 70, - 43, - 159, - 129, - 37, - 177, - 232, - 97, - 19, - 64, - 132, - 1, - 81, - 9, - 97, - 21, - 224, - 131, - 1, - 82, - 128, - 97, - 21, - 224, - 131, - 1, - 81, - 97, - 21, - 192, - 132, - 1, - 81, - 8, - 97, - 22, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 6, - 224, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 22, - 32, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 22, - 64, - 131, - 1, - 129, - 144, - 82, - 129, - 144, - 128, - 9, - 97, - 22, - 96, - 131, - 1, - 82, - 128, - 97, - 22, - 96, - 131, - 1, - 81, - 97, - 22, - 32, - 132, - 1, - 81, - 9, - 97, - 22, - 128, - 131, - 1, - 82, - 128, - 127, - 19, - 171, - 236, - 57, - 10, - 218, - 127, - 67, - 112, - 129, - 154, - 177, - 199, - 132, - 111, - 33, - 5, - 84, - 86, - 157, - 155, - 41, - 209, - 234, - 141, - 190, - 189, - 15, - 168, - 197, - 62, - 102, - 97, - 6, - 32, - 132, - 1, - 81, - 9, - 97, - 22, - 160, - 131, - 1, - 82, - 128, - 127, - 30, - 185, - 225, - 220, - 25, - 163, - 58, - 98, - 76, - 152, - 98, - 161, - 217, - 125, - 21, - 16, - 189, - 82, - 30, - 173, - 93, - 254, - 3, - 69, - 170, - 246, - 24, - 91, - 26, - 30, - 96, - 254, - 97, - 6, - 64, - 132, - 1, - 81, - 9, - 97, - 22, - 192, - 131, - 1, - 82, - 128, - 97, - 22, - 192, - 131, - 1, - 81, - 97, - 22, - 160, - 132, - 1, - 81, - 8, - 97, - 22, - 224, - 131, - 1, - 82, - 128, - 97, - 22, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 22, - 128, - 132, - 1, - 81, - 8, - 97, - 23, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 23, - 32, - 131, - 1, - 82, - 128, - 97, - 23, - 32, - 131, - 1, - 81, - 97, - 21, - 160, - 132, - 1, - 81, - 8, - 97, - 23, - 64, - 131, - 1, - 82, - 128, - 97, - 23, - 64, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 23, - 96, - 131, - 1, - 82, - 128, - 127, - 12, - 197, - 124, - 219, - 176, - 133, - 7, - 214, - 43, - 246, - 122, - 68, - 147, - 204, - 38, - 47, - 182, - 192, - 157, - 85, - 112, - 19, - 255, - 241, - 245, - 115, - 244, - 49, - 34, - 31, - 143, - 249, - 97, - 6, - 96, - 132, - 1, - 81, - 9, - 97, - 23, - 128, - 131, - 1, - 82, - 128, - 127, - 18, - 116, - 230, - 73, - 163, - 46, - 211, - 85, - 163, - 26, - 110, - 214, - 151, - 36, - 225, - 173, - 173, - 232, - 87, - 232, - 110, - 181, - 195, - 161, - 33, - 188, - 209, - 71, - 148, - 50, - 3, - 200, - 97, - 19, - 64, - 132, - 1, - 81, - 9, - 97, - 23, - 160, - 131, - 1, - 82, - 128, - 97, - 23, - 160, - 131, - 1, - 81, - 97, - 23, - 128, - 132, - 1, - 81, - 8, - 97, - 23, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 0, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 23, - 224, - 131, - 1, - 82, - 128, - 127, - 15, - 193, - 201, - 57, - 77, - 184, - 155, - 178, - 96, - 26, - 188, - 73, - 253, - 173, - 79, - 3, - 140, - 229, - 22, - 144, - 48, - 162, - 173, - 105, - 118, - 63, - 120, - 117, - 3, - 107, - 203, - 2, - 97, - 6, - 32, - 132, - 1, - 81, - 9, - 97, - 24, - 0, - 131, - 1, - 82, - 128, - 127, - 22, - 169, - 233, - 140, - 73, - 58, - 144, - 43, - 149, - 2, - 5, - 78, - 220, - 3, - 231, - 178, - 43, - 126, - 172, - 52, - 52, - 89, - 97, - 188, - 138, - 188, - 237, - 107, - 209, - 71, - 200, - 190, - 97, - 6, - 64, - 132, - 1, - 81, - 9, - 97, - 24, - 32, - 131, - 1, - 82, - 128, - 97, - 24, - 32, - 131, - 1, - 81, - 97, - 24, - 0, - 132, - 1, - 81, - 8, - 97, - 24, - 64, - 131, - 1, - 82, - 128, - 97, - 24, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 23, - 224, - 132, - 1, - 81, - 8, - 97, - 24, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 24, - 128, - 131, - 1, - 82, - 128, - 97, - 24, - 128, - 131, - 1, - 81, - 97, - 23, - 96, - 132, - 1, - 81, - 8, - 97, - 24, - 160, - 131, - 1, - 82, - 128, - 97, - 24, - 160, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 24, - 192, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 24, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 25, - 0, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 3, - 96, - 2, - 8, - 97, - 25, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 25, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 25, - 64, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 3, - 96, - 3, - 8, - 97, - 25, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 25, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 25, - 128, - 131, - 1, - 82, - 128, - 97, - 5, - 224, - 131, - 1, - 81, - 97, - 6, - 160, - 132, - 1, - 81, - 8, - 97, - 25, - 160, - 131, - 1, - 82, - 128, - 97, - 6, - 32, - 131, - 1, - 81, - 130, - 3, - 97, - 25, - 160, - 132, - 1, - 81, - 8, - 97, - 25, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 25, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 25, - 224, - 131, - 1, - 82, - 128, - 97, - 25, - 224, - 131, - 1, - 81, - 97, - 24, - 192, - 132, - 1, - 81, - 8, - 97, - 26, - 0, - 131, - 1, - 82, - 128, - 97, - 26, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 26, - 32, - 131, - 1, - 82, - 128, - 97, - 6, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 128, - 132, - 1, - 81, - 8, - 97, - 26, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 25, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 26, - 96, - 131, - 1, - 82, - 128, - 97, - 26, - 96, - 131, - 1, - 81, - 97, - 26, - 32, - 132, - 1, - 81, - 8, - 97, - 26, - 128, - 131, - 1, - 82, - 128, - 97, - 26, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 26, - 160, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 97, - 25, - 32, - 132, - 1, - 81, - 9, - 97, - 26, - 192, - 131, - 1, - 82, - 128, - 97, - 26, - 192, - 131, - 1, - 81, - 97, - 25, - 96, - 132, - 1, - 81, - 9, - 97, - 26, - 224, - 131, - 1, - 82, - 128, - 97, - 7, - 128, - 131, - 1, - 81, - 130, - 3, - 96, - 4, - 8, - 97, - 27, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 26, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 27, - 32, - 131, - 1, - 82, - 128, - 97, - 27, - 32, - 131, - 1, - 81, - 97, - 6, - 96, - 132, - 1, - 81, - 9, - 97, - 27, - 64, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 27, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 27, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 27, - 128, - 131, - 1, - 82, - 128, - 97, - 27, - 128, - 131, - 1, - 81, - 97, - 26, - 160, - 132, - 1, - 81, - 8, - 97, - 27, - 160, - 131, - 1, - 82, - 128, - 97, - 27, - 160, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 27, - 192, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 96, - 2, - 9, - 97, - 27, - 224, - 131, - 1, - 82, - 128, - 97, - 5, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 28, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 27, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 28, - 32, - 131, - 1, - 82, - 128, - 97, - 5, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 32, - 132, - 1, - 81, - 8, - 97, - 28, - 64, - 131, - 1, - 82, - 128, - 97, - 28, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 28, - 32, - 132, - 1, - 81, - 8, - 97, - 28, - 96, - 131, - 1, - 82, - 128, - 97, - 6, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 28, - 128, - 131, - 1, - 82, - 128, - 97, - 28, - 128, - 131, - 1, - 81, - 130, - 3, - 97, - 28, - 96, - 132, - 1, - 81, - 8, - 97, - 28, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 27, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 28, - 192, - 131, - 1, - 82, - 128, - 97, - 28, - 192, - 131, - 1, - 81, - 97, - 27, - 192, - 132, - 1, - 81, - 8, - 97, - 28, - 224, - 131, - 1, - 82, - 128, - 97, - 28, - 224, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 29, - 0, - 131, - 1, - 82, - 128, - 97, - 25, - 0, - 131, - 1, - 81, - 97, - 25, - 96, - 132, - 1, - 81, - 9, - 97, - 29, - 32, - 131, - 1, - 82, - 128, - 97, - 29, - 32, - 131, - 1, - 81, - 97, - 27, - 0, - 132, - 1, - 81, - 9, - 97, - 29, - 64, - 131, - 1, - 82, - 128, - 97, - 6, - 0, - 131, - 1, - 81, - 97, - 5, - 224, - 132, - 1, - 81, - 8, - 97, - 29, - 96, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 130, - 3, - 97, - 29, - 96, - 132, - 1, - 81, - 8, - 97, - 29, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 29, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 29, - 160, - 131, - 1, - 82, - 128, - 97, - 29, - 160, - 131, - 1, - 81, - 97, - 29, - 0, - 132, - 1, - 81, - 8, - 97, - 29, - 192, - 131, - 1, - 82, - 128, - 97, - 29, - 192, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 29, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 29, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 30, - 0, - 131, - 1, - 82, - 128, - 97, - 30, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 30, - 32, - 131, - 1, - 82, - 128, - 97, - 25, - 64, - 131, - 1, - 81, - 97, - 27, - 0, - 132, - 1, - 81, - 9, - 97, - 30, - 64, - 131, - 1, - 82, - 128, - 97, - 6, - 0, - 131, - 1, - 81, - 130, - 3, - 97, - 5, - 224, - 132, - 1, - 81, - 8, - 97, - 30, - 96, - 131, - 1, - 82, - 128, - 96, - 1, - 96, - 112, - 27, - 97, - 30, - 96, - 132, - 1, - 81, - 8, - 97, - 30, - 128, - 131, - 1, - 82, - 128, - 97, - 6, - 96, - 131, - 1, - 81, - 130, - 3, - 97, - 30, - 128, - 132, - 1, - 81, - 8, - 97, - 30, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 30, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 30, - 192, - 131, - 1, - 82, - 128, - 97, - 30, - 192, - 131, - 1, - 81, - 97, - 30, - 32, - 132, - 1, - 81, - 8, - 97, - 30, - 224, - 131, - 1, - 82, - 128, - 97, - 30, - 224, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 31, - 0, - 131, - 1, - 82, - 128, - 97, - 8, - 192, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 31, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 31, - 64, - 131, - 1, - 82, - 128, - 97, - 31, - 64, - 131, - 1, - 81, - 97, - 31, - 0, - 132, - 1, - 81, - 8, - 97, - 31, - 96, - 131, - 1, - 82, - 128, - 97, - 31, - 96, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 31, - 128, - 131, - 1, - 82, - 97, - 9, - 32, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 31, - 160, - 131, - 1, - 82, - 128, - 97, - 9, - 32, - 131, - 1, - 81, - 130, - 3, - 97, - 31, - 160, - 132, - 1, - 81, - 8, - 97, - 31, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 17, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 31, - 224, - 131, - 1, - 82, - 128, - 97, - 31, - 224, - 131, - 1, - 81, - 97, - 31, - 128, - 132, - 1, - 81, - 8, - 97, - 32, - 0, - 131, - 1, - 82, - 128, - 97, - 32, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 32, - 32, - 131, - 1, - 82, - 128, - 97, - 9, - 0, - 131, - 1, - 81, - 130, - 3, - 97, - 9, - 32, - 132, - 1, - 81, - 8, - 97, - 32, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 32, - 96, - 131, - 1, - 82, - 128, - 97, - 32, - 96, - 131, - 1, - 81, - 97, - 32, - 32, - 132, - 1, - 81, - 8, - 97, - 32, - 128, - 131, - 1, - 82, - 128, - 97, - 32, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 32, - 160, - 131, - 1, - 82, - 128, - 97, - 17, - 96, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 32, - 192, - 131, - 1, - 82, - 128, - 97, - 17, - 160, - 131, - 1, - 81, - 97, - 17, - 128, - 132, - 1, - 81, - 8, - 97, - 32, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 17, - 192, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 33, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 17, - 224, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 33, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 0, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 33, - 64, - 131, - 1, - 82, - 128, - 97, - 33, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 32, - 192, - 132, - 1, - 81, - 8, - 97, - 33, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 0, - 132, - 1, - 81, - 9, - 97, - 33, - 128, - 131, - 1, - 82, - 128, - 97, - 33, - 128, - 131, - 1, - 81, - 97, - 6, - 224, - 132, - 1, - 81, - 8, - 97, - 33, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 33, - 192, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 32, - 132, - 1, - 81, - 9, - 97, - 33, - 224, - 131, - 1, - 82, - 128, - 97, - 33, - 224, - 131, - 1, - 81, - 97, - 5, - 224, - 132, - 1, - 81, - 8, - 97, - 34, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 34, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 33, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 34, - 64, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 64, - 132, - 1, - 81, - 9, - 97, - 34, - 96, - 131, - 1, - 82, - 128, - 97, - 34, - 96, - 131, - 1, - 81, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 34, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 34, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 34, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 34, - 192, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 96, - 132, - 1, - 81, - 9, - 97, - 34, - 224, - 131, - 1, - 82, - 128, - 97, - 34, - 224, - 131, - 1, - 81, - 97, - 7, - 0, - 132, - 1, - 81, - 8, - 97, - 35, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 35, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 34, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 35, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 8, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 35, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 35, - 128, - 131, - 1, - 82, - 128, - 97, - 35, - 128, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 35, - 160, - 131, - 1, - 82, - 128, - 97, - 35, - 160, - 131, - 1, - 81, - 97, - 6, - 224, - 132, - 1, - 81, - 8, - 97, - 35, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 35, - 224, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 127, - 9, - 34, - 107, - 110, - 34, - 198, - 240, - 202, - 100, - 236, - 38, - 170, - 212, - 200, - 110, - 113, - 91, - 95, - 137, - 142, - 94, - 150, - 63, - 37, - 135, - 14, - 86, - 187, - 229, - 51, - 233, - 162, - 9, - 97, - 36, - 0, - 131, - 1, - 82, - 128, - 97, - 36, - 0, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 36, - 32, - 131, - 1, - 82, - 128, - 97, - 36, - 32, - 131, - 1, - 81, - 97, - 5, - 224, - 132, - 1, - 81, - 8, - 97, - 36, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 36, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 35, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 36, - 128, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 127, - 19, - 179, - 96, - 212, - 232, - 47, - 233, - 21, - 254, - 209, - 96, - 129, - 3, - 143, - 152, - 194, - 17, - 66, - 123, - 135, - 162, - 129, - 189, - 115, - 60, - 39, - 125, - 186, - 223, - 16, - 55, - 43, - 9, - 97, - 36, - 160, - 131, - 1, - 82, - 128, - 97, - 36, - 160, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 36, - 192, - 131, - 1, - 82, - 128, - 97, - 36, - 192, - 131, - 1, - 81, - 97, - 6, - 0, - 132, - 1, - 81, - 8, - 97, - 36, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 37, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 36, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 37, - 32, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 127, - 24, - 175, - 223, - 35, - 233, - 189, - 147, - 2, - 103, - 63, - 193, - 224, - 118, - 164, - 146, - 212, - 214, - 91, - 209, - 142, - 188, - 77, - 133, - 78, - 209, - 137, - 19, - 155, - 171, - 49, - 62, - 82, - 9, - 97, - 37, - 64, - 131, - 1, - 82, - 128, - 97, - 37, - 64, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 37, - 96, - 131, - 1, - 82, - 128, - 97, - 37, - 96, - 131, - 1, - 81, - 97, - 7, - 0, - 132, - 1, - 81, - 8, - 97, - 37, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 37, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 37, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 37, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 8, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 37, - 224, - 131, - 1, - 82, - 128, - 97, - 37, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 35, - 96, - 132, - 1, - 81, - 8, - 97, - 38, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 33, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 38, - 32, - 131, - 1, - 82, - 128, - 97, - 38, - 32, - 131, - 1, - 81, - 97, - 32, - 160, - 132, - 1, - 81, - 8, - 97, - 38, - 64, - 131, - 1, - 82, - 128, - 97, - 38, - 64, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 38, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 128, - 132, - 1, - 81, - 9, - 97, - 38, - 128, - 131, - 1, - 82, - 128, - 97, - 38, - 128, - 131, - 1, - 81, - 97, - 6, - 96, - 132, - 1, - 81, - 8, - 97, - 38, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 38, - 192, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 8, - 160, - 132, - 1, - 81, - 9, - 97, - 38, - 224, - 131, - 1, - 82, - 128, - 97, - 38, - 224, - 131, - 1, - 81, - 97, - 18, - 128, - 132, - 1, - 81, - 8, - 97, - 39, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 39, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 38, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 39, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 9, - 64, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 39, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 126, - 161, - 54, - 186, - 19, - 175, - 166, - 200, - 62, - 183, - 184, - 47, - 179, - 112, - 226, - 40, - 231, - 65, - 85, - 228, - 143, - 184, - 241, - 193, - 207, - 195, - 63, - 176, - 218, - 138, - 251, - 66, - 9, - 97, - 39, - 128, - 131, - 1, - 82, - 128, - 97, - 39, - 128, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 39, - 160, - 131, - 1, - 82, - 128, - 97, - 39, - 160, - 131, - 1, - 81, - 97, - 6, - 96, - 132, - 1, - 81, - 8, - 97, - 39, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 39, - 224, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 127, - 46, - 185, - 117, - 13, - 206, - 84, - 95, - 23, - 212, - 146, - 5, - 141, - 210, - 1, - 161, - 37, - 31, - 243, - 217, - 7, - 120, - 100, - 88, - 61, - 68, - 234, - 249, - 190, - 144, - 8, - 105, - 157, - 9, - 97, - 40, - 0, - 131, - 1, - 82, - 128, - 97, - 40, - 0, - 131, - 1, - 81, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 40, - 32, - 131, - 1, - 82, - 128, - 97, - 40, - 32, - 131, - 1, - 81, - 97, - 18, - 128, - 132, - 1, - 81, - 8, - 97, - 40, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 160, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 40, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 39, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 40, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 9, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 40, - 160, - 131, - 1, - 82, - 128, - 97, - 40, - 160, - 131, - 1, - 81, - 130, - 3, - 97, - 39, - 96, - 132, - 1, - 81, - 8, - 97, - 40, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 33, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 40, - 224, - 131, - 1, - 82, - 128, - 97, - 40, - 224, - 131, - 1, - 81, - 97, - 38, - 96, - 132, - 1, - 81, - 8, - 97, - 41, - 0, - 131, - 1, - 82, - 128, - 97, - 41, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 41, - 32, - 131, - 1, - 82, - 128, - 97, - 9, - 96, - 131, - 1, - 81, - 130, - 3, - 96, - 1, - 8, - 97, - 41, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 41, - 96, - 131, - 1, - 82, - 128, - 97, - 41, - 96, - 131, - 1, - 81, - 97, - 41, - 32, - 132, - 1, - 81, - 8, - 97, - 41, - 128, - 131, - 1, - 82, - 128, - 97, - 41, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 41, - 160, - 131, - 1, - 82, - 97, - 9, - 96, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 41, - 192, - 131, - 1, - 82, - 128, - 97, - 9, - 96, - 131, - 1, - 81, - 130, - 3, - 97, - 41, - 192, - 132, - 1, - 81, - 8, - 97, - 41, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 17, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 42, - 0, - 131, - 1, - 82, - 128, - 97, - 42, - 0, - 131, - 1, - 81, - 97, - 41, - 160, - 132, - 1, - 81, - 8, - 97, - 42, - 32, - 131, - 1, - 82, - 128, - 97, - 42, - 32, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 42, - 64, - 131, - 1, - 82, - 128, - 97, - 2, - 64, - 131, - 1, - 81, - 97, - 9, - 160, - 132, - 1, - 81, - 8, - 97, - 42, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 9, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 42, - 128, - 131, - 1, - 82, - 128, - 97, - 2, - 160, - 131, - 1, - 81, - 97, - 9, - 224, - 132, - 1, - 81, - 8, - 97, - 42, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 42, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 42, - 192, - 131, - 1, - 82, - 128, - 97, - 6, - 192, - 131, - 1, - 81, - 97, - 1, - 0, - 9, - 97, - 42, - 224, - 131, - 1, - 82, - 128, - 97, - 42, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 6, - 96, - 132, - 1, - 81, - 8, - 97, - 43, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 7, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 43, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 2, - 64, - 131, - 1, - 81, - 130, - 145, - 8, - 97, - 43, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 9, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 43, - 96, - 131, - 1, - 82, - 128, - 97, - 2, - 160, - 131, - 1, - 81, - 97, - 7, - 32, - 132, - 1, - 81, - 8, - 97, - 43, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 43, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 43, - 160, - 131, - 1, - 82, - 128, - 97, - 43, - 160, - 131, - 1, - 81, - 130, - 3, - 97, - 42, - 192, - 132, - 1, - 81, - 8, - 97, - 43, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 33, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 43, - 224, - 131, - 1, - 82, - 128, - 97, - 43, - 224, - 131, - 1, - 81, - 97, - 42, - 64, - 132, - 1, - 81, - 8, - 97, - 44, - 0, - 131, - 1, - 82, - 128, - 97, - 44, - 0, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 44, - 32, - 131, - 1, - 82, - 128, - 97, - 9, - 224, - 131, - 1, - 81, - 130, - 3, - 97, - 9, - 160, - 132, - 1, - 81, - 8, - 97, - 44, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 18, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 44, - 96, - 131, - 1, - 82, - 128, - 97, - 44, - 96, - 131, - 1, - 81, - 97, - 44, - 32, - 132, - 1, - 81, - 8, - 97, - 44, - 128, - 131, - 1, - 82, - 128, - 97, - 44, - 128, - 131, - 1, - 81, - 97, - 4, - 0, - 132, - 1, - 81, - 9, - 97, - 44, - 160, - 131, - 1, - 82, - 128, - 97, - 33, - 96, - 131, - 1, - 81, - 97, - 44, - 64, - 132, - 1, - 81, - 9, - 97, - 44, - 192, - 131, - 1, - 82, - 128, - 97, - 9, - 192, - 131, - 1, - 81, - 130, - 3, - 97, - 9, - 160, - 132, - 1, - 81, - 8, - 97, - 44, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 44, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 45, - 0, - 131, - 1, - 82, - 128, - 97, - 45, - 0, - 131, - 1, - 81, - 97, - 44, - 160, - 132, - 1, - 81, - 8, - 97, - 45, - 32, - 131, - 1, - 82, - 97, - 12, - 192, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 45, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 12, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 45, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 12, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 45, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 12, - 192, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 45, - 160, - 131, - 1, - 82, - 128, - 97, - 12, - 192, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 45, - 192, - 131, - 1, - 82, - 128, - 97, - 45, - 64, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 45, - 224, - 131, - 1, - 82, - 128, - 97, - 45, - 96, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 46, - 0, - 131, - 1, - 82, - 128, - 97, - 45, - 128, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 46, - 32, - 131, - 1, - 82, - 128, - 97, - 12, - 224, - 131, - 1, - 81, - 97, - 45, - 32, - 132, - 1, - 81, - 9, - 97, - 46, - 64, - 131, - 1, - 82, - 128, - 97, - 5, - 160, - 131, - 1, - 81, - 97, - 11, - 160, - 132, - 1, - 81, - 9, - 97, - 46, - 96, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 46, - 128, - 131, - 1, - 82, - 128, - 97, - 46, - 128, - 131, - 1, - 81, - 130, - 3, - 97, - 11, - 32, - 132, - 1, - 81, - 8, - 97, - 46, - 160, - 131, - 1, - 82, - 128, - 127, - 10, - 227, - 201, - 95, - 192, - 60, - 10, - 95, - 45, - 232, - 168, - 244, - 108, - 3, - 204, - 223, - 223, - 237, - 43, - 185, - 140, - 158, - 74, - 224, - 177, - 11, - 21, - 237, - 164, - 227, - 177, - 227, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 46, - 192, - 131, - 1, - 82, - 128, - 97, - 46, - 192, - 131, - 1, - 81, - 130, - 3, - 97, - 11, - 32, - 132, - 1, - 81, - 8, - 97, - 46, - 224, - 131, - 1, - 82, - 128, - 127, - 21, - 247, - 157, - 185, - 195, - 145, - 129, - 188, - 62, - 49, - 200, - 63, - 146, - 145, - 218, - 118, - 238, - 223, - 27, - 35, - 196, - 16, - 173, - 215, - 233, - 9, - 132, - 100, - 170, - 164, - 251, - 38, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 47, - 0, - 131, - 1, - 82, - 128, - 97, - 47, - 0, - 131, - 1, - 81, - 130, - 3, - 97, - 11, - 32, - 132, - 1, - 81, - 8, - 97, - 47, - 32, - 131, - 1, - 82, - 128, - 127, - 42, - 217, - 2, - 30, - 208, - 124, - 66, - 171, - 25, - 247, - 124, - 92, - 242, - 203, - 210, - 222, - 177, - 53, - 234, - 51, - 15, - 27, - 21, - 115, - 189, - 8, - 217, - 147, - 9, - 196, - 187, - 125, - 97, - 5, - 160, - 132, - 1, - 81, - 9, - 97, - 47, - 64, - 131, - 1, - 82, - 128, - 97, - 47, - 64, - 131, - 1, - 81, - 130, - 3, - 97, - 11, - 32, - 132, - 1, - 81, - 8, - 97, - 47, - 96, - 131, - 1, - 82, - 128, - 129, - 127, - 43, - 11, - 209, - 103, - 49, - 170, - 243, - 73, - 40, - 192, - 102, - 27, - 164, - 51, - 16, - 251, - 191, - 68, - 186, - 164, - 87, - 185, - 128, - 206, - 25, - 175, - 251, - 167, - 49, - 87, - 146, - 164, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 5, - 88, - 125, - 11, - 175, - 134, - 172, - 224, - 143, - 143, - 223, - 154, - 221, - 78, - 71, - 97, - 104, - 239, - 45, - 164, - 33, - 255, - 239, - 195, - 42, - 49, - 249, - 236, - 190, - 168, - 109, - 93, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 47, - 128, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 30, - 66, - 33, - 78, - 169, - 178, - 219, - 51, - 41, - 107, - 165, - 80, - 150, - 129, - 90, - 10, - 109, - 70, - 138, - 247, - 21, - 204, - 250, - 159, - 171, - 147, - 177, - 227, - 112, - 27, - 127, - 98, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 22, - 72, - 204, - 5, - 91, - 17, - 175, - 78, - 15, - 98, - 146, - 61, - 150, - 39, - 227, - 119, - 177, - 212, - 19, - 192, - 134, - 74, - 244, - 150, - 58, - 130, - 111, - 204, - 106, - 2, - 49, - 250, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 47, - 160, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 41, - 96, - 216, - 74, - 149, - 216, - 240, - 15, - 116, - 10, - 61, - 20, - 120, - 254, - 182, - 212, - 177, - 150, - 227, - 75, - 248, - 107, - 98, - 183, - 80, - 65, - 177, - 75, - 56, - 157, - 73, - 206, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 33, - 254, - 97, - 90, - 206, - 153, - 2, - 136, - 65, - 200, - 67, - 147, - 227, - 148, - 53, - 234, - 38, - 103, - 94, - 73, - 79, - 212, - 136, - 98, - 99, - 230, - 254, - 221, - 60, - 186, - 31, - 22, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 47, - 192, - 132, - 1, - 82, - 80, - 97, - 46, - 160, - 130, - 1, - 81, - 129, - 144, - 96, - 1, - 9, - 97, - 47, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 47, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 48, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 46, - 224, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 48, - 32, - 131, - 1, - 82, - 128, - 129, - 127, - 5, - 139, - 76, - 84, - 16, - 181, - 93, - 126, - 158, - 88, - 201, - 89, - 142, - 181, - 133, - 126, - 118, - 253, - 254, - 21, - 106, - 158, - 91, - 29, - 134, - 217, - 28, - 0, - 230, - 59, - 68, - 133, - 97, - 5, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 42, - 217, - 2, - 30, - 208, - 124, - 66, - 171, - 25, - 247, - 124, - 92, - 242, - 203, - 210, - 222, - 177, - 53, - 234, - 51, - 15, - 27, - 21, - 115, - 189, - 8, - 217, - 147, - 9, - 196, - 187, - 124, - 97, - 5, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 48, - 64, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 42, - 217, - 2, - 30, - 208, - 124, - 66, - 171, - 25, - 247, - 124, - 92, - 242, - 203, - 210, - 222, - 177, - 53, - 234, - 51, - 15, - 27, - 21, - 115, - 189, - 8, - 217, - 147, - 9, - 196, - 187, - 124, - 97, - 5, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 29, - 5, - 246, - 131, - 247, - 186, - 207, - 85, - 188, - 205, - 73, - 90, - 87, - 3, - 203, - 50, - 154, - 218, - 137, - 10, - 240, - 138, - 192, - 210, - 73, - 89, - 89, - 158, - 36, - 200, - 50, - 129, - 97, - 5, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 48, - 96, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 35, - 175, - 64, - 228, - 126, - 47, - 89, - 160, - 56, - 9, - 72, - 74, - 41, - 213, - 227, - 175, - 191, - 16, - 95, - 31, - 161, - 0, - 222, - 139, - 226, - 18, - 149, - 169, - 47, - 167, - 85, - 52, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 12, - 181, - 13, - 142, - 99, - 2, - 70, - 137, - 128, - 70, - 253, - 108, - 87, - 171, - 116, - 173, - 105, - 35, - 137, - 40, - 216, - 184, - 146, - 5, - 97, - 207, - 95, - 234, - 192, - 88, - 170, - 205, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 48, - 128, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 37, - 158, - 177, - 209, - 93, - 46, - 116, - 220, - 26, - 34, - 195, - 34, - 16, - 222, - 135, - 86, - 109, - 122, - 230, - 123, - 204, - 133, - 156, - 225, - 227, - 49, - 23, - 225, - 113, - 203, - 188, - 210, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 7, - 5, - 247, - 144, - 26, - 11, - 163, - 115, - 109, - 255, - 8, - 48, - 168, - 19, - 205, - 199, - 53, - 12, - 231, - 156, - 133, - 43, - 162, - 216, - 99, - 83, - 208, - 255, - 132, - 216, - 11, - 181, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 48, - 160, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 42, - 107, - 190, - 181, - 99, - 50, - 242, - 32, - 195, - 15, - 202, - 172, - 115, - 127, - 216, - 133, - 195, - 89, - 100, - 128, - 240, - 202, - 47, - 240, - 125, - 39, - 51, - 86, - 25, - 17, - 183, - 189, - 97, - 11, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 38, - 160, - 248, - 77, - 118, - 68, - 75, - 94, - 10, - 96, - 248, - 150, - 108, - 198, - 200, - 140, - 9, - 207, - 7, - 19, - 189, - 4, - 75, - 169, - 254, - 108, - 155, - 46, - 139, - 98, - 99, - 183, - 97, - 11, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 48, - 192, - 132, - 1, - 82, - 80, - 97, - 47, - 32, - 130, - 1, - 81, - 97, - 48, - 0, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 48, - 224, - 131, - 1, - 82, - 128, - 129, - 127, - 37, - 128, - 133, - 19, - 32, - 245, - 149, - 202, - 138, - 103, - 156, - 194, - 21, - 125, - 139, - 125, - 72, - 70, - 188, - 142, - 237, - 27, - 37, - 176, - 146, - 214, - 223, - 166, - 75, - 28, - 78, - 31, - 97, - 5, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 10, - 227, - 201, - 95, - 192, - 60, - 10, - 95, - 45, - 232, - 168, - 244, - 108, - 3, - 204, - 223, - 223, - 237, - 43, - 185, - 140, - 158, - 74, - 224, - 177, - 11, - 21, - 237, - 164, - 227, - 177, - 226, - 97, - 5, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 128, - 97, - 49, - 0, - 132, - 1, - 82, - 80, - 128, - 129, - 127, - 10, - 227, - 201, - 95, - 192, - 60, - 10, - 95, - 45, - 232, - 168, - 244, - 108, - 3, - 204, - 223, - 223, - 237, - 43, - 185, - 140, - 158, - 74, - 224, - 177, - 11, - 21, - 237, - 164, - 227, - 177, - 226, - 97, - 5, - 160, - 133, - 1, - 81, - 9, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 132, - 127, - 1, - 120, - 41, - 212, - 58, - 163, - 82, - 155, - 165, - 237, - 63, - 72, - 121, - 205, - 28, - 9, - 255, - 159, - 6, - 231, - 22, - 175, - 178, - 188, - 108, - 199, - 40, - 71, - 209, - 39, - 113, - 174, - 97, - 5, - 160, - 136, - 1, - 81, - 9, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 49, - 32, - 132, - 1, - 82, - 80, - 97, - 46, - 224, - 130, - 1, - 81, - 97, - 47, - 224, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 49, - 64, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 11, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 0, - 97, - 5, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 49, - 96, - 132, - 1, - 82, - 80, - 97, - 47, - 128, - 130, - 1, - 81, - 97, - 47, - 160, - 131, - 1, - 81, - 130, - 144, - 130, - 144, - 9, - 144, - 80, - 128, - 97, - 49, - 128, - 132, - 1, - 82, - 129, - 129, - 97, - 47, - 192, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 49, - 160, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 64, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 49, - 192, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 96, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 49, - 224, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 0, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 0, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 128, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 32, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 160, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 64, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 192, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 96, - 132, - 1, - 82, - 129, - 129, - 97, - 48, - 224, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 128, - 132, - 1, - 82, - 129, - 129, - 97, - 49, - 0, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 160, - 132, - 1, - 82, - 129, - 129, - 97, - 49, - 32, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 192, - 132, - 1, - 82, - 129, - 129, - 97, - 49, - 64, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 50, - 224, - 132, - 1, - 82, - 129, - 129, - 97, - 49, - 96, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 51, - 0, - 132, - 1, - 82, - 129, - 129, - 97, - 47, - 224, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 51, - 32, - 132, - 1, - 82, - 80, - 96, - 32, - 97, - 51, - 96, - 131, - 1, - 82, - 96, - 32, - 97, - 51, - 128, - 131, - 1, - 82, - 96, - 32, - 97, - 51, - 160, - 131, - 1, - 82, - 97, - 51, - 32, - 130, - 1, - 81, - 97, - 51, - 192, - 131, - 1, - 82, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 239, - 255, - 255, - 255, - 97, - 51, - 224, - 131, - 1, - 82, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 189, - 131, - 57, - 129, - 81, - 145, - 82, - 97, - 52, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 32, - 97, - 51, - 64, - 133, - 1, - 96, - 192, - 97, - 51, - 96, - 135, - 1, - 96, - 5, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 51, - 64, - 130, - 1, - 81, - 96, - 0, - 97, - 47, - 224, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 51, - 0, - 134, - 1, - 81, - 9, - 97, - 47, - 224, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 49, - 96, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 224, - 134, - 1, - 81, - 9, - 97, - 49, - 96, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 49, - 64, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 192, - 134, - 1, - 81, - 9, - 97, - 49, - 64, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 49, - 32, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 160, - 134, - 1, - 81, - 9, - 97, - 49, - 32, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 49, - 0, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 128, - 134, - 1, - 81, - 9, - 97, - 49, - 0, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 224, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 96, - 134, - 1, - 81, - 9, - 97, - 48, - 224, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 192, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 64, - 134, - 1, - 81, - 9, - 97, - 48, - 192, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 160, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 32, - 134, - 1, - 81, - 9, - 97, - 48, - 160, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 128, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 50, - 0, - 134, - 1, - 81, - 9, - 97, - 48, - 128, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 0, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 49, - 224, - 134, - 1, - 81, - 9, - 97, - 48, - 0, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 96, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 49, - 192, - 134, - 1, - 81, - 9, - 97, - 48, - 96, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 48, - 64, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 49, - 160, - 134, - 1, - 81, - 9, - 97, - 48, - 64, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 47, - 192, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 49, - 128, - 134, - 1, - 81, - 9, - 97, - 47, - 192, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 47, - 160, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 47, - 128, - 134, - 1, - 81, - 9, - 97, - 47, - 160, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 97, - 47, - 128, - 133, - 1, - 129, - 144, - 82, - 97, - 47, - 160, - 133, - 1, - 81, - 144, - 146, - 80, - 131, - 145, - 80, - 130, - 144, - 8, - 144, - 80, - 129, - 129, - 97, - 47, - 192, - 133, - 1, - 81, - 8, - 97, - 52, - 32, - 132, - 1, - 82, - 80, - 97, - 48, - 0, - 130, - 1, - 81, - 97, - 48, - 32, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 52, - 64, - 131, - 1, - 82, - 97, - 48, - 64, - 130, - 1, - 81, - 129, - 129, - 97, - 48, - 96, - 133, - 1, - 81, - 8, - 97, - 52, - 96, - 132, - 1, - 82, - 80, - 97, - 48, - 224, - 130, - 1, - 81, - 97, - 48, - 32, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 52, - 128, - 131, - 1, - 82, - 97, - 48, - 128, - 130, - 1, - 81, - 129, - 129, - 97, - 48, - 160, - 133, - 1, - 81, - 8, - 144, - 80, - 129, - 129, - 97, - 48, - 192, - 133, - 1, - 81, - 8, - 97, - 52, - 160, - 132, - 1, - 82, - 80, - 97, - 49, - 64, - 130, - 1, - 81, - 97, - 48, - 32, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 52, - 192, - 131, - 1, - 82, - 97, - 49, - 0, - 130, - 1, - 81, - 129, - 129, - 97, - 49, - 32, - 133, - 1, - 81, - 8, - 97, - 52, - 224, - 132, - 1, - 82, - 80, - 97, - 47, - 224, - 130, - 1, - 81, - 97, - 48, - 32, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 53, - 0, - 131, - 1, - 82, - 97, - 49, - 96, - 130, - 1, - 81, - 128, - 97, - 53, - 32, - 132, - 1, - 82, - 80, - 97, - 52, - 32, - 130, - 1, - 81, - 129, - 129, - 97, - 52, - 96, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 53, - 64, - 132, - 1, - 82, - 129, - 129, - 97, - 52, - 160, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 53, - 96, - 132, - 1, - 82, - 129, - 129, - 97, - 52, - 224, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 53, - 128, - 132, - 1, - 82, - 129, - 129, - 97, - 53, - 32, - 133, - 1, - 81, - 9, - 144, - 80, - 128, - 97, - 53, - 160, - 132, - 1, - 82, - 80, - 96, - 32, - 97, - 53, - 224, - 131, - 1, - 82, - 96, - 32, - 97, - 54, - 0, - 131, - 1, - 82, - 96, - 32, - 97, - 54, - 32, - 131, - 1, - 82, - 97, - 53, - 160, - 130, - 1, - 81, - 97, - 54, - 64, - 131, - 1, - 82, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 239, - 255, - 255, - 255, - 97, - 54, - 96, - 131, - 1, - 82, - 96, - 0, - 128, - 81, - 96, - 32, - 97, - 79, - 189, - 131, - 57, - 129, - 81, - 145, - 82, - 97, - 54, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 32, - 97, - 53, - 192, - 133, - 1, - 96, - 192, - 97, - 53, - 224, - 135, - 1, - 96, - 5, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 53, - 192, - 130, - 1, - 81, - 96, - 0, - 97, - 53, - 32, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 53, - 128, - 134, - 1, - 81, - 9, - 97, - 53, - 32, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 52, - 224, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 53, - 96, - 134, - 1, - 81, - 9, - 97, - 52, - 224, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 52, - 160, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 53, - 64, - 134, - 1, - 81, - 9, - 97, - 52, - 160, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 145, - 80, - 97, - 52, - 96, - 132, - 1, - 81, - 144, - 80, - 130, - 130, - 97, - 52, - 32, - 134, - 1, - 81, - 9, - 97, - 52, - 96, - 133, - 1, - 82, - 130, - 130, - 130, - 9, - 97, - 52, - 32, - 133, - 1, - 82, - 80, - 80, - 97, - 52, - 96, - 130, - 1, - 81, - 97, - 52, - 64, - 131, - 1, - 81, - 130, - 145, - 144, - 9, - 97, - 54, - 160, - 131, - 1, - 82, - 128, - 97, - 52, - 160, - 131, - 1, - 81, - 97, - 52, - 128, - 132, - 1, - 81, - 9, - 97, - 54, - 192, - 131, - 1, - 82, - 128, - 97, - 52, - 224, - 131, - 1, - 81, - 97, - 52, - 192, - 132, - 1, - 81, - 9, - 97, - 54, - 224, - 131, - 1, - 82, - 128, - 97, - 53, - 32, - 131, - 1, - 81, - 97, - 53, - 0, - 132, - 1, - 81, - 9, - 97, - 55, - 0, - 131, - 1, - 82, - 97, - 10, - 32, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 55, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 55, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 56, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 57, - 0, - 131, - 1, - 82, - 97, - 10, - 128, - 130, - 1, - 81, - 129, - 144, - 128, - 9, - 97, - 57, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 57, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 57, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 57, - 128, - 131, - 1, - 82, - 128, - 97, - 47, - 128, - 131, - 1, - 81, - 97, - 5, - 224, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 47, - 160, - 134, - 1, - 81, - 97, - 6, - 32, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 129, - 129, - 131, - 97, - 47, - 192, - 134, - 1, - 81, - 97, - 6, - 160, - 135, - 1, - 81, - 9, - 8, - 97, - 57, - 160, - 132, - 1, - 129, - 144, - 82, - 97, - 52, - 32, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 57, - 192, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 57, - 192, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 57, - 224, - 131, - 1, - 82, - 128, - 97, - 47, - 128, - 131, - 1, - 81, - 97, - 6, - 0, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 47, - 160, - 134, - 1, - 81, - 97, - 6, - 64, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 129, - 129, - 131, - 97, - 47, - 192, - 134, - 1, - 81, - 97, - 6, - 128, - 135, - 1, - 81, - 9, - 8, - 97, - 58, - 0, - 132, - 1, - 129, - 144, - 82, - 97, - 52, - 32, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 58, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 58, - 64, - 131, - 1, - 82, - 128, - 97, - 10, - 32, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 58, - 96, - 131, - 1, - 82, - 128, - 97, - 58, - 64, - 131, - 1, - 81, - 97, - 57, - 224, - 132, - 1, - 81, - 8, - 97, - 58, - 128, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 58, - 128, - 132, - 1, - 81, - 9, - 97, - 58, - 160, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 58, - 96, - 132, - 1, - 81, - 9, - 97, - 58, - 192, - 131, - 1, - 82, - 128, - 97, - 52, - 64, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 58, - 224, - 131, - 1, - 82, - 128, - 97, - 48, - 64, - 131, - 1, - 81, - 97, - 6, - 96, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 48, - 96, - 134, - 1, - 81, - 97, - 6, - 192, - 135, - 1, - 81, - 9, - 8, - 97, - 59, - 0, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 160, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 59, - 32, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 59, - 32, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 59, - 64, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 58, - 224, - 132, - 1, - 81, - 9, - 97, - 59, - 96, - 131, - 1, - 82, - 128, - 97, - 48, - 64, - 131, - 1, - 81, - 97, - 9, - 32, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 48, - 96, - 134, - 1, - 81, - 97, - 9, - 64, - 135, - 1, - 81, - 9, - 8, - 97, - 59, - 128, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 160, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 59, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 59, - 192, - 131, - 1, - 82, - 128, - 97, - 10, - 32, - 131, - 1, - 81, - 97, - 58, - 224, - 132, - 1, - 81, - 9, - 97, - 59, - 224, - 131, - 1, - 82, - 128, - 97, - 59, - 192, - 131, - 1, - 81, - 97, - 59, - 64, - 132, - 1, - 81, - 8, - 97, - 60, - 0, - 131, - 1, - 82, - 128, - 97, - 48, - 64, - 131, - 1, - 81, - 97, - 9, - 96, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 48, - 96, - 134, - 1, - 81, - 97, - 9, - 128, - 135, - 1, - 81, - 9, - 8, - 97, - 60, - 32, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 160, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 60, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 60, - 96, - 131, - 1, - 82, - 128, - 97, - 55, - 32, - 131, - 1, - 81, - 97, - 58, - 224, - 132, - 1, - 81, - 9, - 97, - 60, - 128, - 131, - 1, - 82, - 128, - 97, - 60, - 96, - 131, - 1, - 81, - 97, - 60, - 0, - 132, - 1, - 81, - 8, - 97, - 60, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 128, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 60, - 192, - 131, - 1, - 82, - 128, - 97, - 10, - 128, - 131, - 1, - 81, - 97, - 59, - 96, - 132, - 1, - 81, - 9, - 97, - 60, - 224, - 131, - 1, - 82, - 128, - 97, - 10, - 128, - 131, - 1, - 81, - 97, - 59, - 224, - 132, - 1, - 81, - 9, - 97, - 61, - 0, - 131, - 1, - 82, - 128, - 97, - 10, - 128, - 131, - 1, - 81, - 97, - 60, - 128, - 132, - 1, - 81, - 9, - 97, - 61, - 32, - 131, - 1, - 82, - 128, - 97, - 60, - 192, - 131, - 1, - 81, - 97, - 58, - 160, - 132, - 1, - 81, - 8, - 97, - 61, - 64, - 131, - 1, - 82, - 128, - 97, - 52, - 128, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 61, - 96, - 131, - 1, - 82, - 128, - 97, - 48, - 128, - 131, - 1, - 81, - 97, - 8, - 192, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 48, - 160, - 134, - 1, - 81, - 97, - 8, - 224, - 135, - 1, - 81, - 9, - 8, - 144, - 80, - 129, - 129, - 131, - 97, - 48, - 192, - 134, - 1, - 81, - 97, - 9, - 0, - 135, - 1, - 81, - 9, - 8, - 97, - 61, - 128, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 192, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 61, - 160, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 61, - 160, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 61, - 192, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 61, - 96, - 132, - 1, - 81, - 9, - 97, - 61, - 224, - 131, - 1, - 82, - 128, - 97, - 57, - 32, - 131, - 1, - 81, - 97, - 61, - 192, - 132, - 1, - 81, - 9, - 97, - 62, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 32, - 131, - 1, - 81, - 97, - 61, - 224, - 132, - 1, - 81, - 9, - 97, - 62, - 32, - 131, - 1, - 82, - 128, - 97, - 62, - 0, - 131, - 1, - 81, - 97, - 61, - 64, - 132, - 1, - 81, - 8, - 97, - 62, - 64, - 131, - 1, - 82, - 128, - 97, - 52, - 192, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 62, - 96, - 131, - 1, - 82, - 128, - 97, - 49, - 0, - 131, - 1, - 81, - 97, - 9, - 160, - 132, - 1, - 81, - 9, - 129, - 129, - 131, - 97, - 49, - 32, - 134, - 1, - 81, - 97, - 9, - 192, - 135, - 1, - 81, - 9, - 8, - 97, - 62, - 128, - 132, - 1, - 129, - 144, - 82, - 97, - 54, - 224, - 132, - 1, - 81, - 131, - 146, - 80, - 144, - 9, - 97, - 62, - 160, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 62, - 160, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 62, - 192, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 62, - 96, - 132, - 1, - 81, - 9, - 97, - 62, - 224, - 131, - 1, - 82, - 128, - 97, - 57, - 64, - 131, - 1, - 81, - 97, - 62, - 192, - 132, - 1, - 81, - 9, - 97, - 63, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 64, - 131, - 1, - 81, - 97, - 62, - 224, - 132, - 1, - 81, - 9, - 97, - 63, - 32, - 131, - 1, - 82, - 128, - 97, - 63, - 0, - 131, - 1, - 81, - 97, - 62, - 64, - 132, - 1, - 81, - 8, - 97, - 63, - 64, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 63, - 96, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 9, - 224, - 132, - 1, - 81, - 9, - 97, - 63, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 63, - 160, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 63, - 160, - 132, - 1, - 81, - 131, - 3, - 9, - 97, - 63, - 192, - 131, - 1, - 82, - 128, - 96, - 1, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 63, - 224, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 6, - 224, - 132, - 1, - 81, - 9, - 97, - 64, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 64, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 10, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 64, - 64, - 131, - 1, - 82, - 128, - 97, - 10, - 32, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 64, - 96, - 131, - 1, - 82, - 128, - 97, - 64, - 64, - 131, - 1, - 81, - 97, - 63, - 192, - 132, - 1, - 81, - 8, - 97, - 64, - 128, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 0, - 132, - 1, - 81, - 9, - 97, - 64, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 64, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 64, - 224, - 131, - 1, - 82, - 128, - 97, - 55, - 32, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 65, - 0, - 131, - 1, - 82, - 128, - 97, - 64, - 224, - 131, - 1, - 81, - 97, - 64, - 128, - 132, - 1, - 81, - 8, - 97, - 65, - 32, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 32, - 132, - 1, - 81, - 9, - 97, - 65, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 65, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 64, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 65, - 128, - 131, - 1, - 82, - 128, - 97, - 55, - 64, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 65, - 160, - 131, - 1, - 82, - 128, - 97, - 65, - 128, - 131, - 1, - 81, - 97, - 65, - 32, - 132, - 1, - 81, - 8, - 97, - 65, - 192, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 64, - 132, - 1, - 81, - 9, - 97, - 65, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 66, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 96, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 66, - 32, - 131, - 1, - 82, - 128, - 97, - 55, - 96, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 66, - 64, - 131, - 1, - 82, - 128, - 97, - 66, - 32, - 131, - 1, - 81, - 97, - 65, - 192, - 132, - 1, - 81, - 8, - 97, - 66, - 96, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 96, - 132, - 1, - 81, - 9, - 97, - 66, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 66, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 128, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 66, - 192, - 131, - 1, - 82, - 128, - 97, - 55, - 128, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 66, - 224, - 131, - 1, - 82, - 128, - 97, - 66, - 192, - 131, - 1, - 81, - 97, - 66, - 96, - 132, - 1, - 81, - 8, - 97, - 67, - 0, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 128, - 132, - 1, - 81, - 9, - 97, - 67, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 67, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 160, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 67, - 96, - 131, - 1, - 82, - 128, - 97, - 55, - 160, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 67, - 128, - 131, - 1, - 82, - 128, - 97, - 67, - 96, - 131, - 1, - 81, - 97, - 67, - 0, - 132, - 1, - 81, - 8, - 97, - 67, - 160, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 160, - 132, - 1, - 81, - 9, - 97, - 67, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 67, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 192, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 68, - 0, - 131, - 1, - 82, - 128, - 97, - 55, - 192, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 68, - 32, - 131, - 1, - 82, - 128, - 97, - 68, - 0, - 131, - 1, - 81, - 97, - 67, - 160, - 132, - 1, - 81, - 8, - 97, - 68, - 64, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 192, - 132, - 1, - 81, - 9, - 97, - 68, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 68, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 224, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 68, - 160, - 131, - 1, - 82, - 128, - 97, - 55, - 224, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 68, - 192, - 131, - 1, - 82, - 128, - 97, - 68, - 160, - 131, - 1, - 81, - 97, - 68, - 64, - 132, - 1, - 81, - 8, - 97, - 68, - 224, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 0, - 132, - 1, - 81, - 9, - 97, - 69, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 69, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 0, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 69, - 64, - 131, - 1, - 82, - 128, - 97, - 56, - 0, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 69, - 96, - 131, - 1, - 82, - 128, - 97, - 69, - 64, - 131, - 1, - 81, - 97, - 68, - 224, - 132, - 1, - 81, - 8, - 97, - 69, - 128, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 32, - 132, - 1, - 81, - 9, - 97, - 69, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 69, - 192, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 32, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 69, - 224, - 131, - 1, - 82, - 128, - 97, - 56, - 32, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 70, - 0, - 131, - 1, - 82, - 128, - 97, - 69, - 224, - 131, - 1, - 81, - 97, - 69, - 128, - 132, - 1, - 81, - 8, - 97, - 70, - 32, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 64, - 132, - 1, - 81, - 9, - 97, - 70, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 70, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 64, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 70, - 128, - 131, - 1, - 82, - 128, - 97, - 56, - 64, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 70, - 160, - 131, - 1, - 82, - 128, - 97, - 70, - 128, - 131, - 1, - 81, - 97, - 70, - 32, - 132, - 1, - 81, - 8, - 97, - 70, - 192, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 96, - 132, - 1, - 81, - 9, - 97, - 70, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 71, - 0, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 96, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 71, - 32, - 131, - 1, - 82, - 128, - 97, - 56, - 96, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 71, - 64, - 131, - 1, - 82, - 128, - 97, - 71, - 32, - 131, - 1, - 81, - 97, - 70, - 192, - 132, - 1, - 81, - 8, - 97, - 71, - 96, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 128, - 132, - 1, - 81, - 9, - 97, - 71, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 71, - 160, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 128, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 71, - 192, - 131, - 1, - 82, - 128, - 97, - 56, - 128, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 71, - 224, - 131, - 1, - 82, - 128, - 97, - 71, - 192, - 131, - 1, - 81, - 97, - 71, - 96, - 132, - 1, - 81, - 8, - 97, - 72, - 0, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 8, - 160, - 132, - 1, - 81, - 9, - 97, - 72, - 32, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 72, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 160, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 72, - 96, - 131, - 1, - 82, - 128, - 97, - 56, - 160, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 72, - 128, - 131, - 1, - 82, - 128, - 97, - 72, - 96, - 131, - 1, - 81, - 97, - 72, - 0, - 132, - 1, - 81, - 8, - 97, - 72, - 160, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 97, - 45, - 192, - 132, - 1, - 81, - 9, - 97, - 72, - 192, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 97, - 45, - 224, - 132, - 1, - 81, - 9, - 97, - 72, - 224, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 97, - 46, - 0, - 132, - 1, - 81, - 9, - 97, - 73, - 0, - 131, - 1, - 82, - 128, - 97, - 53, - 0, - 131, - 1, - 81, - 97, - 46, - 32, - 132, - 1, - 81, - 9, - 97, - 73, - 32, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 46, - 64, - 132, - 1, - 81, - 9, - 97, - 73, - 64, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 73, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 192, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 73, - 128, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 73, - 160, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 72, - 192, - 132, - 1, - 81, - 9, - 97, - 73, - 192, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 72, - 224, - 132, - 1, - 81, - 9, - 97, - 73, - 224, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 73, - 0, - 132, - 1, - 81, - 9, - 97, - 74, - 0, - 131, - 1, - 82, - 128, - 97, - 56, - 192, - 131, - 1, - 81, - 97, - 73, - 32, - 132, - 1, - 81, - 9, - 97, - 74, - 32, - 131, - 1, - 82, - 128, - 97, - 73, - 128, - 131, - 1, - 81, - 97, - 72, - 160, - 132, - 1, - 81, - 8, - 97, - 74, - 64, - 131, - 1, - 82, - 128, - 97, - 49, - 96, - 131, - 1, - 81, - 97, - 7, - 224, - 132, - 1, - 81, - 9, - 97, - 74, - 96, - 131, - 1, - 129, - 144, - 82, - 97, - 55, - 0, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 74, - 128, - 131, - 1, - 129, - 144, - 82, - 97, - 56, - 224, - 131, - 1, - 81, - 130, - 145, - 130, - 3, - 9, - 97, - 74, - 160, - 131, - 1, - 82, - 128, - 97, - 56, - 224, - 131, - 1, - 81, - 97, - 63, - 96, - 132, - 1, - 81, - 9, - 97, - 74, - 192, - 131, - 1, - 82, - 128, - 97, - 74, - 160, - 131, - 1, - 81, - 97, - 74, - 64, - 132, - 1, - 81, - 8, - 97, - 74, - 224, - 131, - 1, - 129, - 144, - 82, - 97, - 57, - 96, - 131, - 1, - 81, - 130, - 145, - 9, - 97, - 75, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 63, - 224, - 132, - 1, - 81, - 9, - 97, - 75, - 32, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 64, - 96, - 132, - 1, - 81, - 9, - 97, - 75, - 64, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 65, - 0, - 132, - 1, - 81, - 9, - 97, - 75, - 96, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 65, - 160, - 132, - 1, - 81, - 9, - 97, - 75, - 128, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 66, - 64, - 132, - 1, - 81, - 9, - 97, - 75, - 160, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 66, - 224, - 132, - 1, - 81, - 9, - 97, - 75, - 192, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 67, - 128, - 132, - 1, - 81, - 9, - 97, - 75, - 224, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 68, - 32, - 132, - 1, - 81, - 9, - 97, - 76, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 68, - 192, - 132, - 1, - 81, - 9, - 97, - 76, - 32, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 69, - 96, - 132, - 1, - 81, - 9, - 97, - 76, - 64, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 70, - 0, - 132, - 1, - 81, - 9, - 97, - 76, - 96, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 70, - 160, - 132, - 1, - 81, - 9, - 97, - 76, - 128, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 71, - 64, - 132, - 1, - 81, - 9, - 97, - 76, - 160, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 71, - 224, - 132, - 1, - 81, - 9, - 97, - 76, - 192, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 72, - 128, - 132, - 1, - 81, - 9, - 97, - 76, - 224, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 73, - 160, - 132, - 1, - 81, - 9, - 97, - 77, - 0, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 73, - 192, - 132, - 1, - 81, - 9, - 97, - 77, - 32, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 73, - 224, - 132, - 1, - 81, - 9, - 97, - 77, - 64, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 74, - 0, - 132, - 1, - 81, - 9, - 97, - 77, - 96, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 74, - 32, - 132, - 1, - 81, - 9, - 97, - 77, - 128, - 131, - 1, - 82, - 128, - 97, - 57, - 96, - 131, - 1, - 81, - 97, - 74, - 192, - 132, - 1, - 81, - 9, - 97, - 77, - 160, - 131, - 1, - 82, - 128, - 97, - 75, - 0, - 131, - 1, - 81, - 97, - 63, - 64, - 132, - 1, - 81, - 8, - 97, - 77, - 192, - 131, - 1, - 82, - 128, - 97, - 48, - 32, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 77, - 224, - 131, - 1, - 82, - 128, - 97, - 11, - 32, - 131, - 1, - 81, - 96, - 1, - 9, - 97, - 78, - 0, - 131, - 1, - 82, - 96, - 1, - 97, - 78, - 32, - 131, - 1, - 129, - 129, - 82, - 96, - 2, - 97, - 78, - 64, - 133, - 1, - 82, - 97, - 77, - 192, - 132, - 1, - 81, - 97, - 78, - 96, - 133, - 1, - 82, - 132, - 145, - 144, - 96, - 64, - 144, - 96, - 96, - 129, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 78, - 32, - 130, - 1, - 81, - 97, - 78, - 128, - 131, - 1, - 82, - 97, - 78, - 64, - 130, - 1, - 81, - 97, - 78, - 160, - 131, - 1, - 82, - 96, - 128, - 130, - 1, - 81, - 97, - 78, - 192, - 131, - 1, - 82, - 96, - 160, - 130, - 1, - 81, - 97, - 78, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 78, - 128, - 133, - 1, - 96, - 128, - 97, - 78, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 96, - 192, - 130, - 1, - 81, - 97, - 79, - 0, - 131, - 1, - 82, - 96, - 224, - 130, - 1, - 81, - 97, - 79, - 32, - 131, - 1, - 82, - 97, - 58, - 192, - 130, - 1, - 81, - 97, - 79, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 79, - 0, - 133, - 1, - 96, - 96, - 97, - 79, - 0, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 78, - 128, - 130, - 1, - 81, - 97, - 79, - 96, - 131, - 1, - 82, - 97, - 78, - 160, - 130, - 1, - 81, - 97, - 79, - 128, - 131, - 1, - 82, - 97, - 79, - 0, - 130, - 1, - 81, - 97, - 79, - 160, - 131, - 1, - 82, - 97, - 79, - 32, - 130, - 1, - 81, - 97, - 79, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 79, - 96, - 133, - 1, - 96, - 128, - 97, - 79, - 96, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 1, - 0, - 130, - 1, - 81, - 97, - 79, - 224, - 131, - 1, - 82, - 97, - 1, - 32, - 130, - 1, - 81, - 97, - 80, - 0, - 131, - 1, - 82, - 97, - 60, - 224, - 130, - 1, - 81, - 97, - 80, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 79, - 224, - 133, - 1, - 96, - 96, - 97, - 79, - 224, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 79, - 96, - 130, - 1, - 81, - 97, - 80, - 64, - 131, - 1, - 82, - 97, - 79, - 128, - 130, - 1, - 81, - 97, - 80, - 96, - 131, - 1, - 82, - 97, - 79, - 224, - 130, - 1, - 81, - 97, - 80, - 128, - 131, - 1, - 82, - 97, - 80, - 0, - 130, - 1, - 81, - 97, - 80, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 80, - 64, - 133, - 1, - 96, - 128, - 97, - 80, - 64, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 3, - 32, - 130, - 1, - 81, - 97, - 80, - 192, - 131, - 1, - 82, - 97, - 3, - 64, - 130, - 1, - 81, - 97, - 80, - 224, - 131, - 1, - 82, - 97, - 61, - 0, - 130, - 1, - 81, - 97, - 81, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 80, - 192, - 133, - 1, - 96, - 96, - 97, - 80, - 192, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 80, - 64, - 130, - 1, - 81, - 97, - 81, - 32, - 131, - 1, - 82, - 97, - 80, - 96, - 130, - 1, - 81, - 97, - 81, - 64, - 131, - 1, - 82, - 97, - 80, - 192, - 130, - 1, - 81, - 97, - 81, - 96, - 131, - 1, - 82, - 97, - 80, - 224, - 130, - 1, - 81, - 97, - 81, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 81, - 32, - 133, - 1, - 96, - 128, - 97, - 81, - 32, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 3, - 96, - 130, - 1, - 81, - 97, - 81, - 160, - 131, - 1, - 82, - 97, - 3, - 128, - 130, - 1, - 81, - 97, - 81, - 192, - 131, - 1, - 82, - 97, - 61, - 32, - 130, - 1, - 81, - 97, - 81, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 81, - 160, - 133, - 1, - 96, - 96, - 97, - 81, - 160, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 81, - 32, - 130, - 1, - 81, - 97, - 82, - 0, - 131, - 1, - 82, - 97, - 81, - 64, - 130, - 1, - 81, - 97, - 82, - 32, - 131, - 1, - 82, - 97, - 81, - 160, - 130, - 1, - 81, - 97, - 82, - 64, - 131, - 1, - 82, - 97, - 81, - 192, - 130, - 1, - 81, - 97, - 82, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 82, - 0, - 133, - 1, - 96, - 128, - 97, - 82, - 0, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 2, - 224, - 130, - 1, - 81, - 97, - 82, - 128, - 131, - 1, - 82, - 97, - 3, - 0, - 130, - 1, - 81, - 97, - 82, - 160, - 131, - 1, - 82, - 97, - 62, - 32, - 130, - 1, - 81, - 97, - 82, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 82, - 128, - 133, - 1, - 96, - 96, - 97, - 82, - 128, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 82, - 0, - 130, - 1, - 81, - 97, - 82, - 224, - 131, - 1, - 82, - 97, - 82, - 32, - 130, - 1, - 81, - 97, - 83, - 0, - 131, - 1, - 82, - 97, - 82, - 128, - 130, - 1, - 81, - 97, - 83, - 32, - 131, - 1, - 82, - 97, - 82, - 160, - 130, - 1, - 81, - 97, - 83, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 82, - 224, - 133, - 1, - 96, - 128, - 97, - 82, - 224, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 1, - 160, - 130, - 1, - 81, - 97, - 83, - 96, - 131, - 1, - 82, - 97, - 1, - 192, - 130, - 1, - 81, - 97, - 83, - 128, - 131, - 1, - 82, - 97, - 63, - 32, - 130, - 1, - 81, - 97, - 83, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 83, - 96, - 133, - 1, - 96, - 96, - 97, - 83, - 96, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 82, - 224, - 130, - 1, - 81, - 97, - 83, - 192, - 131, - 1, - 82, - 97, - 83, - 0, - 130, - 1, - 81, - 97, - 83, - 224, - 131, - 1, - 82, - 97, - 83, - 96, - 130, - 1, - 81, - 97, - 84, - 0, - 131, - 1, - 82, - 97, - 83, - 128, - 130, - 1, - 81, - 97, - 84, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 83, - 192, - 133, - 1, - 96, - 128, - 97, - 83, - 192, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 1, - 224, - 130, - 1, - 81, - 97, - 84, - 64, - 131, - 1, - 82, - 97, - 2, - 0, - 130, - 1, - 81, - 97, - 84, - 96, - 131, - 1, - 82, - 97, - 75, - 32, - 130, - 1, - 81, - 97, - 84, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 84, - 64, - 133, - 1, - 96, - 96, - 97, - 84, - 64, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 83, - 192, - 130, - 1, - 81, - 97, - 84, - 160, - 131, - 1, - 82, - 97, - 83, - 224, - 130, - 1, - 81, - 97, - 84, - 192, - 131, - 1, - 82, - 97, - 84, - 64, - 130, - 1, - 81, - 97, - 84, - 224, - 131, - 1, - 82, - 97, - 84, - 96, - 130, - 1, - 81, - 97, - 85, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 84, - 160, - 133, - 1, - 96, - 128, - 97, - 84, - 160, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 6, - 85, - 214, - 41, - 121, - 220, - 6, - 45, - 193, - 232, - 193, - 83, - 52, - 191, - 23, - 207, - 92, - 126, - 99, - 82, - 33, - 156, - 11, - 208, - 176, - 204, - 3, - 149, - 152, - 217, - 166, - 105, - 97, - 85, - 32, - 131, - 1, - 82, - 127, - 1, - 149, - 137, - 211, - 0, - 47, - 106, - 13, - 237, - 70, - 166, - 144, - 83, - 240, - 192, - 94, - 122, - 124, - 164, - 83, - 57, - 179, - 210, - 186, - 232, - 93, - 0, - 242, - 106, - 192, - 243, - 62, - 97, - 85, - 64, - 131, - 1, - 82, - 97, - 75, - 64, - 130, - 1, - 81, - 97, - 85, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 85, - 32, - 133, - 1, - 96, - 96, - 97, - 85, - 32, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 84, - 160, - 130, - 1, - 81, - 97, - 85, - 128, - 131, - 1, - 82, - 97, - 84, - 192, - 130, - 1, - 81, - 97, - 85, - 160, - 131, - 1, - 82, - 97, - 85, - 32, - 130, - 1, - 81, - 97, - 85, - 192, - 131, - 1, - 82, - 97, - 85, - 64, - 130, - 1, - 81, - 97, - 85, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 85, - 128, - 133, - 1, - 96, - 128, - 97, - 85, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 30, - 171, - 153, - 149, - 146, - 56, - 82, - 8, - 180, - 42, - 18, - 220, - 192, - 71, - 118, - 62, - 229, - 207, - 18, - 5, - 46, - 180, - 176, - 217, - 167, - 162, - 134, - 224, - 67, - 243, - 223, - 159, - 97, - 86, - 0, - 131, - 1, - 82, - 127, - 24, - 136, - 126, - 179, - 198, - 70, - 255, - 212, - 150, - 18, - 38, - 201, - 27, - 172, - 150, - 97, - 0, - 71, - 152, - 177, - 252, - 106, - 57, - 196, - 63, - 154, - 109, - 29, - 3, - 118, - 113, - 148, - 97, - 86, - 32, - 131, - 1, - 82, - 97, - 75, - 96, - 130, - 1, - 81, - 97, - 86, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 86, - 0, - 133, - 1, - 96, - 96, - 97, - 86, - 0, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 85, - 128, - 130, - 1, - 81, - 97, - 86, - 96, - 131, - 1, - 82, - 97, - 85, - 160, - 130, - 1, - 81, - 97, - 86, - 128, - 131, - 1, - 82, - 97, - 86, - 0, - 130, - 1, - 81, - 97, - 86, - 160, - 131, - 1, - 82, - 97, - 86, - 32, - 130, - 1, - 81, - 97, - 86, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 86, - 96, - 133, - 1, - 96, - 128, - 97, - 86, - 96, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 7, - 104, - 6, - 5, - 139, - 2, - 225, - 181, - 233, - 155, - 47, - 46, - 142, - 238, - 97, - 49, - 148, - 248, - 223, - 115, - 72, - 22, - 89, - 245, - 147, - 139, - 170, - 205, - 100, - 228, - 215, - 184, - 97, - 86, - 224, - 131, - 1, - 82, - 127, - 5, - 174, - 129, - 100, - 75, - 36, - 77, - 206, - 234, - 83, - 80, - 168, - 74, - 121, - 203, - 240, - 161, - 153, - 187, - 214, - 193, - 250, - 217, - 136, - 116, - 35, - 248, - 200, - 4, - 142, - 96, - 57, - 97, - 87, - 0, - 131, - 1, - 82, - 97, - 75, - 128, - 130, - 1, - 81, - 97, - 87, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 86, - 224, - 133, - 1, - 96, - 96, - 97, - 86, - 224, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 86, - 96, - 130, - 1, - 81, - 97, - 87, - 64, - 131, - 1, - 82, - 97, - 86, - 128, - 130, - 1, - 81, - 97, - 87, - 96, - 131, - 1, - 82, - 97, - 86, - 224, - 130, - 1, - 81, - 97, - 87, - 128, - 131, - 1, - 82, - 97, - 87, - 0, - 130, - 1, - 81, - 97, - 87, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 87, - 64, - 133, - 1, - 96, - 128, - 97, - 87, - 64, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 4, - 56, - 135, - 63, - 192, - 2, - 49, - 174, - 82, - 126, - 252, - 247, - 77, - 144, - 146, - 245, - 5, - 157, - 250, - 5, - 39, - 92, - 190, - 115, - 129, - 233, - 72, - 254, - 59, - 123, - 97, - 216, - 97, - 87, - 192, - 131, - 1, - 82, - 127, - 3, - 192, - 243, - 20, - 201, - 52, - 3, - 121, - 43, - 168, - 110, - 195, - 132, - 27, - 48, - 128, - 242, - 247, - 205, - 9, - 44, - 107, - 203, - 99, - 44, - 219, - 194, - 18, - 42, - 19, - 205, - 239, - 97, - 87, - 224, - 131, - 1, - 82, - 97, - 75, - 160, - 130, - 1, - 81, - 97, - 88, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 87, - 192, - 133, - 1, - 96, - 96, - 97, - 87, - 192, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 87, - 64, - 130, - 1, - 81, - 97, - 88, - 32, - 131, - 1, - 82, - 97, - 87, - 96, - 130, - 1, - 81, - 97, - 88, - 64, - 131, - 1, - 82, - 97, - 87, - 192, - 130, - 1, - 81, - 97, - 88, - 96, - 131, - 1, - 82, - 97, - 87, - 224, - 130, - 1, - 81, - 97, - 88, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 88, - 32, - 133, - 1, - 96, - 128, - 97, - 88, - 32, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 43, - 18, - 177, - 50, - 166, - 38, - 26, - 214, - 2, - 73, - 20, - 117, - 153, - 202, - 224, - 213, - 179, - 84, - 126, - 81, - 13, - 234, - 187, - 166, - 85, - 38, - 209, - 48, - 240, - 79, - 36, - 2, - 97, - 88, - 160, - 131, - 1, - 82, - 127, - 19, - 227, - 192, - 44, - 224, - 15, - 107, - 126, - 0, - 213, - 176, - 153, - 237, - 165, - 241, - 21, - 89, - 86, - 174, - 131, - 137, - 154, - 45, - 89, - 206, - 252, - 176, - 13, - 173, - 102, - 167, - 246, - 97, - 88, - 192, - 131, - 1, - 82, - 97, - 75, - 192, - 130, - 1, - 81, - 97, - 88, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 88, - 160, - 133, - 1, - 96, - 96, - 97, - 88, - 160, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 88, - 32, - 130, - 1, - 81, - 97, - 89, - 0, - 131, - 1, - 82, - 97, - 88, - 64, - 130, - 1, - 81, - 97, - 89, - 32, - 131, - 1, - 82, - 97, - 88, - 160, - 130, - 1, - 81, - 97, - 89, - 64, - 131, - 1, - 82, - 97, - 88, - 192, - 130, - 1, - 81, - 97, - 89, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 89, - 0, - 133, - 1, - 96, - 128, - 97, - 89, - 0, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 14, - 216, - 51, - 112, - 39, - 126, - 15, - 211, - 94, - 130, - 88, - 221, - 86, - 48, - 206, - 12, - 227, - 73, - 31, - 223, - 126, - 22, - 109, - 41, - 55, - 69, - 99, - 91, - 12, - 196, - 235, - 165, - 97, - 89, - 128, - 131, - 1, - 82, - 127, - 3, - 153, - 78, - 126, - 119, - 173, - 88, - 7, - 43, - 120, - 117, - 119, - 0, - 171, - 11, - 121, - 36, - 127, - 46, - 70, - 43, - 12, - 246, - 165, - 161, - 139, - 96, - 116, - 20, - 192, - 149, - 219, - 97, - 89, - 160, - 131, - 1, - 82, - 97, - 75, - 224, - 130, - 1, - 81, - 97, - 89, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 89, - 128, - 133, - 1, - 96, - 96, - 97, - 89, - 128, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 89, - 0, - 130, - 1, - 81, - 97, - 89, - 224, - 131, - 1, - 82, - 97, - 89, - 32, - 130, - 1, - 81, - 97, - 90, - 0, - 131, - 1, - 82, - 97, - 89, - 128, - 130, - 1, - 81, - 97, - 90, - 32, - 131, - 1, - 82, - 97, - 89, - 160, - 130, - 1, - 81, - 97, - 90, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 89, - 224, - 133, - 1, - 96, - 128, - 97, - 89, - 224, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 35, - 186, - 75, - 196, - 155, - 170, - 181, - 99, - 233, - 213, - 191, - 7, - 218, - 35, - 26, - 68, - 150, - 211, - 91, - 107, - 199, - 130, - 219, - 189, - 118, - 19, - 95, - 228, - 76, - 49, - 203, - 207, - 97, - 90, - 96, - 131, - 1, - 82, - 127, - 40, - 184, - 128, - 151, - 231, - 237, - 241, - 178, - 144, - 79, - 108, - 37, - 193, - 227, - 12, - 160, - 227, - 140, - 116, - 165, - 33, - 37, - 178, - 153, - 92, - 76, - 240, - 167, - 80, - 104, - 56, - 84, - 97, - 90, - 128, - 131, - 1, - 82, - 97, - 76, - 0, - 130, - 1, - 81, - 97, - 90, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 90, - 96, - 133, - 1, - 96, - 96, - 97, - 90, - 96, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 89, - 224, - 130, - 1, - 81, - 97, - 90, - 192, - 131, - 1, - 82, - 97, - 90, - 0, - 130, - 1, - 81, - 97, - 90, - 224, - 131, - 1, - 82, - 97, - 90, - 96, - 130, - 1, - 81, - 97, - 91, - 0, - 131, - 1, - 82, - 97, - 90, - 128, - 130, - 1, - 81, - 97, - 91, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 90, - 192, - 133, - 1, - 96, - 128, - 97, - 90, - 192, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 23, - 220, - 187, - 160, - 187, - 226, - 210, - 69, - 102, - 222, - 98, - 9, - 152, - 246, - 47, - 245, - 78, - 165, - 48, - 42, - 218, - 106, - 235, - 24, - 2, - 139, - 97, - 180, - 220, - 25, - 187, - 211, - 97, - 91, - 64, - 131, - 1, - 82, - 127, - 14, - 31, - 144, - 128, - 7, - 165, - 194, - 204, - 147, - 68, - 38, - 194, - 109, - 231, - 32, - 108, - 83, - 250, - 16, - 199, - 157, - 99, - 239, - 82, - 238, - 145, - 191, - 181, - 104, - 199, - 47, - 189, - 97, - 91, - 96, - 131, - 1, - 82, - 97, - 76, - 32, - 130, - 1, - 81, - 97, - 91, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 91, - 64, - 133, - 1, - 96, - 96, - 97, - 91, - 64, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 90, - 192, - 130, - 1, - 81, - 97, - 91, - 160, - 131, - 1, - 82, - 97, - 90, - 224, - 130, - 1, - 81, - 97, - 91, - 192, - 131, - 1, - 82, - 97, - 91, - 64, - 130, - 1, - 81, - 97, - 91, - 224, - 131, - 1, - 82, - 97, - 91, - 96, - 130, - 1, - 81, - 97, - 92, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 91, - 160, - 133, - 1, - 96, - 128, - 97, - 91, - 160, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 44, - 120, - 35, - 249, - 156, - 178, - 173, - 183, - 22, - 190, - 203, - 150, - 9, - 20, - 255, - 161, - 214, - 226, - 242, - 87, - 135, - 95, - 221, - 3, - 194, - 190, - 229, - 46, - 245, - 113, - 212, - 30, - 97, - 92, - 32, - 131, - 1, - 82, - 127, - 9, - 171, - 131, - 235, - 198, - 128, - 62, - 101, - 178, - 230, - 131, - 28, - 135, - 6, - 217, - 161, - 52, - 246, - 177, - 207, - 111, - 110, - 197, - 194, - 105, - 122, - 254, - 224, - 149, - 50, - 14, - 225, - 97, - 92, - 64, - 131, - 1, - 82, - 97, - 76, - 64, - 130, - 1, - 81, - 97, - 92, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 92, - 32, - 133, - 1, - 96, - 96, - 97, - 92, - 32, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 91, - 160, - 130, - 1, - 81, - 97, - 92, - 128, - 131, - 1, - 82, - 97, - 91, - 192, - 130, - 1, - 81, - 97, - 92, - 160, - 131, - 1, - 82, - 97, - 92, - 32, - 130, - 1, - 81, - 97, - 92, - 192, - 131, - 1, - 82, - 97, - 92, - 64, - 130, - 1, - 81, - 97, - 92, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 92, - 128, - 133, - 1, - 96, - 128, - 97, - 92, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 45, - 193, - 44, - 32, - 81, - 82, - 191, - 172, - 195, - 84, - 200, - 56, - 34, - 85, - 113, - 23, - 44, - 33, - 94, - 1, - 166, - 77, - 230, - 162, - 202, - 102, - 101, - 199, - 9, - 55, - 172, - 88, - 97, - 93, - 0, - 131, - 1, - 82, - 127, - 4, - 73, - 235, - 82, - 159, - 0, - 56, - 162, - 189, - 47, - 108, - 11, - 98, - 19, - 167, - 4, - 136, - 182, - 155, - 71, - 157, - 144, - 169, - 83, - 87, - 158, - 76, - 157, - 69, - 98, - 27, - 133, - 97, - 93, - 32, - 131, - 1, - 82, - 97, - 76, - 96, - 130, - 1, - 81, - 97, - 93, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 93, - 0, - 133, - 1, - 96, - 96, - 97, - 93, - 0, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 92, - 128, - 130, - 1, - 81, - 97, - 93, - 96, - 131, - 1, - 82, - 97, - 92, - 160, - 130, - 1, - 81, - 97, - 93, - 128, - 131, - 1, - 82, - 97, - 93, - 0, - 130, - 1, - 81, - 97, - 93, - 160, - 131, - 1, - 82, - 97, - 93, - 32, - 130, - 1, - 81, - 97, - 93, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 93, - 96, - 133, - 1, - 96, - 128, - 97, - 93, - 96, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 9, - 162, - 171, - 57, - 19, - 164, - 119, - 15, - 213, - 15, - 107, - 169, - 236, - 76, - 224, - 179, - 23, - 139, - 84, - 215, - 191, - 202, - 91, - 66, - 254, - 126, - 142, - 28, - 229, - 207, - 96, - 169, - 97, - 93, - 224, - 131, - 1, - 82, - 127, - 19, - 236, - 49, - 249, - 64, - 38, - 86, - 156, - 75, - 183, - 110, - 44, - 76, - 234, - 163, - 230, - 82, - 84, - 56, - 255, - 180, - 167, - 166, - 156, - 222, - 97, - 246, - 215, - 123, - 147, - 186, - 215, - 97, - 94, - 0, - 131, - 1, - 82, - 97, - 76, - 128, - 130, - 1, - 81, - 97, - 94, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 93, - 224, - 133, - 1, - 96, - 96, - 97, - 93, - 224, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 93, - 96, - 130, - 1, - 81, - 97, - 94, - 64, - 131, - 1, - 82, - 97, - 93, - 128, - 130, - 1, - 81, - 97, - 94, - 96, - 131, - 1, - 82, - 97, - 93, - 224, - 130, - 1, - 81, - 97, - 94, - 128, - 131, - 1, - 82, - 97, - 94, - 0, - 130, - 1, - 81, - 97, - 94, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 94, - 64, - 133, - 1, - 96, - 128, - 97, - 94, - 64, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 7, - 67, - 234, - 64, - 241, - 64, - 132, - 219, - 38, - 115, - 33, - 114, - 131, - 170, - 5, - 63, - 152, - 104, - 150, - 238, - 124, - 24, - 31, - 82, - 17, - 132, - 66, - 233, - 156, - 69, - 41, - 116, - 97, - 94, - 192, - 131, - 1, - 82, - 127, - 2, - 3, - 227, - 73, - 58, - 37, - 148, - 236, - 229, - 125, - 34, - 204, - 117, - 221, - 8, - 26, - 198, - 130, - 113, - 236, - 124, - 117, - 129, - 83, - 207, - 210, - 21, - 43, - 251, - 92, - 25, - 227, - 97, - 94, - 224, - 131, - 1, - 82, - 97, - 76, - 160, - 130, - 1, - 81, - 97, - 95, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 94, - 192, - 133, - 1, - 96, - 96, - 97, - 94, - 192, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 94, - 64, - 130, - 1, - 81, - 97, - 95, - 32, - 131, - 1, - 82, - 97, - 94, - 96, - 130, - 1, - 81, - 97, - 95, - 64, - 131, - 1, - 82, - 97, - 94, - 192, - 130, - 1, - 81, - 97, - 95, - 96, - 131, - 1, - 82, - 97, - 94, - 224, - 130, - 1, - 81, - 97, - 95, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 95, - 32, - 133, - 1, - 96, - 128, - 97, - 95, - 32, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 2, - 169, - 167, - 125, - 142, - 111, - 111, - 216, - 159, - 51, - 186, - 86, - 254, - 69, - 246, - 245, - 201, - 7, - 229, - 11, - 162, - 140, - 221, - 65, - 152, - 172, - 251, - 86, - 46, - 178, - 17, - 3, - 97, - 95, - 160, - 131, - 1, - 82, - 127, - 35, - 171, - 238, - 104, - 216, - 60, - 45, - 102, - 50, - 87, - 110, - 94, - 149, - 202, - 1, - 166, - 30, - 94, - 62, - 109, - 148, - 56, - 194, - 172, - 100, - 40, - 200, - 182, - 237, - 254, - 42, - 186, - 97, - 95, - 192, - 131, - 1, - 82, - 97, - 76, - 192, - 130, - 1, - 81, - 97, - 95, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 95, - 160, - 133, - 1, - 96, - 96, - 97, - 95, - 160, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 95, - 32, - 130, - 1, - 81, - 97, - 96, - 0, - 131, - 1, - 82, - 97, - 95, - 64, - 130, - 1, - 81, - 97, - 96, - 32, - 131, - 1, - 82, - 97, - 95, - 160, - 130, - 1, - 81, - 97, - 96, - 64, - 131, - 1, - 82, - 97, - 95, - 192, - 130, - 1, - 81, - 97, - 96, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 96, - 0, - 133, - 1, - 96, - 128, - 97, - 96, - 0, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 127, - 44, - 243, - 109, - 54, - 191, - 172, - 190, - 26, - 141, - 140, - 98, - 106, - 239, - 167, - 90, - 192, - 254, - 180, - 107, - 114, - 89, - 137, - 168, - 230, - 250, - 190, - 208, - 116, - 191, - 159, - 106, - 247, - 97, - 96, - 128, - 131, - 1, - 82, - 127, - 6, - 15, - 222, - 211, - 237, - 94, - 197, - 109, - 158, - 0, - 100, - 215, - 60, - 71, - 34, - 69, - 164, - 196, - 182, - 236, - 55, - 30, - 152, - 8, - 105, - 43, - 247, - 242, - 89, - 211, - 183, - 48, - 97, - 96, - 160, - 131, - 1, - 82, - 97, - 76, - 224, - 130, - 1, - 81, - 97, - 96, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 96, - 128, - 133, - 1, - 96, - 96, - 97, - 96, - 128, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 96, - 0, - 130, - 1, - 81, - 97, - 96, - 224, - 131, - 1, - 82, - 97, - 96, - 32, - 130, - 1, - 81, - 97, - 97, - 0, - 131, - 1, - 82, - 97, - 96, - 128, - 130, - 1, - 81, - 97, - 97, - 32, - 131, - 1, - 82, - 97, - 96, - 160, - 130, - 1, - 81, - 97, - 97, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 96, - 224, - 133, - 1, - 96, - 128, - 97, - 96, - 224, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 4, - 64, - 130, - 1, - 81, - 97, - 97, - 96, - 131, - 1, - 82, - 97, - 4, - 96, - 130, - 1, - 81, - 97, - 97, - 128, - 131, - 1, - 82, - 97, - 77, - 0, - 130, - 1, - 81, - 97, - 97, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 97, - 96, - 133, - 1, - 96, - 96, - 97, - 97, - 96, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 96, - 224, - 130, - 1, - 81, - 97, - 97, - 192, - 131, - 1, - 82, - 97, - 97, - 0, - 130, - 1, - 81, - 97, - 97, - 224, - 131, - 1, - 82, - 97, - 97, - 96, - 130, - 1, - 81, - 97, - 98, - 0, - 131, - 1, - 82, - 97, - 97, - 128, - 130, - 1, - 81, - 97, - 98, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 97, - 192, - 133, - 1, - 96, - 128, - 97, - 97, - 192, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 4, - 128, - 130, - 1, - 81, - 97, - 98, - 64, - 131, - 1, - 82, - 97, - 4, - 160, - 130, - 1, - 81, - 97, - 98, - 96, - 131, - 1, - 82, - 97, - 77, - 32, - 130, - 1, - 81, - 97, - 98, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 98, - 64, - 133, - 1, - 96, - 96, - 97, - 98, - 64, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 97, - 192, - 130, - 1, - 81, - 97, - 98, - 160, - 131, - 1, - 82, - 97, - 97, - 224, - 130, - 1, - 81, - 97, - 98, - 192, - 131, - 1, - 82, - 97, - 98, - 64, - 130, - 1, - 81, - 97, - 98, - 224, - 131, - 1, - 82, - 97, - 98, - 96, - 130, - 1, - 81, - 97, - 99, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 98, - 160, - 133, - 1, - 96, - 128, - 97, - 98, - 160, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 4, - 192, - 130, - 1, - 81, - 97, - 99, - 32, - 131, - 1, - 82, - 97, - 4, - 224, - 130, - 1, - 81, - 97, - 99, - 64, - 131, - 1, - 82, - 97, - 77, - 64, - 130, - 1, - 81, - 97, - 99, - 96, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 99, - 32, - 133, - 1, - 96, - 96, - 97, - 99, - 32, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 98, - 160, - 130, - 1, - 81, - 97, - 99, - 128, - 131, - 1, - 82, - 97, - 98, - 192, - 130, - 1, - 81, - 97, - 99, - 160, - 131, - 1, - 82, - 97, - 99, - 32, - 130, - 1, - 81, - 97, - 99, - 192, - 131, - 1, - 82, - 97, - 99, - 64, - 130, - 1, - 81, - 97, - 99, - 224, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 99, - 128, - 133, - 1, - 96, - 128, - 97, - 99, - 128, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 5, - 0, - 130, - 1, - 81, - 97, - 100, - 0, - 131, - 1, - 82, - 97, - 5, - 32, - 130, - 1, - 81, - 97, - 100, - 32, - 131, - 1, - 82, - 97, - 77, - 96, - 130, - 1, - 81, - 97, - 100, - 64, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 100, - 0, - 133, - 1, - 96, - 96, - 97, - 100, - 0, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 99, - 128, - 130, - 1, - 81, - 97, - 100, - 96, - 131, - 1, - 82, - 97, - 99, - 160, - 130, - 1, - 81, - 97, - 100, - 128, - 131, - 1, - 82, - 97, - 100, - 0, - 130, - 1, - 81, - 97, - 100, - 160, - 131, - 1, - 82, - 97, - 100, - 32, - 130, - 1, - 81, - 97, - 100, - 192, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 100, - 96, - 133, - 1, - 96, - 128, - 97, - 100, - 96, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 5, - 64, - 130, - 1, - 81, - 97, - 100, - 224, - 131, - 1, - 82, - 97, - 5, - 96, - 130, - 1, - 81, - 97, - 101, - 0, - 131, - 1, - 82, - 97, - 77, - 128, - 130, - 1, - 81, - 97, - 101, - 32, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 100, - 224, - 133, - 1, - 96, - 96, - 97, - 100, - 224, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 100, - 96, - 130, - 1, - 81, - 97, - 101, - 64, - 131, - 1, - 82, - 97, - 100, - 128, - 130, - 1, - 81, - 97, - 101, - 96, - 131, - 1, - 82, - 97, - 100, - 224, - 130, - 1, - 81, - 97, - 101, - 128, - 131, - 1, - 82, - 97, - 101, - 0, - 130, - 1, - 81, - 97, - 101, - 160, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 101, - 64, - 133, - 1, - 96, - 128, - 97, - 101, - 64, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 3, - 160, - 130, - 1, - 81, - 97, - 101, - 192, - 131, - 1, - 82, - 97, - 3, - 192, - 130, - 1, - 81, - 97, - 101, - 224, - 131, - 1, - 82, - 97, - 77, - 160, - 130, - 1, - 81, - 97, - 102, - 0, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 101, - 192, - 133, - 1, - 96, - 96, - 97, - 101, - 192, - 135, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 101, - 64, - 130, - 1, - 81, - 97, - 102, - 32, - 131, - 1, - 82, - 97, - 101, - 96, - 130, - 1, - 81, - 97, - 102, - 64, - 131, - 1, - 82, - 97, - 101, - 192, - 130, - 1, - 81, - 97, - 102, - 96, - 131, - 1, - 82, - 97, - 101, - 224, - 130, - 1, - 81, - 97, - 102, - 128, - 131, - 1, - 82, - 130, - 96, - 1, - 96, - 64, - 97, - 102, - 32, - 133, - 1, - 96, - 128, - 97, - 102, - 32, - 135, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 146, - 80, - 97, - 10, - 192, - 130, - 1, - 81, - 97, - 102, - 160, - 131, - 1, - 82, - 97, - 10, - 224, - 130, - 1, - 81, - 97, - 102, - 192, - 131, - 1, - 82, - 97, - 77, - 224, - 130, - 1, - 81, - 129, - 3, - 97, - 102, - 224, - 131, - 1, - 82, - 80, - 129, - 96, - 1, - 96, - 64, - 97, - 102, - 160, - 132, - 1, - 96, - 96, - 97, - 102, - 160, - 134, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 145, - 80, - 97, - 102, - 32, - 129, - 1, - 81, - 97, - 103, - 0, - 130, - 1, - 82, - 97, - 102, - 64, - 129, - 1, - 81, - 97, - 103, - 32, - 130, - 1, - 82, - 97, - 102, - 160, - 129, - 1, - 81, - 97, - 103, - 64, - 130, - 1, - 82, - 97, - 102, - 192, - 129, - 1, - 81, - 97, - 103, - 96, - 130, - 1, - 82, - 129, - 96, - 1, - 96, - 64, - 97, - 103, - 0, - 132, - 1, - 96, - 128, - 97, - 103, - 0, - 134, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 145, - 80, - 97, - 11, - 96, - 129, - 1, - 81, - 97, - 103, - 128, - 130, - 1, - 82, - 97, - 11, - 128, - 129, - 1, - 81, - 97, - 103, - 160, - 130, - 1, - 82, - 97, - 78, - 0, - 129, - 1, - 81, - 97, - 103, - 192, - 130, - 1, - 82, - 129, - 96, - 1, - 96, - 64, - 97, - 103, - 128, - 132, - 1, - 96, - 96, - 97, - 103, - 128, - 134, - 1, - 96, - 7, - 90, - 250, - 20, - 22, - 145, - 80, - 97, - 103, - 0, - 129, - 1, - 81, - 97, - 103, - 224, - 130, - 1, - 82, - 97, - 103, - 32, - 129, - 1, - 81, - 97, - 104, - 0, - 130, - 1, - 82, - 97, - 103, - 128, - 129, - 1, - 81, - 97, - 104, - 32, - 130, - 1, - 82, - 97, - 103, - 160, - 129, - 1, - 81, - 97, - 104, - 64, - 130, - 1, - 82, - 129, - 96, - 1, - 96, - 64, - 97, - 103, - 224, - 132, - 1, - 96, - 128, - 97, - 103, - 224, - 134, - 1, - 96, - 6, - 90, - 250, - 20, - 22, - 145, - 80, - 97, - 103, - 224, - 129, - 1, - 81, - 97, - 104, - 96, - 130, - 1, - 82, - 97, - 104, - 0, - 129, - 1, - 81, - 97, - 104, - 128, - 130, - 1, - 82, - 127, - 25, - 142, - 147, - 147, - 146, - 13, - 72, - 58, - 114, - 96, - 191, - 183, - 49, - 251, - 93, - 37, - 241, - 170, - 73, - 51, - 53, - 169, - 231, - 18, - 151, - 228, - 133, - 183, - 174, - 243, - 18, - 194, - 97, - 104, - 160, - 130, - 1, - 82, - 127, - 24, - 0, - 222, - 239, - 18, - 31, - 30, - 118, - 66, - 106, - 0, - 102, - 94, - 92, - 68, - 121, - 103, - 67, - 34, - 212, - 247, - 94, - 218, - 221, - 70, - 222, - 189, - 92, - 217, - 146, - 246, - 237, - 97, - 104, - 192, - 130, - 1, - 82, - 127, - 9, - 6, - 137, - 208, - 88, - 95, - 240, - 117, - 236, - 158, - 153, - 173, - 105, - 12, - 51, - 149, - 188, - 75, - 49, - 51, - 112, - 179, - 142, - 243, - 85, - 172, - 218, - 220, - 209, - 34, - 151, - 91, - 97, - 104, - 224, - 130, - 1, - 82, - 127, - 18, - 200, - 94, - 165, - 219, - 140, - 109, - 235, - 74, - 171, - 113, - 128, - 141, - 203, - 64, - 143, - 227, - 209, - 231, - 105, - 12, - 67, - 211, - 123, - 76, - 230, - 204, - 1, - 102, - 250, - 125, - 170, - 97, - 105, - 0, - 130, - 1, - 82, - 97, - 11, - 96, - 129, - 1, - 81, - 97, - 105, - 32, - 130, - 1, - 82, - 97, - 11, - 128, - 129, - 1, - 81, - 97, - 105, - 64, - 130, - 1, - 82, - 127, - 38, - 24, - 106, - 45, - 101, - 238, - 77, - 47, - 156, - 154, - 91, - 145, - 248, - 101, - 151, - 211, - 95, - 25, - 44, - 209, - 32, - 202, - 247, - 233, - 53, - 216, - 68, - 61, - 25, - 56, - 226, - 61, - 97, - 105, - 96, - 130, - 1, - 82, - 127, - 48, - 68, - 31, - 209, - 181, - 211, - 55, - 4, - 130, - 196, - 33, - 82, - 168, - 137, - 144, - 39, - 113, - 105, - 137, - 166, - 153, - 108, - 37, - 53, - 188, - 159, - 127, - 238, - 138, - 174, - 247, - 158, - 97, - 105, - 128, - 130, - 1, - 82, - 127, - 22, - 243, - 99, - 241, - 3, - 200, - 13, - 123, - 188, - 138, - 211, - 198, - 134, - 126, - 8, - 34, - 187, - 198, - 0, - 11, - 233, - 26, - 70, - 137, - 117, - 92, - 125, - 244, - 2, - 33, - 193, - 69, - 97, - 105, - 160, - 130, - 1, - 82, - 127, - 43, - 28, - 187, - 62, - 82, - 30, - 223, - 90, - 98, - 45, - 130, - 118, - 42, - 68, - 165, - 230, - 63, - 30, - 80, - 179, - 50, - 215, - 17, - 84, - 164, - 167, - 149, - 141, - 96, - 17, - 222, - 255, - 97, - 105, - 192, - 130, - 1, - 82, - 129, - 96, - 1, - 96, - 32, - 97, - 104, - 96, - 132, - 1, - 97, - 1, - 128, - 97, - 104, - 96, - 134, - 1, - 96, - 8, - 90, - 250, - 97, - 104, - 96, - 147, - 144, - 147, - 1, - 81, - 96, - 1, - 20, - 146, - 20, - 22, - 22, - 145, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 64, - 81, - 128, - 97, - 105, - 192, - 1, - 96, - 64, - 82, - 128, - 97, - 3, - 78, - 144, - 96, - 32, - 130, - 2, - 128, - 54, - 131, - 55, - 80, - 145, - 146, - 145, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 64, - 81, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 129, - 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, - 130, - 16, - 23, - 21, - 97, - 78, - 92, - 87, - 97, - 78, - 92, - 97, - 78, - 29, - 86, - 91, - 96, - 64, - 82, - 145, - 144, - 80, - 86, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 78, - 117, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 78, - 143, - 87, - 97, - 78, - 143, - 97, - 78, - 29, - 86, - 91, - 97, - 78, - 162, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 96, - 32, - 1, - 97, - 78, - 51, - 86, - 91, - 129, - 129, - 82, - 132, - 96, - 32, - 131, - 134, - 1, - 1, - 17, - 21, - 97, - 78, - 183, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 96, - 32, - 133, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 145, - 129, - 1, - 96, - 32, - 1, - 145, - 144, - 145, - 82, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 64, - 131, - 133, - 3, - 18, - 21, - 97, - 78, - 231, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 78, - 255, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 133, - 1, - 145, - 80, - 133, - 96, - 31, - 131, - 1, - 18, - 97, - 79, - 19, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 96, - 32, - 130, - 130, - 17, - 21, - 97, - 79, - 39, - 87, - 97, - 79, - 39, - 97, - 78, - 29, - 86, - 91, - 129, - 96, - 5, - 27, - 97, - 79, - 54, - 130, - 130, - 1, - 97, - 78, - 51, - 86, - 91, - 146, - 131, - 82, - 132, - 129, - 1, - 130, - 1, - 146, - 130, - 129, - 1, - 144, - 138, - 133, - 17, - 21, - 97, - 79, - 80, - 87, - 96, - 0, - 128, - 253, - 91, - 149, - 131, - 1, - 149, - 91, - 132, - 135, - 16, - 21, - 97, - 79, - 110, - 87, - 134, - 53, - 130, - 82, - 149, - 131, - 1, - 149, - 144, - 131, - 1, - 144, - 97, - 79, - 85, - 86, - 91, - 151, - 80, - 80, - 80, - 134, - 1, - 53, - 146, - 80, - 80, - 128, - 130, - 17, - 21, - 97, - 79, - 133, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 79, - 146, - 133, - 130, - 134, - 1, - 97, - 78, - 100, - 86, - 91, - 145, - 80, - 80, - 146, - 80, - 146, - 144, - 80, - 86, - 254, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 151, - 129, - 106, - 145, - 104, - 113, - 202, - 141, - 60, - 32, - 140, - 22, - 216, - 124, - 253, - 71, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 212, - 178, - 220, - 135, - 152, - 186, - 177, - 123, - 101, - 162, - 231, - 44, - 60, - 209, - 59, - 7, - 180, - 165, - 138, - 174, - 54, - 106, - 119, - 120, - 72, - 82, - 51, - 60, - 117, - 170, - 120, - 185, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static SOLVENCYVERIFIER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct SolvencyVerifier(::ethers::contract::Contract); - impl ::core::clone::Clone for SolvencyVerifier { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for SolvencyVerifier { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for SolvencyVerifier { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for SolvencyVerifier { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(SolvencyVerifier)).field(&self.address()).finish() - } - } - impl SolvencyVerifier { - /// 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(), - SOLVENCYVERIFIER_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( - SOLVENCYVERIFIER_ABI.clone(), - SOLVENCYVERIFIER_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `verify` (0xbd205a90) function - pub fn verify( - &self, - pub_inputs: ::std::vec::Vec<::ethers::core::types::U256>, - proof: ::ethers::core::types::Bytes, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([189, 32, 90, 144], (pub_inputs, proof)) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> - for SolvencyVerifier { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Container type for all input parameters for the `verify` function with signature `verify(uint256[],bytes)` and selector `0xbd205a90` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "verify", abi = "verify(uint256[],bytes)")] - pub struct VerifyCall { - pub pub_inputs: ::std::vec::Vec<::ethers::core::types::U256>, - pub proof: ::ethers::core::types::Bytes, - } - ///Container type for all return fields from the `verify` function with signature `verify(uint256[],bytes)` and selector `0xbd205a90` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct VerifyReturn(pub bool); -} diff --git a/backend/src/contracts/generated/summa_contract.rs b/backend/src/contracts/generated/summa_contract.rs index 7b33fdba..85f9c82a 100644 --- a/backend/src/contracts/generated/summa_contract.rs +++ b/backend/src/contracts/generated/summa_contract.rs @@ -11,24 +11,23 @@ pub use summa::*; )] pub mod summa { #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"contract IVerifier\",\"name\":\"_solvencyVerifier\",\"type\":\"address\",\"components\":[]},{\"internalType\":\"contract IVerifier\",\"name\":\"_inclusionVerifier\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof[]\",\"name\":\"addressOwnershipProofs\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}],\"indexed\":false}],\"type\":\"event\",\"name\":\"AddressOwnershipProofSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[],\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[],\"indexed\":false},{\"internalType\":\"struct Summa.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"assetName\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"components\":[]}],\"indexed\":false}],\"type\":\"event\",\"name\":\"SolvencyProofSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"addressOwnershipProofs\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"mstRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"ownershipProofByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof[]\",\"name\":\"_addressOwnershipProofs\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitProofOfAddressOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[]},{\"internalType\":\"struct Summa.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"assetName\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\",\"components\":[]}]},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitProofOfSolvency\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"publicInputs\",\"type\":\"uint256[]\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifyInclusionProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"publicInputs\",\"type\":\"uint256[]\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifySolvencyProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; + const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"contract IVerifier\",\"name\":\"_inclusionVerifier\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof[]\",\"name\":\"addressOwnershipProofs\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}],\"indexed\":false}],\"type\":\"event\",\"name\":\"AddressOwnershipProofSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[],\"indexed\":true},{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[],\"indexed\":false},{\"internalType\":\"uint256[]\",\"name\":\"rootSums\",\"type\":\"uint256[]\",\"components\":[],\"indexed\":false},{\"internalType\":\"struct Summa.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"assetName\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]}],\"indexed\":false}],\"type\":\"event\",\"name\":\"LiabilitiesCommitmentSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"addressOwnershipProofs\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"addressHash\",\"type\":\"bytes32\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getAddressOwnershipProof\",\"outputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mstRoot\",\"type\":\"uint256\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"rootSums\",\"type\":\"uint256[]\",\"components\":[]},{\"internalType\":\"struct Summa.Asset[]\",\"name\":\"assets\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"assetName\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]}]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitCommitment\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof[]\",\"name\":\"_addressOwnershipProofs\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitProofOfAddressOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"publicInputs\",\"type\":\"uint256[]\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifyInclusionProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; ///The parsed JSON ABI of the contract. pub static SUMMA_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(|| ::ethers::core::utils::__serde_json::from_str(__ABI).expect("ABI is always valid")); #[rustfmt::skip] const __BYTECODE: &[u8] = &[ 96, - 192, + 160, 96, 64, 82, 52, 128, 21, - 98, - 0, + 97, 0, - 17, + 16, 87, 96, 0, @@ -41,15 +40,15 @@ pub mod summa { 81, 98, 0, - 22, - 243, + 27, + 29, 56, 3, 128, 98, 0, - 22, - 243, + 27, + 29, 131, 57, 129, @@ -59,26 +58,22 @@ pub mod summa { 129, 144, 82, - 98, - 0, + 97, 0, - 52, + 49, 145, - 98, - 0, + 97, 0, - 196, + 155, 86, 91, - 98, - 0, + 97, 0, - 63, + 58, 51, - 98, - 0, + 97, 0, - 87, + 75, 86, 91, 96, @@ -89,20 +84,13 @@ pub mod summa { 160, 27, 3, - 145, - 130, 22, 96, 128, 82, - 22, - 96, - 160, - 82, - 98, - 0, + 97, 0, - 252, + 203, 86, 91, 96, @@ -185,7 +173,25 @@ pub mod summa { 80, 86, 91, + 96, + 0, + 96, + 32, + 130, + 132, + 3, + 18, + 21, + 97, + 0, + 173, + 87, + 96, + 0, 128, + 253, + 91, + 129, 81, 96, 1, @@ -199,90 +205,32 @@ pub mod summa { 22, 129, 20, - 98, - 0, - 0, - 191, - 87, - 96, - 0, - 128, - 253, - 91, - 145, - 144, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 64, - 131, - 133, - 3, - 18, - 21, - 98, - 0, + 97, 0, - 216, + 196, 87, 96, 0, 128, 253, 91, - 98, - 0, - 0, - 227, - 131, - 98, - 0, - 0, - 167, - 86, - 91, - 145, - 80, - 98, - 0, - 0, - 243, - 96, - 32, - 132, - 1, - 98, - 0, - 0, - 167, - 86, - 91, - 144, - 80, + 147, 146, 80, - 146, - 144, + 80, 80, 86, 91, 96, 128, 81, - 96, - 160, - 81, 97, - 21, - 209, + 26, + 54, 98, 0, - 1, - 34, + 0, + 231, 96, 0, 57, @@ -290,19 +238,12 @@ pub mod summa { 0, 97, 10, - 133, - 1, - 82, - 96, - 0, - 97, - 4, - 94, + 74, 1, 82, 97, - 21, - 209, + 26, + 54, 96, 0, 243, @@ -331,7 +272,7 @@ pub mod summa { 16, 97, 0, - 158, + 147, 87, 96, 0, @@ -341,10 +282,10 @@ pub mod summa { 28, 128, 99, - 141, - 165, - 203, - 91, + 163, + 196, + 188, + 248, 17, 97, 0, @@ -352,17 +293,6 @@ pub mod summa { 87, 128, 99, - 141, - 165, - 203, - 91, - 20, - 97, - 1, - 54, - 87, - 128, - 99, 163, 196, 188, @@ -370,7 +300,7 @@ pub mod summa { 20, 97, 1, - 81, + 20, 87, 128, 99, @@ -381,7 +311,7 @@ pub mod summa { 20, 97, 1, - 116, + 55, 87, 128, 99, @@ -392,7 +322,18 @@ pub mod summa { 20, 97, 1, - 135, + 74, + 87, + 128, + 99, + 218, + 100, + 167, + 80, + 20, + 97, + 1, + 109, 87, 128, 99, @@ -403,7 +344,7 @@ pub mod summa { 20, 97, 1, - 154, + 128, 87, 96, 0, @@ -412,36 +353,25 @@ pub mod summa { 91, 128, 99, - 35, - 235, - 148, - 160, - 20, - 97, - 0, - 163, - 87, - 128, - 99, - 65, - 58, - 159, - 45, + 25, + 179, + 57, + 104, 20, 97, 0, - 214, + 152, 87, 128, 99, - 108, - 118, - 132, - 254, + 73, + 206, + 137, + 151, 20, 97, 0, - 235, + 193, 87, 128, 99, @@ -451,19 +381,19 @@ pub mod summa { 166, 20, 97, - 1, - 14, + 0, + 239, 87, 128, 99, - 127, - 59, - 251, - 46, + 141, + 165, + 203, + 91, 20, 97, - 1, - 22, + 0, + 249, 87, 91, 96, @@ -473,46 +403,36 @@ pub mod summa { 91, 97, 0, - 195, + 171, 97, 0, - 177, + 166, 54, 96, 4, 97, - 12, - 40, + 16, + 173, + 86, + 91, + 97, + 1, + 147, 86, 91, 96, - 2, - 96, - 32, - 82, - 96, + 64, + 81, + 97, 0, + 184, + 145, 144, + 97, + 17, 129, - 82, - 96, - 64, - 144, - 32, - 84, - 129, - 86, - 91, - 96, - 64, - 81, - 144, - 129, - 82, - 96, - 32, - 1, - 91, + 86, + 91, 96, 64, 81, @@ -524,50 +444,40 @@ pub mod summa { 91, 97, 0, - 233, + 225, 97, 0, - 228, + 207, 54, 96, 4, 97, - 13, - 104, - 86, - 91, - 97, - 1, + 16, 173, 86, 91, + 96, + 3, + 96, + 32, + 82, + 96, 0, - 91, - 97, - 0, - 254, - 97, - 0, - 249, - 54, + 144, + 129, + 82, 96, - 4, - 97, - 15, - 34, - 86, - 91, - 97, - 4, - 68, + 64, + 144, + 32, + 84, + 129, 86, 91, 96, 64, 81, 144, - 21, - 21, 129, 82, 96, @@ -575,48 +485,18 @@ pub mod summa { 1, 97, 0, - 205, - 86, - 91, - 97, - 0, - 233, - 97, - 4, - 223, + 184, 86, 91, 97, 0, - 195, + 247, 97, - 1, - 36, - 54, - 96, 4, - 97, - 12, - 40, + 170, 86, 91, - 96, - 3, - 96, - 32, - 82, - 96, 0, - 144, - 129, - 82, - 96, - 64, - 144, - 32, - 84, - 129, - 86, 91, 96, 0, @@ -642,26 +522,26 @@ pub mod summa { 1, 97, 0, - 205, + 184, 86, 91, 97, 1, - 100, + 39, 97, 1, - 95, + 34, 54, 96, 4, 97, - 12, - 40, + 16, + 173, 86, 91, 97, 4, - 243, + 190, 86, 91, 96, @@ -669,91 +549,170 @@ pub mod summa { 81, 97, 0, - 205, + 184, 148, 147, 146, 145, 144, 97, - 15, - 204, + 17, + 155, 86, 91, 97, 0, - 233, + 247, 97, 1, - 130, + 69, 54, 96, 4, 97, - 16, - 36, + 19, + 26, 86, 91, 97, 7, - 83, + 30, 86, 91, 97, - 0, - 254, + 1, + 93, 97, 1, - 149, + 88, 54, 96, 4, 97, - 17, - 126, + 20, + 223, 86, 91, 97, 9, - 253, + 191, 86, 91, + 96, + 64, + 81, + 144, + 21, + 21, + 129, + 82, + 96, + 32, + 1, 97, 0, - 233, + 184, + 86, + 91, + 97, + 0, + 247, 97, 1, - 168, + 123, 54, 96, 4, 97, - 17, - 235, + 21, + 76, 86, 91, 97, - 11, - 5, + 10, + 202, 86, 91, 97, + 0, + 247, + 97, 1, - 181, + 142, + 54, + 96, + 4, 97, - 11, - 126, + 22, + 147, + 86, + 91, + 97, + 14, + 129, 86, 91, + 97, + 1, + 190, + 96, + 64, + 81, + 128, 96, + 128, + 1, + 96, + 64, + 82, + 128, + 96, + 96, + 129, + 82, + 96, + 32, 1, - 84, + 96, + 96, + 129, + 82, + 96, + 32, + 1, + 96, + 96, + 129, + 82, + 96, + 32, + 1, + 96, + 96, + 129, + 82, + 80, + 144, + 86, + 91, 96, 0, - 3, + 130, + 129, + 82, + 96, + 2, + 96, + 32, + 82, + 96, + 64, + 144, + 32, + 84, 97, 2, - 43, + 21, 87, 96, 64, @@ -775,83 +734,43 @@ pub mod summa { 1, 82, 96, - 54, + 20, 96, 36, 130, 1, 82, - 127, - 84, - 104, - 101, - 32, - 67, - 69, - 88, - 32, - 104, - 97, - 115, - 32, - 110, - 111, - 116, - 32, - 115, - 117, - 98, - 109, - 105, - 116, - 116, - 101, - 100, - 32, - 97, - 110, - 121, - 32, - 97, - 100, - 96, - 68, - 130, - 1, - 82, - 117, - 100, - 114, - 101, - 115, - 115, - 32, - 111, - 119, - 110, - 101, - 114, - 115, - 104, - 105, - 112, - 32, - 112, - 114, - 111, - 111, - 102, 115, + 16, + 89, + 25, + 28, + 153, + 92, + 220, + 200, + 27, + 155, + 221, + 8, + 29, + 153, + 92, + 154, + 89, + 154, + 89, + 89, 96, - 80, + 98, 27, 96, - 100, + 68, 130, 1, 82, 96, - 132, + 100, 1, 91, 96, @@ -865,712 +784,681 @@ pub mod summa { 91, 96, 0, - 131, - 81, + 130, + 129, + 82, + 96, + 2, + 96, + 32, + 82, + 96, + 64, + 144, + 32, + 84, 96, 1, + 144, 97, 2, - 59, - 145, + 50, + 144, + 130, 144, 97, - 18, - 49, + 22, + 210, 86, 91, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, 129, - 17, - 21, + 84, + 129, + 16, 97, 2, - 83, + 66, 87, 97, 2, - 83, + 66, 97, - 12, - 65, + 22, + 235, 86, 91, - 96, - 64, - 81, 144, - 128, - 130, + 96, + 0, 82, - 128, 96, 32, - 2, 96, + 0, 32, - 1, - 130, + 144, + 96, + 4, + 2, 1, 96, 64, - 82, + 81, 128, - 21, - 97, - 2, - 124, - 87, - 129, - 96, - 32, - 1, 96, - 32, - 130, - 2, 128, - 54, - 131, - 55, 1, + 96, + 64, + 82, 144, - 80, - 91, - 80, - 144, - 80, - 132, 129, 96, 0, - 129, - 81, - 129, - 16, - 97, - 2, - 147, - 87, + 130, + 1, + 128, + 84, 97, 2, - 147, + 107, + 144, 97, - 18, - 68, + 23, + 1, 86, 91, + 128, + 96, + 31, + 1, 96, 32, + 128, + 145, + 4, 2, 96, 32, 1, + 96, + 64, + 81, + 144, + 129, 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, 129, 129, 82, - 80, - 80, 96, - 0, + 32, + 1, + 130, + 128, + 84, + 97, + 2, + 151, + 144, + 97, + 23, + 1, + 86, 91, - 132, - 81, - 129, - 16, + 128, 21, 97, - 3, - 142, + 2, + 228, 87, - 132, - 129, - 129, - 81, - 129, + 128, + 96, + 31, 16, 97, 2, - 189, + 185, 87, 97, + 1, + 0, + 128, + 131, + 84, + 4, 2, - 189, + 131, + 82, + 145, + 96, + 32, + 1, + 145, 97, - 18, - 68, + 2, + 228, 86, 91, + 130, + 1, + 145, + 144, 96, - 32, - 2, + 0, + 82, 96, 32, - 1, - 1, - 81, 96, + 0, 32, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 128, - 21, - 97, - 2, - 249, - 87, - 80, - 132, - 129, + 144, + 91, 129, - 81, + 84, 129, - 16, - 97, - 2, - 231, - 87, - 97, - 2, - 231, - 97, - 18, - 68, - 86, - 91, - 96, - 32, - 2, + 82, + 144, 96, - 32, 1, 1, - 81, + 144, 96, - 0, + 32, 1, - 81, - 81, - 96, - 0, - 20, - 21, - 91, + 128, + 131, + 17, 97, - 3, - 53, + 2, + 199, 87, + 130, + 144, + 3, 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, + 31, + 22, + 130, + 1, + 145, + 91, + 80, + 80, + 80, + 80, + 80, 129, 82, 96, 32, - 96, - 4, - 130, 1, - 82, - 96, - 13, 96, - 36, - 130, 1, - 82, - 108, - 18, - 91, - 157, - 152, - 91, - 26, - 89, - 8, - 24, - 92, - 220, - 217, - 93, - 96, - 154, - 27, - 96, - 68, 130, 1, - 82, - 96, - 100, - 1, + 128, + 84, 97, 2, - 34, - 86, - 91, - 132, - 129, - 129, - 81, - 129, - 16, - 97, - 3, - 71, - 87, - 97, - 3, - 71, + 253, + 144, 97, - 18, - 68, + 23, + 1, 86, 91, + 128, + 96, + 31, + 1, 96, 32, + 128, + 145, + 4, 2, 96, 32, 1, - 1, - 81, 96, 64, - 1, 81, - 130, - 130, + 144, + 129, + 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, + 129, + 129, + 82, 96, + 32, 1, + 130, + 128, + 84, 97, 3, - 97, - 145, + 41, 144, 97, - 18, - 49, + 23, + 1, 86, 91, - 129, - 81, - 129, - 16, + 128, + 21, 97, 3, - 113, + 118, 87, + 128, + 96, + 31, + 16, 97, 3, - 113, + 75, + 87, 97, - 18, - 68, + 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, + 82, + 145, + 96, + 32, + 1, + 145, + 97, + 3, + 118, 86, 91, + 130, + 1, + 145, + 144, + 96, + 0, + 82, + 96, + 32, 96, + 0, 32, 144, + 91, 129, - 2, - 145, + 84, + 129, + 82, 144, - 145, + 96, 1, 1, - 82, + 144, + 96, + 32, + 1, 128, + 131, + 17, 97, 3, - 134, - 129, - 97, - 18, - 90, - 86, - 91, + 89, + 87, + 130, + 144, + 3, + 96, + 31, + 22, + 130, + 1, 145, + 91, + 80, + 80, 80, 80, - 97, - 2, - 162, - 86, - 91, 80, - 97, - 3, - 153, - 131, - 130, - 97, - 4, - 68, - 86, - 91, - 97, - 3, - 216, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, 129, 82, 96, 32, + 1, 96, - 4, + 2, 130, 1, - 82, + 128, + 84, + 97, + 3, + 143, + 144, + 97, + 23, + 1, + 86, + 91, + 128, 96, - 16, + 31, + 1, 96, - 36, - 130, + 32, + 128, + 145, + 4, + 2, + 96, + 32, 1, - 82, - 111, - 36, - 183, - 59, - 48, - 182, - 52, - 178, - 16, - 45, - 37, + 96, + 64, + 81, 144, - 56, - 57, - 55, - 183, - 179, + 129, + 1, 96, + 64, + 82, + 128, + 146, + 145, + 144, 129, - 27, + 129, + 82, 96, - 68, + 32, + 1, 130, + 128, + 84, + 97, + 3, + 187, + 144, + 97, + 23, + 1, + 86, + 91, + 128, + 21, + 97, + 4, + 8, + 87, + 128, + 96, + 31, + 16, + 97, + 3, + 221, + 87, + 97, 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, 82, + 145, 96, - 100, + 32, 1, + 145, 97, - 2, - 34, + 4, + 8, 86, 91, + 130, + 1, + 145, + 144, 96, 0, - 130, - 129, 82, 96, - 3, - 96, 32, - 82, 96, - 64, - 129, + 0, 32, - 134, 144, - 85, + 91, 129, - 81, - 131, - 145, - 127, - 4, - 115, - 88, - 28, - 60, - 244, - 55, - 175, - 197, - 34, - 7, - 216, - 140, - 225, 84, - 26, - 251, - 199, - 206, - 159, - 219, - 131, - 180, - 212, - 211, - 183, - 33, - 75, - 238, - 213, - 111, - 245, - 145, - 132, - 145, + 129, + 82, 144, + 96, + 1, + 1, + 144, + 96, + 32, + 1, + 128, + 131, + 17, 97, - 4, - 30, + 3, + 235, 87, + 130, + 144, + 3, + 96, + 31, + 22, + 130, + 1, + 145, + 91, + 80, + 80, + 80, + 80, + 80, + 129, + 82, + 96, + 32, + 1, + 96, + 3, + 130, + 1, + 128, + 84, 97, 4, - 30, + 33, + 144, 97, - 18, - 68, + 23, + 1, 86, 91, + 128, + 96, + 31, + 1, 96, 32, + 128, + 145, + 4, 2, 96, 32, 1, - 1, - 81, - 134, 96, 64, 81, - 97, - 4, - 53, - 146, - 145, 144, - 97, - 18, - 115, - 86, - 91, + 129, + 1, 96, 64, - 81, + 82, 128, + 146, 145, - 3, 144, - 162, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 64, - 81, - 99, - 11, - 210, - 5, - 169, - 96, - 228, - 27, + 129, 129, 82, 96, - 0, - 144, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 144, - 99, - 189, 32, - 90, - 144, - 144, + 1, + 130, + 128, + 84, 97, 4, - 149, - 144, - 133, - 144, - 135, + 77, 144, - 96, - 4, - 1, 97, - 19, - 10, + 23, + 1, 86, 91, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, 128, 21, 97, 4, - 178, + 154, 87, - 61, - 96, - 0, 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, 96, 31, - 25, + 16, + 97, + 4, + 111, + 87, + 97, + 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, + 82, + 145, 96, - 31, - 130, + 32, 1, - 22, + 145, + 97, + 4, + 154, + 86, + 91, 130, 1, - 128, + 145, + 144, 96, - 64, + 0, 82, - 80, + 96, + 32, + 96, + 0, + 32, + 144, + 91, 129, + 84, + 129, + 82, + 144, + 96, + 1, 1, 144, + 96, + 32, + 1, + 128, + 131, + 17, 97, 4, - 214, - 145, + 125, + 87, + 130, 144, - 97, - 19, - 97, - 86, + 3, + 96, + 31, + 22, + 130, + 1, + 145, 91, + 80, + 80, + 80, + 80, + 80, + 129, + 82, + 80, + 80, 144, 80, - 91, - 146, 145, - 80, + 144, 80, 86, 91, 97, 4, - 231, + 178, 97, - 11, - 126, + 14, + 250, 86, 91, 97, 4, - 241, + 188, 96, 0, 97, - 11, - 216, + 15, + 84, 86, 91, 86, @@ -1583,8 +1471,8 @@ pub mod summa { 129, 16, 97, - 5, - 3, + 4, + 206, 87, 96, 0, @@ -1618,12 +1506,12 @@ pub mod summa { 128, 84, 97, - 5, - 38, + 4, + 241, 144, 97, - 19, - 131, + 23, + 1, 86, 91, 128, @@ -1663,18 +1551,18 @@ pub mod summa { 84, 97, 5, - 82, + 29, 144, 97, - 19, - 131, + 23, + 1, 86, 91, 128, 21, 97, 5, - 159, + 106, 87, 128, 96, @@ -1682,7 +1570,7 @@ pub mod summa { 16, 97, 5, - 116, + 63, 87, 97, 1, @@ -1701,7 +1589,7 @@ pub mod summa { 145, 97, 5, - 159, + 106, 86, 91, 130, @@ -1735,7 +1623,7 @@ pub mod summa { 17, 97, 5, - 130, + 77, 87, 130, 144, @@ -1761,11 +1649,11 @@ pub mod summa { 84, 97, 5, - 180, + 127, 144, 97, - 19, - 131, + 23, + 1, 86, 91, 128, @@ -1805,26 +1693,26 @@ pub mod summa { 84, 97, 5, - 224, + 171, 144, 97, - 19, - 131, + 23, + 1, 86, 91, 128, 21, 97, - 6, - 45, + 5, + 248, 87, 128, 96, 31, 16, 97, - 6, - 2, + 5, + 205, 87, 97, 1, @@ -1842,8 +1730,8 @@ pub mod summa { 1, 145, 97, - 6, - 45, + 5, + 248, 86, 91, 130, @@ -1876,8 +1764,8 @@ pub mod summa { 131, 17, 97, - 6, - 16, + 5, + 219, 87, 130, 144, @@ -1903,11 +1791,11 @@ pub mod summa { 84, 97, 6, - 66, + 13, 144, 97, - 19, - 131, + 23, + 1, 86, 91, 128, @@ -1947,18 +1835,18 @@ pub mod summa { 84, 97, 6, - 110, + 57, 144, 97, - 19, - 131, + 23, + 1, 86, 91, 128, 21, 97, 6, - 187, + 134, 87, 128, 96, @@ -1966,7 +1854,7 @@ pub mod summa { 16, 97, 6, - 144, + 91, 87, 97, 1, @@ -1985,7 +1873,7 @@ pub mod summa { 145, 97, 6, - 187, + 134, 86, 91, 130, @@ -2019,7 +1907,7 @@ pub mod summa { 17, 97, 6, - 158, + 105, 87, 130, 144, @@ -2045,11 +1933,11 @@ pub mod summa { 84, 97, 6, - 208, + 155, 144, 97, - 19, - 131, + 23, + 1, 86, 91, 128, @@ -2089,26 +1977,26 @@ pub mod summa { 84, 97, 6, - 252, + 199, 144, 97, - 19, - 131, + 23, + 1, 86, 91, 128, 21, 97, 7, - 73, + 20, 87, 128, 96, 31, 16, 97, - 7, - 30, + 6, + 233, 87, 97, 1, @@ -2127,7 +2015,7 @@ pub mod summa { 145, 97, 7, - 73, + 20, 86, 91, 130, @@ -2160,8 +2048,8 @@ pub mod summa { 131, 17, 97, - 7, - 44, + 6, + 247, 87, 130, 144, @@ -2185,10 +2073,10 @@ pub mod summa { 91, 97, 7, - 91, + 38, 97, - 11, - 126, + 14, + 250, 86, 91, 96, @@ -2201,7 +2089,7 @@ pub mod summa { 21, 97, 9, - 194, + 132, 87, 96, 0, @@ -2213,14 +2101,14 @@ pub mod summa { 16, 97, 7, - 123, + 70, 87, 97, 7, - 123, + 70, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -2243,12 +2131,12 @@ pub mod summa { 1, 97, 7, - 151, + 98, 145, 144, 97, - 19, - 189, + 23, + 59, 86, 91, 96, @@ -2294,8 +2182,8 @@ pub mod summa { 128, 21, 97, - 8, - 13, + 7, + 216, 87, 96, 64, @@ -2366,56 +2254,27 @@ pub mod summa { 1, 97, 2, - 34, + 12, 86, 91, - 97, - 8, - 24, - 131, 96, 1, - 97, - 18, - 49, - 86, - 91, - 96, - 0, - 131, + 132, + 132, 129, - 82, - 96, - 2, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 85, - 131, 81, - 96, - 1, - 144, - 133, - 144, - 133, - 144, 129, 16, 97, - 8, - 62, + 7, + 236, 87, 97, - 8, - 62, + 7, + 236, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -2460,12 +2319,12 @@ pub mod summa { 144, 97, 8, - 112, + 30, 144, 130, 97, - 20, - 31, + 23, + 166, 86, 91, 80, @@ -2481,12 +2340,12 @@ pub mod summa { 144, 97, 8, - 133, + 51, 144, 130, 97, - 20, - 31, + 23, + 166, 86, 91, 80, @@ -2502,12 +2361,12 @@ pub mod summa { 144, 97, 8, - 154, + 72, 144, 130, 97, - 20, - 31, + 23, + 166, 86, 91, 80, @@ -2523,33 +2382,53 @@ pub mod summa { 144, 97, 8, - 175, + 93, 144, 130, 97, - 20, - 31, + 23, + 166, 86, 91, 80, 80, + 96, + 1, + 84, + 96, + 0, + 132, + 129, + 82, + 96, + 2, + 96, + 32, + 82, + 96, + 64, + 144, + 32, + 85, 80, 131, - 131, - 129, 81, + 132, + 144, + 132, + 144, 129, 16, 97, 8, - 196, + 134, 87, 97, 8, - 196, + 134, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -2572,8 +2451,8 @@ pub mod summa { 128, 21, 97, - 9, - 0, + 8, + 194, 87, 80, 131, @@ -2584,14 +2463,14 @@ pub mod summa { 16, 97, 8, - 238, + 176, 87, 97, 8, - 238, + 176, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -2615,8 +2494,8 @@ pub mod summa { 128, 21, 97, - 9, - 43, + 8, + 237, 87, 80, 131, @@ -2626,15 +2505,15 @@ pub mod summa { 129, 16, 97, - 9, - 25, + 8, + 219, 87, 97, - 9, - 25, + 8, + 219, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -2659,7 +2538,7 @@ pub mod summa { 21, 97, 9, - 86, + 24, 87, 80, 131, @@ -2670,14 +2549,14 @@ pub mod summa { 16, 97, 9, - 68, + 6, 87, 97, 9, - 68, + 6, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -2700,7 +2579,7 @@ pub mod summa { 91, 97, 9, - 173, + 111, 87, 96, 64, @@ -2782,7 +2661,7 @@ pub mod summa { 1, 97, 2, - 34, + 12, 86, 91, 80, @@ -2791,11 +2670,11 @@ pub mod summa { 128, 97, 9, - 186, + 124, 144, 97, - 18, - 90, + 24, + 102, 86, 91, 145, @@ -2803,7 +2682,7 @@ pub mod summa { 80, 97, 7, - 94, + 41, 86, 91, 80, @@ -2846,12 +2725,12 @@ pub mod summa { 81, 97, 9, - 242, + 180, 145, 144, 97, - 20, - 223, + 24, + 127, 86, 91, 96, @@ -2875,15 +2754,15 @@ pub mod summa { 129, 16, 97, - 10, - 18, + 9, + 212, 87, 97, - 10, - 18, + 9, + 212, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -2913,11 +2792,14 @@ pub mod summa { 96, 0, 32, + 96, + 0, + 1, 84, 20, 97, 10, - 110, + 51, 87, 96, 64, @@ -2975,7 +2857,7 @@ pub mod summa { 1, 97, 2, - 34, + 12, 86, 91, 96, @@ -3042,7 +2924,7 @@ pub mod summa { 144, 97, 10, - 188, + 129, 144, 134, 144, @@ -3052,8 +2934,8 @@ pub mod summa { 4, 1, 97, - 19, - 10, + 25, + 28, 86, 91, 96, @@ -3073,7 +2955,7 @@ pub mod summa { 21, 97, 10, - 217, + 158, 87, 61, 96, @@ -3113,12 +2995,12 @@ pub mod summa { 144, 97, 10, - 253, + 194, 145, 144, 97, - 19, - 97, + 25, + 65, 86, 91, 148, @@ -3130,26 +3012,20 @@ pub mod summa { 86, 91, 97, - 11, - 13, + 10, + 210, 97, - 11, - 126, + 14, + 250, 86, 91, + 131, 96, - 1, - 96, - 1, - 96, - 160, - 27, + 0, 3, - 129, - 22, 97, 11, - 114, + 21, 87, 96, 64, @@ -3171,102 +3047,53 @@ pub mod summa { 1, 82, 96, - 38, + 16, 96, 36, 130, 1, 82, - 127, - 79, - 119, - 110, - 97, - 98, - 108, - 101, - 58, - 32, - 110, - 101, - 119, - 32, - 111, - 119, - 110, - 101, - 114, - 32, - 105, - 115, - 32, - 116, - 104, - 101, - 32, - 122, - 101, - 114, 111, - 32, - 97, + 18, + 91, + 157, + 152, + 91, + 26, + 89, + 8, + 19, + 84, + 213, + 8, + 28, + 155, + 219, + 221, 96, - 68, 130, - 1, - 82, - 101, - 100, - 100, - 114, - 101, - 115, - 115, - 96, - 208, 27, 96, - 100, + 68, 130, 1, 82, 96, - 132, + 100, 1, 97, 2, - 34, + 12, 86, 91, - 97, - 11, - 123, 129, - 97, - 11, - 216, - 86, - 91, - 80, - 86, - 91, - 96, - 0, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 51, + 81, + 131, + 81, 20, 97, - 4, - 241, + 11, + 120, 87, 96, 64, @@ -3286,45 +3113,45 @@ pub mod summa { 4, 130, 1, - 129, - 144, 82, 96, + 41, + 96, 36, 130, 1, 82, 127, - 79, - 119, - 110, - 97, - 98, - 108, - 101, - 58, + 82, + 111, + 111, + 116, 32, - 99, 97, - 108, - 108, + 115, + 115, 101, - 114, + 116, 32, - 105, + 115, + 117, + 109, 115, 32, + 97, 110, - 111, - 116, + 100, 32, - 116, - 104, + 97, + 115, + 115, 101, + 116, 32, - 111, - 119, 110, + 117, + 109, + 98, 101, 114, 96, @@ -3332,148 +3159,118 @@ pub mod summa { 130, 1, 82, + 104, + 4, + 13, + 173, + 46, + 109, + 172, + 46, + 140, + 109, + 96, + 187, + 27, 96, 100, + 130, + 1, + 82, + 96, + 132, 1, 97, 2, - 34, + 12, 86, 91, 96, 0, + 130, + 81, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 129, + 17, + 21, + 97, + 11, + 148, + 87, + 97, + 11, + 148, + 97, + 17, + 243, + 86, + 91, + 96, + 64, + 81, + 144, + 128, + 130, + 82, 128, - 84, 96, - 1, + 32, + 2, 96, + 32, + 1, + 130, 1, 96, - 160, - 27, - 3, - 131, + 64, + 82, + 128, + 21, + 97, + 11, + 199, + 87, 129, - 22, 96, + 32, 1, + 91, 96, - 1, 96, - 160, - 27, - 3, - 25, - 131, - 22, 129, - 23, - 132, - 85, + 82, 96, - 64, - 81, - 145, + 32, + 1, 144, - 146, - 22, - 146, - 131, - 145, - 127, - 139, - 224, - 7, - 156, - 83, - 22, - 89, - 20, - 19, - 68, - 205, - 31, - 208, - 164, - 242, - 132, - 25, - 73, - 127, - 151, - 34, - 163, - 218, - 175, - 227, - 180, - 24, - 111, - 107, - 100, - 87, - 224, - 145, - 144, - 163, - 80, - 80, - 86, - 91, - 96, - 0, 96, - 32, - 130, - 132, + 1, + 144, 3, - 18, - 21, + 144, + 129, 97, - 12, - 58, + 11, + 178, 87, - 96, - 0, - 128, - 253, + 144, + 80, 91, 80, - 53, - 145, 144, 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, 96, 0, - 253, - 91, - 96, - 64, + 131, 81, - 96, - 96, - 129, - 1, 103, 255, 255, @@ -3485,1503 +3282,1566 @@ pub mod summa { 255, 129, 17, - 130, - 130, - 16, - 23, 21, 97, - 12, - 122, + 11, + 230, 87, 97, - 12, - 122, + 11, + 230, 97, - 12, - 65, + 17, + 243, 86, 91, 96, 64, - 82, + 81, 144, - 86, - 91, + 128, + 130, + 82, + 128, 96, - 64, - 81, + 32, + 2, 96, - 128, - 129, + 32, 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, 130, - 16, - 23, + 1, + 96, + 64, + 82, + 128, 21, 97, 12, - 122, + 25, 87, - 97, - 12, - 122, - 97, - 12, - 65, - 86, + 129, + 96, + 32, + 1, 91, 96, - 64, - 81, 96, - 31, - 130, + 129, + 82, + 96, + 32, 1, + 144, 96, - 31, - 25, - 22, - 129, 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, + 144, + 3, + 144, 129, - 17, - 130, - 130, - 16, - 23, - 21, 97, 12, - 204, + 4, 87, - 97, - 12, - 204, - 97, - 12, - 65, - 86, - 91, - 96, - 64, - 82, - 145, 144, 80, - 86, 91, + 80, + 144, + 80, 96, 0, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 130, - 17, + 91, + 132, + 81, + 129, + 16, 21, 97, - 12, - 238, + 13, + 182, 87, + 132, + 129, + 129, + 81, + 129, + 16, 97, 12, - 238, + 58, + 87, 97, 12, - 65, + 58, + 97, + 22, + 235, 86, 91, - 80, 96, - 5, - 27, + 32, + 2, 96, 32, 1, - 144, - 86, - 91, - 96, - 0, - 130, + 1, + 81, 96, - 31, - 131, + 32, 1, - 18, - 97, - 13, - 9, - 87, + 81, + 81, 96, 0, + 20, + 21, 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, 21, 97, - 13, - 35, + 12, + 118, 87, + 80, + 132, + 129, + 129, + 81, + 129, + 16, 97, - 13, - 35, + 12, + 100, + 87, 97, 12, - 65, - 86, - 91, + 100, 97, - 13, - 54, - 96, - 31, - 130, - 1, - 96, - 31, - 25, 22, - 96, - 32, - 1, - 97, - 12, - 163, + 235, 86, 91, - 129, - 129, - 82, - 132, 96, 32, - 131, - 134, - 1, - 1, - 17, - 21, - 97, - 13, - 75, - 87, - 96, - 0, - 128, - 253, - 91, - 129, + 2, 96, 32, - 133, 1, - 96, - 32, - 131, 1, - 55, + 81, 96, 0, - 145, - 129, - 1, - 96, - 32, 1, - 145, - 144, - 145, - 82, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, + 81, + 81, 96, 0, - 128, - 96, - 128, - 133, - 135, - 3, - 18, + 20, 21, + 91, 97, - 13, - 126, + 12, + 178, 87, 96, - 0, - 128, - 253, - 91, - 132, - 53, - 147, - 80, + 64, + 81, + 98, + 70, + 27, + 205, + 96, + 229, + 27, + 129, + 82, 96, 32, - 133, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, + 96, + 4, 130, - 17, - 21, - 97, + 1, + 82, + 96, 13, - 157, - 87, 96, - 0, - 128, - 253, - 91, - 129, - 135, + 36, + 130, 1, - 145, - 80, - 135, + 82, + 108, + 18, + 91, + 157, + 152, + 91, + 26, + 89, + 8, + 24, + 92, + 220, + 217, + 93, 96, - 31, - 131, + 154, + 27, + 96, + 68, + 130, 1, - 18, - 97, - 13, - 177, - 87, + 82, 96, - 0, - 128, - 253, - 91, - 97, - 13, - 195, - 97, - 13, - 190, - 131, - 53, + 100, + 1, 97, + 2, 12, - 212, 86, 91, + 133, + 129, + 129, + 81, + 129, + 16, 97, 12, - 163, + 196, + 87, + 97, + 12, + 196, + 97, + 22, + 235, 86, 91, - 130, - 53, - 128, - 130, - 82, 96, 32, - 128, - 131, - 1, - 146, - 145, + 2, 96, - 5, - 27, - 133, + 32, 1, 1, - 138, - 129, - 17, - 21, + 81, + 96, + 0, + 3, 97, 13, - 226, + 45, 87, 96, - 0, - 128, - 253, - 91, + 64, + 81, + 98, + 70, + 27, + 205, + 96, + 229, + 27, + 129, + 82, 96, 32, - 133, + 96, + 4, + 130, + 1, + 82, + 96, + 41, + 96, + 36, + 130, + 1, + 82, + 127, + 65, + 108, + 108, + 32, + 114, + 111, + 111, + 116, + 32, + 115, + 117, + 109, + 115, + 32, + 115, + 104, + 111, + 117, + 108, + 100, + 32, + 98, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 101, + 114, + 32, + 96, + 68, + 130, + 1, + 82, + 104, + 116, + 104, + 97, + 110, + 32, + 122, + 101, + 114, + 111, + 96, + 184, + 27, + 96, + 100, + 130, + 1, + 82, + 96, + 132, 1, + 97, + 2, + 12, + 86, 91, + 132, 129, 129, + 81, + 129, 16, - 21, 97, - 14, - 132, + 13, + 63, 87, - 132, - 129, - 53, - 17, - 21, 97, 13, - 253, - 87, - 96, - 0, - 128, - 253, + 63, + 97, + 22, + 235, + 86, 91, - 128, - 53, - 134, - 1, 96, + 32, + 2, 96, - 129, - 142, - 3, + 32, + 1, + 1, + 81, 96, - 31, - 25, + 0, 1, - 18, - 21, + 81, + 131, + 130, + 129, + 81, + 129, + 16, 97, - 14, - 21, + 13, + 93, 87, - 96, - 0, - 128, - 253, - 91, 97, - 14, - 29, + 13, + 93, 97, - 12, - 87, + 22, + 235, 86, 91, 96, 32, - 130, + 2, + 96, + 32, + 1, 1, - 53, - 135, 129, - 17, - 21, + 144, + 82, + 80, + 132, + 129, + 129, + 81, + 129, + 16, 97, - 14, - 47, + 13, + 122, 87, - 96, - 0, - 128, - 253, - 91, 97, - 14, - 62, - 143, + 13, + 122, + 97, + 22, + 235, + 86, + 91, + 96, + 32, + 2, 96, 32, - 131, - 134, 1, 1, - 97, - 12, - 248, - 86, - 91, - 130, - 82, - 80, + 81, 96, - 64, - 130, + 32, 1, - 53, - 135, + 81, + 130, + 130, 129, - 17, - 21, + 81, + 129, + 16, 97, - 14, - 83, + 13, + 152, 87, - 96, - 0, - 128, - 253, - 91, 97, - 14, - 98, - 143, - 96, - 32, - 131, - 134, - 1, - 1, + 13, + 152, 97, - 12, - 248, + 22, + 235, 86, 91, 96, 32, - 131, - 129, + 2, + 96, + 32, 1, - 145, + 1, + 129, 144, - 145, 82, - 96, - 96, - 147, + 80, + 128, + 128, + 97, + 13, + 174, 144, - 147, - 1, - 53, - 96, - 64, - 131, - 1, - 82, - 80, - 133, - 82, - 147, - 132, - 1, - 147, - 1, 97, - 13, - 231, + 24, + 102, 86, 91, - 80, - 144, - 150, - 80, - 80, - 80, - 96, - 64, - 135, - 1, - 53, 145, 80, - 128, - 130, - 17, - 21, - 97, - 14, - 158, - 87, - 96, - 0, - 128, - 253, - 91, 80, 97, - 14, - 171, - 135, - 130, - 136, - 1, - 97, 12, - 248, + 31, 86, 91, - 148, - 151, - 147, - 150, 80, - 147, - 148, 96, + 64, + 128, + 81, 96, + 128, + 129, 1, - 53, - 147, - 80, - 80, - 80, - 86, - 91, + 130, + 82, + 135, + 129, + 82, 96, - 0, + 32, + 128, + 130, + 1, + 136, + 129, + 82, 130, + 132, + 1, + 134, + 144, + 82, + 96, 96, - 31, 131, 1, - 18, - 97, - 14, - 205, - 87, + 133, + 144, + 82, 96, 0, - 128, - 253, - 91, + 135, 129, - 53, + 82, 96, - 32, - 97, - 14, - 221, - 97, - 13, - 190, + 3, 131, - 97, - 12, - 212, - 86, - 91, + 82, + 147, + 144, + 147, + 32, 130, + 81, 129, - 82, - 96, - 5, + 85, 146, - 144, + 81, + 128, + 81, 146, - 27, - 132, + 147, + 146, + 97, + 14, 1, - 129, + 146, + 96, 1, - 145, - 129, - 129, + 133, + 1, + 146, 1, 144, - 134, - 132, - 17, - 21, 97, - 14, - 252, - 87, - 96, - 0, - 128, - 253, + 15, + 164, + 86, 91, + 80, + 96, + 64, 130, - 134, 1, - 91, - 132, - 129, - 16, - 21, - 97, - 15, - 23, - 87, + 81, 128, - 53, - 131, - 82, + 81, + 97, + 14, + 29, 145, - 131, + 96, + 2, + 132, 1, 145, - 131, + 96, + 32, + 144, + 145, 1, + 144, 97, 15, - 0, + 239, 86, 91, 80, - 150, - 149, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, 96, - 0, + 96, + 130, + 1, + 81, 128, + 81, + 97, + 14, + 57, + 145, 96, - 64, - 131, - 133, 3, - 18, - 21, + 132, + 1, + 145, + 96, + 32, + 144, + 145, + 1, + 144, 97, 15, - 53, - 87, - 96, - 0, - 128, - 253, + 239, + 86, 91, + 80, + 144, + 80, + 80, 130, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, + 127, + 136, + 191, + 199, + 56, + 156, + 184, + 49, + 234, + 2, + 8, 255, + 16, + 109, + 166, + 245, + 201, + 248, 128, - 130, - 17, - 21, - 97, - 15, - 77, - 87, + 54, + 186, + 8, + 79, + 30, + 176, + 8, + 210, + 120, + 141, + 61, + 69, + 153, + 141, + 135, + 135, + 135, 96, - 0, - 128, - 253, - 91, + 64, + 81, 97, - 15, - 89, - 134, - 131, - 135, - 1, + 14, + 113, + 147, + 146, + 145, + 144, 97, - 12, - 248, + 25, + 99, 86, 91, - 147, - 80, 96, - 32, - 133, - 1, - 53, + 64, + 81, + 128, 145, + 3, + 144, + 162, 80, - 128, - 130, - 17, - 21, - 97, - 15, - 111, - 87, - 96, - 0, - 128, - 253, - 91, 80, - 97, - 15, - 124, - 133, - 130, - 134, - 1, - 97, - 14, - 188, - 86, - 91, - 145, 80, 80, - 146, 80, - 146, - 144, 80, 86, 91, + 97, + 14, + 137, + 97, + 14, + 250, + 86, + 91, 96, - 0, - 129, - 81, - 128, - 132, - 82, + 1, 96, - 0, - 91, - 129, + 1, + 96, + 160, + 27, + 3, 129, - 16, - 21, + 22, 97, - 15, - 172, + 14, + 238, 87, 96, - 32, - 129, - 133, - 1, - 129, - 1, + 64, 81, - 134, - 131, - 1, + 98, + 70, + 27, + 205, + 96, + 229, + 27, + 129, + 82, + 96, + 32, + 96, + 4, 130, 1, 82, - 1, - 97, - 15, - 144, - 86, - 91, - 80, 96, - 0, + 38, 96, - 32, + 36, 130, - 134, - 1, 1, 82, - 96, + 127, + 79, + 119, + 110, + 97, + 98, + 108, + 101, + 58, 32, + 110, + 101, + 119, + 32, + 111, + 119, + 110, + 101, + 114, + 32, + 105, + 115, + 32, + 116, + 104, + 101, + 32, + 122, + 101, + 114, + 111, + 32, + 97, 96, - 31, - 25, - 96, - 31, - 131, - 1, - 22, - 133, - 1, + 68, + 130, 1, - 145, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 128, - 129, 82, + 101, + 100, + 100, + 114, + 101, + 115, + 115, 96, - 0, - 97, - 15, - 223, + 208, + 27, 96, - 128, - 131, - 1, - 135, - 97, - 15, - 134, - 86, - 91, + 100, 130, - 129, - 3, + 1, + 82, 96, - 32, 132, 1, - 82, 97, - 15, - 241, + 2, + 12, + 86, + 91, + 97, + 14, + 247, 129, - 135, 97, 15, - 134, + 84, 86, 91, - 144, 80, - 130, - 129, + 86, + 91, + 96, + 0, + 84, + 96, + 1, + 96, + 1, + 96, + 160, + 27, 3, + 22, + 51, + 20, + 97, + 4, + 188, + 87, 96, 64, - 132, + 81, + 98, + 70, + 27, + 205, + 96, + 229, + 27, + 129, + 82, + 96, + 32, + 96, + 4, + 130, + 1, + 129, + 144, + 82, + 96, + 36, + 130, 1, 82, + 127, + 79, + 119, + 110, 97, - 16, - 5, - 129, - 134, + 98, + 108, + 101, + 58, + 32, + 99, 97, - 15, - 134, + 108, + 108, + 101, + 114, + 32, + 105, + 115, + 32, + 110, + 111, + 116, + 32, + 116, + 104, + 101, + 32, + 111, + 119, + 110, + 101, + 114, + 96, + 68, + 130, + 1, + 82, + 96, + 100, + 1, + 97, + 2, + 12, 86, 91, - 144, - 80, - 130, - 129, + 96, + 0, + 128, + 84, + 96, + 1, + 96, + 1, + 96, + 160, + 27, 3, + 131, + 129, + 22, 96, + 1, 96, - 132, 1, - 82, - 97, - 16, + 96, + 160, + 27, + 3, 25, + 131, + 22, 129, - 133, - 97, - 15, - 134, - 86, - 91, + 23, + 132, + 85, + 96, + 64, + 81, + 145, + 144, + 146, + 22, + 146, + 131, + 145, + 127, + 139, + 224, + 7, + 156, + 83, + 22, + 89, + 20, + 19, + 68, + 205, + 31, + 208, + 164, + 242, + 132, + 25, + 73, + 127, 151, - 150, - 80, - 80, - 80, - 80, - 80, + 34, + 163, + 218, + 175, + 227, + 180, + 24, + 111, + 107, + 100, + 87, + 224, + 145, + 144, + 163, 80, 80, 86, 91, + 130, + 128, + 84, + 130, + 130, + 85, + 144, 96, 0, + 82, 96, 32, - 128, - 131, - 133, - 3, - 18, + 96, + 0, + 32, + 144, + 129, + 1, + 146, + 130, 21, 97, - 16, - 55, + 15, + 223, 87, + 145, 96, - 0, - 128, - 253, - 91, + 32, + 2, 130, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, + 1, + 91, 130, + 129, 17, 21, 97, - 16, - 79, + 15, + 223, 87, + 130, + 81, + 130, + 85, + 145, 96, - 0, - 128, - 253, - 91, - 129, - 133, + 32, 1, 145, - 80, - 133, + 144, 96, - 31, - 131, 1, - 18, + 1, + 144, 97, - 16, - 99, - 87, - 96, - 0, - 128, - 253, + 15, + 196, + 86, 91, - 129, - 53, - 97, - 16, - 113, + 80, 97, - 13, - 190, - 130, + 15, + 235, + 146, + 145, + 80, 97, - 12, - 212, + 16, + 65, 86, 91, - 129, - 129, + 80, + 144, + 86, + 91, + 130, + 128, + 84, + 130, + 130, + 85, + 144, + 96, + 0, 82, 96, - 5, - 145, - 144, - 145, - 27, - 131, - 1, - 132, - 1, + 32, + 96, + 0, + 32, 144, - 132, 129, 1, - 144, - 136, - 131, - 17, + 146, + 130, 21, 97, 16, - 144, + 53, 87, + 145, 96, - 0, - 128, - 253, - 91, - 133, - 133, + 32, + 2, + 130, 1, 91, - 131, - 129, - 16, - 21, - 97, - 17, - 113, - 87, - 128, - 53, - 133, + 130, 129, 17, 21, 97, 16, - 171, + 53, 87, - 96, - 0, - 128, - 253, + 130, + 81, + 130, + 144, + 97, + 16, + 37, + 144, + 130, + 97, + 23, + 166, + 86, 91, - 134, - 1, + 80, + 145, 96, - 128, - 129, - 140, - 3, + 32, + 1, + 145, + 144, 96, - 31, - 25, 1, - 18, - 21, + 1, + 144, 97, 16, - 194, - 87, - 96, - 0, - 128, - 129, - 253, + 15, + 86, 91, + 80, 97, - 16, - 202, + 15, + 235, + 146, + 145, + 80, 97, - 12, - 128, + 16, + 86, 86, 91, - 136, + 91, + 128, 130, - 1, - 53, - 135, - 129, 17, 21, 97, - 16, - 220, + 15, + 235, 87, 96, 0, - 128, 129, - 253, - 91, - 97, - 16, - 234, - 141, - 139, - 131, - 134, + 85, + 96, 1, 1, 97, - 12, - 248, + 16, + 66, 86, 91, - 130, - 82, - 80, - 96, - 64, 128, - 131, - 1, - 53, - 136, - 129, + 130, 17, 21, 97, - 17, - 1, + 15, + 235, 87, 96, 0, - 128, - 129, - 253, - 91, 97, - 17, - 15, - 142, - 140, - 131, - 135, + 16, + 106, + 130, + 130, + 97, + 16, + 115, + 86, + 91, + 80, + 96, 1, 1, 97, - 12, - 248, + 16, + 86, 86, 91, - 139, - 132, - 1, - 82, 80, - 96, - 96, 128, - 132, - 1, - 53, - 137, - 129, - 17, - 21, + 84, 97, - 17, - 40, - 87, + 16, + 127, + 144, + 97, + 23, + 1, + 86, + 91, 96, 0, + 130, + 85, 128, - 129, - 253, - 91, + 96, + 31, + 16, 97, - 17, - 54, + 16, 143, - 141, - 131, - 136, - 1, - 1, - 97, - 12, - 248, + 87, + 80, + 80, 86, 91, - 131, - 133, + 96, + 31, 1, + 96, + 32, + 144, + 4, + 144, + 96, + 0, 82, - 80, 96, - 128, - 132, - 1, - 53, - 145, - 80, - 136, - 130, - 17, - 21, - 97, - 17, - 80, - 87, + 32, 96, 0, - 128, + 32, + 144, 129, - 253, - 91, - 97, - 17, - 94, - 142, - 140, - 132, - 135, - 1, 1, - 97, - 12, - 248, - 86, - 91, 144, - 131, - 1, - 82, - 80, - 132, - 82, - 80, - 145, - 134, - 1, + 97, + 14, + 247, 145, - 134, - 1, + 144, 97, 16, - 148, - 86, - 91, - 80, - 152, - 151, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, + 65, 86, 91, 96, 0, - 128, - 96, - 0, - 96, 96, + 32, + 130, 132, - 134, 3, 18, 21, 97, - 17, - 147, + 16, + 191, 87, 96, 0, 128, 253, 91, - 131, + 80, 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 17, - 171, - 87, + 145, + 144, + 80, + 86, + 91, 96, 0, - 128, - 253, 91, + 131, + 129, + 16, + 21, 97, - 17, - 183, - 135, + 16, + 225, + 87, + 129, + 129, + 1, + 81, 131, - 136, + 130, + 1, + 82, + 96, + 32, 1, 97, - 12, - 248, + 16, + 201, 86, 91, - 148, + 80, 80, 96, - 32, - 134, - 1, - 53, + 0, 145, - 80, - 128, - 130, - 17, - 21, - 97, - 17, - 205, - 87, + 1, + 82, + 86, + 91, 96, 0, + 129, + 81, 128, - 253, - 91, - 80, + 132, + 82, 97, 17, - 218, + 2, + 129, + 96, + 32, + 134, + 1, + 96, + 32, 134, - 130, - 135, 1, 97, - 14, - 188, + 16, + 198, 86, 91, - 146, - 80, - 80, 96, - 64, - 132, + 31, 1, - 53, + 96, + 31, + 25, + 22, + 146, 144, - 80, 146, - 80, + 1, + 96, + 32, + 1, 146, + 145, + 80, 80, - 146, 86, 91, 96, 0, + 129, + 81, 96, - 32, - 130, + 128, 132, - 3, - 18, - 21, + 82, 97, 17, - 253, - 87, + 43, 96, - 0, 128, - 253, + 133, + 1, + 130, + 97, + 16, + 234, + 86, 91, - 129, - 53, + 144, + 80, 96, + 32, + 131, 1, + 81, + 132, + 130, + 3, 96, + 32, + 134, 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, + 82, 97, - 18, - 20, - 87, - 96, - 0, - 128, - 253, + 17, + 68, + 130, + 130, + 97, + 16, + 234, + 86, 91, - 147, - 146, + 145, + 80, + 80, + 96, + 64, + 131, + 1, + 81, + 132, + 130, + 3, + 96, + 64, + 134, + 1, + 82, + 97, + 17, + 94, + 130, + 130, + 97, + 16, + 234, + 86, + 91, + 145, + 80, + 80, + 96, + 96, + 131, + 1, + 81, + 132, + 130, + 3, + 96, + 96, + 134, + 1, + 82, + 97, + 17, + 120, + 130, + 130, + 97, + 16, + 234, + 86, + 91, + 149, + 148, + 80, + 80, 80, 80, 80, 86, 91, - 99, - 78, - 72, - 123, - 113, 96, - 224, - 27, + 32, + 129, + 82, 96, 0, - 82, + 97, + 17, + 148, 96, + 32, + 131, + 1, + 132, + 97, 17, + 22, + 86, + 91, + 147, + 146, + 80, + 80, + 80, + 86, + 91, 96, - 4, + 128, + 129, 82, 96, - 36, - 96, 0, - 253, - 91, + 97, + 17, + 174, + 96, 128, + 131, + 1, + 135, + 97, + 16, + 234, + 86, + 91, 130, + 129, + 3, + 96, + 32, + 132, 1, - 128, + 82, + 97, + 17, + 192, + 129, + 135, + 97, + 16, + 234, + 86, + 91, + 144, + 80, 130, + 129, + 3, + 96, + 64, + 132, + 1, + 82, + 97, 17, - 21, + 212, + 129, + 134, 97, - 4, - 217, - 87, + 16, + 234, + 86, + 91, + 144, + 80, + 130, + 129, + 3, + 96, + 96, + 132, + 1, + 82, 97, - 4, - 217, + 17, + 232, + 129, + 133, 97, - 18, - 27, + 16, + 234, + 86, + 91, + 151, + 150, + 80, + 80, + 80, + 80, + 80, + 80, + 80, 86, 91, 99, @@ -4996,7 +4856,7 @@ pub mod summa { 0, 82, 96, - 50, + 65, 96, 4, 82, @@ -5007,263 +4867,273 @@ pub mod summa { 253, 91, 96, - 0, + 64, + 81, 96, + 128, + 129, 1, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 129, + 17, 130, - 1, + 130, + 16, + 23, + 21, 97, 18, - 108, + 44, 87, 97, 18, - 108, + 44, 97, - 18, - 27, + 17, + 243, 86, 91, - 80, 96, - 1, - 1, + 64, + 82, 144, 86, 91, 96, - 0, - 96, 64, 128, - 131, - 1, - 133, - 132, - 82, - 96, - 32, - 130, + 81, + 144, 129, - 134, 1, - 82, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, - 134, + 17, + 130, + 130, + 16, + 23, + 21, + 97, + 18, + 44, + 87, + 97, + 18, + 44, + 97, + 17, + 243, + 86, + 91, + 96, + 64, 81, - 128, - 132, - 82, 96, + 31, + 130, + 1, 96, - 147, - 80, - 131, - 135, - 1, - 145, - 80, - 131, + 31, + 25, + 22, 129, - 96, - 5, - 27, - 136, - 1, 1, - 131, - 137, - 1, - 96, - 0, - 91, - 131, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, + 17, + 130, + 130, 16, + 23, 21, 97, 18, - 250, + 126, 87, - 137, - 131, - 3, - 96, - 95, - 25, - 1, - 133, - 82, - 129, - 81, - 128, - 81, - 136, - 133, - 82, 97, 18, - 197, - 137, - 134, - 1, - 130, + 126, 97, - 15, - 134, + 17, + 243, 86, 91, + 96, + 64, + 82, + 145, 144, 80, - 135, - 130, - 1, - 81, - 133, + 86, + 91, + 96, + 0, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 130, - 3, - 137, - 135, - 1, - 82, + 17, + 21, 97, 18, - 220, - 130, - 130, + 160, + 87, 97, - 15, - 134, + 18, + 160, + 97, + 17, + 243, 86, 91, - 146, - 139, - 1, - 81, - 149, - 139, - 1, - 149, - 144, - 149, - 82, - 80, - 148, - 134, - 1, - 148, - 146, 80, - 144, - 133, + 96, + 5, + 27, + 96, + 32, 1, 144, + 86, + 91, 96, + 0, + 130, + 96, + 31, + 131, 1, - 1, + 18, 97, 18, - 161, - 86, + 187, + 87, + 96, + 0, + 128, + 253, 91, - 80, - 144, - 154, - 153, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, + 129, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 129, + 17, + 21, + 97, + 18, + 213, + 87, + 97, + 18, + 213, + 97, + 17, + 243, 86, 91, + 97, + 18, + 232, 96, - 64, - 128, - 130, - 82, - 131, - 81, - 144, + 31, 130, 1, - 129, - 144, - 82, 96, - 0, - 144, + 31, + 25, + 22, 96, 32, - 144, - 96, - 96, - 132, - 1, - 144, - 130, - 135, 1, - 132, + 97, + 18, + 85, + 86, 91, - 130, 129, - 16, - 21, - 97, - 19, - 67, - 87, 129, - 81, - 132, 82, - 146, - 132, - 1, - 146, - 144, 132, - 1, - 144, 96, + 32, + 131, + 134, 1, 1, + 17, + 21, 97, - 19, - 39, - 86, + 18, + 253, + 87, + 96, + 0, + 128, + 253, 91, - 80, - 80, - 80, - 131, 129, - 3, - 130, + 96, + 32, 133, 1, - 82, - 97, - 19, - 87, + 96, + 32, + 131, + 1, + 55, + 96, + 0, + 145, 129, - 134, - 97, - 15, - 134, - 86, - 91, - 150, - 149, - 80, - 80, - 80, + 1, + 96, + 32, + 1, + 145, + 144, + 145, + 82, + 147, + 146, 80, 80, 80, @@ -5273,729 +5143,736 @@ pub mod summa { 0, 96, 32, - 130, - 132, + 128, + 131, + 133, 3, 18, 21, 97, 19, - 115, + 45, 87, 96, 0, 128, 253, 91, - 129, - 81, + 130, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 128, + 130, + 17, 21, - 21, - 129, - 20, 97, - 18, - 20, + 19, + 69, 87, 96, 0, 128, 253, 91, - 96, - 1, - 129, 129, - 28, - 144, - 130, - 22, - 128, - 97, - 19, - 151, - 87, - 96, - 127, - 130, - 22, + 133, + 1, 145, 80, - 91, + 133, 96, - 32, - 130, - 16, - 129, - 3, + 31, + 131, + 1, + 18, 97, 19, - 183, + 89, 87, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 34, - 96, - 4, - 82, - 96, - 36, 96, 0, + 128, 253, 91, - 80, - 145, - 144, - 80, - 86, - 91, - 96, - 32, 129, - 82, - 96, - 0, + 53, 97, - 4, - 214, - 96, - 32, - 131, - 1, - 132, + 19, + 108, 97, - 15, + 19, + 103, + 130, + 97, + 18, 134, 86, 91, - 96, - 31, - 130, - 17, - 21, 97, - 20, - 26, - 87, - 96, - 0, + 18, + 85, + 86, + 91, 129, 129, 82, 96, - 32, - 129, - 32, - 96, - 31, - 133, - 1, - 96, 5, - 28, + 145, + 144, + 145, + 27, + 131, + 1, + 132, + 1, + 144, + 132, 129, 1, - 96, - 32, - 134, - 16, + 144, + 136, + 131, + 17, 21, 97, 19, - 247, + 139, 87, - 80, + 96, + 0, 128, + 253, 91, - 96, - 31, + 133, 133, 1, - 96, - 5, - 28, - 130, - 1, - 145, - 80, 91, - 129, + 131, 129, 16, 21, 97, 20, - 22, + 108, 87, - 130, + 128, + 53, + 133, 129, - 85, + 17, + 21, + 97, + 19, + 166, + 87, 96, + 0, + 128, + 253, + 91, + 134, 1, + 96, + 128, + 129, + 140, + 3, + 96, + 31, + 25, 1, + 18, + 21, 97, - 20, - 3, - 86, - 91, - 80, - 80, - 80, + 19, + 189, + 87, + 96, + 0, + 128, + 129, + 253, 91, - 80, - 80, - 80, + 97, + 19, + 197, + 97, + 18, + 9, 86, 91, - 129, - 81, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, + 136, + 130, + 1, + 53, + 135, 129, 17, 21, 97, - 20, - 57, + 19, + 215, 87, - 97, - 20, - 57, - 97, - 12, - 65, - 86, - 91, - 97, - 20, - 77, + 96, + 0, + 128, 129, - 97, - 20, - 71, - 132, - 84, + 253, + 91, 97, 19, + 229, + 141, + 139, 131, - 86, - 91, - 132, + 134, + 1, + 1, 97, - 19, - 208, + 18, + 170, 86, 91, + 130, + 82, + 80, 96, - 32, + 64, 128, - 96, - 31, 131, - 17, - 96, 1, + 53, + 136, 129, - 20, + 17, + 21, 97, - 20, - 130, + 19, + 252, 87, 96, 0, - 132, - 21, + 128, + 129, + 253, + 91, 97, 20, - 106, - 87, - 80, - 133, + 10, + 142, + 140, 131, + 135, 1, - 81, - 91, - 96, - 0, - 25, - 96, - 3, - 134, - 144, - 27, - 28, - 25, - 22, - 96, 1, - 133, - 144, - 27, - 23, - 133, - 85, 97, - 20, - 22, + 18, + 170, 86, 91, - 96, - 0, - 133, - 129, + 139, + 132, + 1, 82, + 80, 96, - 32, - 129, - 32, 96, - 31, - 25, - 134, - 22, - 145, - 91, - 130, + 128, + 132, + 1, + 53, + 137, 129, - 16, + 17, 21, 97, 20, - 177, + 35, 87, - 136, - 134, - 1, - 81, - 130, - 85, - 148, - 132, - 1, - 148, 96, + 0, + 128, + 129, + 253, + 91, + 97, + 20, + 49, + 143, + 141, + 131, + 136, 1, - 144, - 145, - 1, - 144, - 132, 1, 97, - 20, - 146, + 18, + 170, 86, 91, - 80, + 131, 133, + 1, + 82, + 80, + 96, + 128, + 132, + 1, + 53, + 145, + 80, + 136, 130, - 16, + 17, 21, 97, 20, - 207, + 75, 87, - 135, - 133, - 1, - 81, 96, 0, - 25, - 96, - 3, - 136, - 144, - 27, - 96, - 248, - 22, - 28, - 25, - 22, + 128, 129, - 85, + 253, 91, - 80, - 80, - 80, - 80, - 80, - 96, + 97, + 20, + 89, + 142, + 140, + 132, + 135, 1, - 144, - 129, - 27, 1, - 144, - 85, - 80, + 97, + 18, + 170, 86, 91, - 96, - 0, - 96, - 32, - 128, + 144, 131, 1, - 129, - 132, 82, - 128, - 133, - 81, - 128, - 131, + 80, + 132, 82, - 96, - 64, - 146, 80, - 130, + 145, 134, 1, 145, + 134, + 1, + 97, + 19, + 143, + 86, + 91, + 80, + 152, + 151, + 80, + 80, + 80, + 80, + 80, + 80, 80, + 80, + 86, + 91, + 96, + 0, 130, - 129, 96, - 5, - 27, - 135, - 1, - 1, - 132, - 136, + 31, + 131, 1, + 18, + 97, + 20, + 138, + 87, 96, 0, + 128, + 253, 91, - 131, 129, - 16, - 21, + 53, + 96, + 32, 97, - 21, - 141, - 87, + 20, + 154, + 97, + 19, + 103, + 131, + 97, + 18, + 134, + 86, + 91, + 130, + 129, + 82, 96, - 63, - 25, - 137, + 5, + 146, + 144, + 146, + 27, 132, - 3, 1, - 133, - 82, 129, - 81, - 96, - 128, + 1, + 145, 129, - 81, 129, + 1, + 144, 134, - 82, - 97, + 132, + 17, 21, - 44, - 130, - 135, - 1, - 130, 97, - 15, - 134, - 86, + 20, + 185, + 87, + 96, + 0, + 128, + 253, 91, - 145, - 80, - 80, - 136, - 130, - 1, - 81, - 133, 130, - 3, - 138, - 135, + 134, 1, - 82, - 97, + 91, + 132, + 129, + 16, 21, - 68, - 130, - 130, 97, - 15, - 134, - 86, - 91, + 20, + 212, + 87, + 128, + 53, + 131, + 82, 145, - 80, - 80, - 135, - 130, + 131, 1, - 81, - 133, - 130, - 3, - 137, - 135, + 145, + 131, 1, - 82, - 97, - 21, - 92, - 130, - 130, 97, - 15, - 134, + 20, + 189, 86, 91, - 145, + 80, + 150, + 149, + 80, + 80, 80, 80, + 80, + 80, + 86, + 91, + 96, + 0, + 128, + 96, + 0, + 96, 96, + 132, + 134, + 3, + 18, + 21, + 97, + 20, + 244, + 87, 96, + 0, 128, + 253, + 91, 131, - 1, - 81, - 146, - 80, - 133, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 128, 130, - 3, - 129, - 135, - 1, - 82, - 80, + 17, + 21, 97, 21, - 121, - 129, + 12, + 87, + 96, + 0, + 128, + 253, + 91, + 97, + 21, + 24, + 135, 131, + 136, + 1, 97, - 15, - 134, + 18, + 170, 86, 91, - 150, - 137, - 1, - 150, 148, 80, - 80, - 80, - 144, + 96, + 32, 134, 1, - 144, + 53, + 145, + 80, + 128, + 130, + 17, + 21, + 97, + 21, + 46, + 87, 96, - 1, - 1, + 0, + 128, + 253, + 91, + 80, 97, 21, - 6, + 59, + 134, + 130, + 135, + 1, + 97, + 20, + 121, 86, 91, - 80, - 144, - 152, - 151, - 80, - 80, - 80, + 146, 80, 80, + 96, + 64, + 132, + 1, + 53, + 144, 80, + 146, 80, + 146, 80, + 146, 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 243, - 47, - 132, - 14, - 221, - 200, - 12, - 236, - 130, - 235, - 143, - 5, - 195, - 78, - 49, - 31, - 44, - 9, - 34, - 218, - 112, - 185, - 0, - 232, - 151, - 24, - 130, - 217, - 64, - 229, - 4, - 73, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, + 91, + 96, 0, - 51, - ]; - ///The bytecode of the contract. - pub static SUMMA_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ + 128, 96, + 0, 128, 96, - 64, - 82, - 52, 128, + 133, + 135, + 3, + 18, 21, 97, - 0, - 16, + 21, + 98, 87, 96, 0, 128, 253, 91, + 132, + 53, + 147, 80, 96, - 4, - 54, - 16, + 32, + 133, + 1, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 128, + 130, + 17, + 21, 97, - 0, - 158, + 21, + 129, 87, 96, 0, - 53, - 96, - 224, - 28, 128, - 99, + 253, + 91, + 97, + 21, 141, - 165, - 203, + 136, + 131, + 137, + 1, + 97, + 20, + 121, + 86, 91, + 148, + 80, + 96, + 64, + 135, + 1, + 53, + 145, + 80, + 128, + 130, 17, + 21, 97, - 0, - 102, + 21, + 163, 87, + 96, + 0, 128, - 99, - 141, - 165, - 203, + 253, 91, - 20, - 97, + 129, + 135, 1, - 54, + 145, + 80, + 135, + 96, + 31, + 131, + 1, + 18, + 97, + 21, + 183, 87, + 96, + 0, 128, - 99, - 163, + 253, + 91, + 97, + 21, 196, - 188, - 248, - 20, 97, - 1, - 81, - 87, - 128, - 99, - 199, - 221, - 202, - 14, - 20, + 19, + 103, + 131, + 53, 97, - 1, - 116, - 87, + 18, + 134, + 86, + 91, + 130, + 53, 128, - 99, - 200, - 229, + 130, + 82, + 96, + 32, + 128, + 131, + 1, + 146, + 145, + 96, + 5, + 27, + 133, + 1, + 1, + 138, 129, - 71, - 20, + 17, + 21, 97, - 1, - 135, + 21, + 227, 87, + 96, + 0, 128, - 99, - 242, 253, - 227, - 139, - 20, - 97, + 91, + 96, + 32, + 133, 1, - 154, + 91, + 129, + 129, + 16, + 21, + 97, + 22, + 127, + 87, + 132, + 129, + 53, + 17, + 21, + 97, + 21, + 254, 87, 96, 0, @@ -6003,955 +5880,2952 @@ pub mod summa { 253, 91, 128, - 99, - 35, - 235, - 148, - 160, - 20, - 97, - 0, - 163, + 53, + 134, + 1, + 96, + 64, + 129, + 142, + 3, + 96, + 31, + 25, + 1, + 18, + 21, + 97, + 22, + 22, 87, + 96, + 0, 128, - 99, - 65, - 58, - 159, - 45, - 20, + 253, + 91, + 97, + 22, + 30, 97, + 18, + 50, + 86, + 91, + 96, + 32, + 130, + 1, + 53, + 135, + 129, + 17, + 21, + 97, + 22, + 48, + 87, + 96, 0, - 214, + 128, + 253, + 91, + 97, + 22, + 63, + 143, + 96, + 32, + 131, + 134, + 1, + 1, + 97, + 18, + 170, + 86, + 91, + 130, + 82, + 80, + 96, + 64, + 130, + 1, + 53, + 135, + 129, + 17, + 21, + 97, + 22, + 84, 87, + 96, + 0, 128, + 253, + 91, + 97, + 22, 99, - 108, - 118, + 143, + 96, + 32, + 131, + 134, + 1, + 1, + 97, + 18, + 170, + 86, + 91, + 96, + 32, + 131, + 1, + 82, + 80, + 128, + 134, + 82, + 80, + 80, + 96, + 32, 132, - 254, - 20, + 1, + 147, + 80, + 96, + 32, + 129, + 1, + 144, + 80, 97, + 21, + 232, + 86, + 91, + 80, + 151, + 154, + 150, + 153, + 80, + 151, + 96, + 96, + 1, + 53, + 150, + 80, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 96, 0, - 235, + 96, + 32, + 130, + 132, + 3, + 18, + 21, + 97, + 22, + 165, 87, + 96, + 0, 128, - 99, - 113, - 80, - 24, - 166, + 253, + 91, + 129, + 53, + 96, + 1, + 96, + 1, + 96, + 160, + 27, + 3, + 129, + 22, + 129, 20, 97, - 1, - 14, + 17, + 148, 87, + 96, + 0, 128, + 253, + 91, 99, - 127, - 59, - 251, - 46, - 20, + 78, + 72, + 123, + 113, + 96, + 224, + 27, + 96, + 0, + 82, + 96, + 17, + 96, + 4, + 82, + 96, + 36, + 96, + 0, + 253, + 91, + 129, + 129, + 3, + 129, + 129, + 17, + 21, 97, - 1, 22, + 229, 87, + 97, + 22, + 229, + 97, + 22, + 188, + 86, + 91, + 146, + 145, + 80, + 80, + 86, + 91, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, + 96, + 0, + 82, + 96, + 50, + 96, + 4, + 82, + 96, + 36, + 96, + 0, + 253, + 91, + 96, + 1, + 129, + 129, + 28, + 144, + 130, + 22, + 128, + 97, + 23, + 21, + 87, + 96, + 127, + 130, + 22, + 145, + 80, + 91, + 96, + 32, + 130, + 16, + 129, + 3, + 97, + 23, + 53, + 87, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, + 96, + 0, + 82, + 96, + 34, + 96, + 4, + 82, + 96, + 36, + 96, + 0, + 253, + 91, + 80, + 145, + 144, + 80, + 86, + 91, + 96, + 0, + 130, + 81, + 97, + 23, + 77, + 129, + 132, + 96, + 32, + 135, + 1, + 97, + 16, + 198, + 86, + 91, + 145, + 144, + 145, + 1, + 146, + 145, + 80, + 80, + 86, + 91, + 96, + 31, + 130, + 17, + 21, + 97, + 23, + 161, + 87, + 96, + 0, + 129, + 129, + 82, + 96, + 32, + 129, + 32, + 96, + 31, + 133, + 1, + 96, + 5, + 28, + 129, + 1, + 96, + 32, + 134, + 16, + 21, + 97, + 23, + 126, + 87, + 80, + 128, + 91, + 96, + 31, + 133, + 1, + 96, + 5, + 28, + 130, + 1, + 145, + 80, + 91, + 129, + 129, + 16, + 21, + 97, + 23, + 157, + 87, + 130, + 129, + 85, + 96, + 1, + 1, + 97, + 23, + 138, + 86, + 91, + 80, + 80, + 80, + 91, + 80, + 80, + 80, + 86, + 91, + 129, + 81, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 129, + 17, + 21, + 97, + 23, + 192, + 87, + 97, + 23, + 192, + 97, + 17, + 243, + 86, + 91, + 97, + 23, + 212, + 129, + 97, + 23, + 206, + 132, + 84, + 97, + 23, + 1, + 86, + 91, + 132, + 97, + 23, + 87, + 86, + 91, + 96, + 32, + 128, + 96, + 31, + 131, + 17, + 96, + 1, + 129, + 20, + 97, + 24, + 9, + 87, + 96, + 0, + 132, + 21, + 97, + 23, + 241, + 87, + 80, + 133, + 131, + 1, + 81, + 91, + 96, + 0, + 25, + 96, + 3, + 134, + 144, + 27, + 28, + 25, + 22, + 96, + 1, + 133, + 144, + 27, + 23, + 133, + 85, + 97, + 23, + 157, + 86, + 91, + 96, + 0, + 133, + 129, + 82, + 96, + 32, + 129, + 32, + 96, + 31, + 25, + 134, + 22, + 145, + 91, + 130, + 129, + 16, + 21, + 97, + 24, + 56, + 87, + 136, + 134, + 1, + 81, + 130, + 85, + 148, + 132, + 1, + 148, + 96, + 1, + 144, + 145, + 1, + 144, + 132, + 1, + 97, + 24, + 25, + 86, + 91, + 80, + 133, + 130, + 16, + 21, + 97, + 24, + 86, + 87, + 135, + 133, + 1, + 81, + 96, + 0, + 25, + 96, + 3, + 136, + 144, + 27, + 96, + 248, + 22, + 28, + 25, + 22, + 129, + 85, + 91, + 80, + 80, + 80, + 80, + 80, + 96, + 1, + 144, + 129, + 27, + 1, + 144, + 85, + 80, + 86, + 91, + 96, + 0, + 96, + 1, + 130, + 1, + 97, + 24, + 120, + 87, + 97, + 24, + 120, + 97, + 22, + 188, + 86, + 91, + 80, + 96, + 1, + 1, + 144, + 86, + 91, + 96, + 0, + 96, + 32, + 128, + 131, + 1, + 129, + 132, + 82, + 128, + 133, + 81, + 128, + 131, + 82, + 96, + 64, + 134, + 1, + 145, + 80, + 96, + 64, + 129, + 96, + 5, + 27, + 135, + 1, + 1, + 146, + 80, + 131, + 135, + 1, + 96, + 0, + 91, + 130, + 129, + 16, + 21, + 97, + 24, + 212, + 87, + 96, + 63, + 25, + 136, + 134, + 3, + 1, + 132, + 82, + 97, + 24, + 194, + 133, + 131, + 81, + 97, + 17, + 22, + 86, + 91, + 148, + 80, + 146, + 133, + 1, + 146, + 144, + 133, + 1, + 144, + 96, + 1, + 1, + 97, + 24, + 166, + 86, + 91, + 80, + 146, + 151, + 150, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 96, + 0, + 129, + 81, + 128, + 132, + 82, + 96, + 32, + 128, + 133, + 1, + 148, + 80, + 128, + 132, + 1, + 96, + 0, + 91, + 131, + 129, + 16, + 21, + 97, + 25, + 17, + 87, + 129, + 81, + 135, + 82, + 149, + 130, + 1, + 149, + 144, + 130, + 1, + 144, + 96, + 1, + 1, + 97, + 24, + 245, + 86, + 91, + 80, + 148, + 149, + 148, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 96, + 64, + 129, + 82, + 96, + 0, + 97, + 25, + 47, + 96, + 64, + 131, + 1, + 133, + 97, + 24, + 225, + 86, + 91, + 130, + 129, + 3, + 96, + 32, + 132, + 1, + 82, + 97, + 17, + 120, + 129, + 133, + 97, + 16, + 234, + 86, + 91, + 96, + 0, + 96, + 32, + 130, + 132, + 3, + 18, + 21, + 97, + 25, + 83, + 87, + 96, + 0, + 128, + 253, + 91, + 129, + 81, + 128, + 21, + 21, + 129, + 20, + 97, + 17, + 148, + 87, + 96, + 0, + 128, + 253, + 91, + 131, + 129, + 82, + 96, + 0, + 96, + 32, + 96, + 96, + 129, + 132, + 1, + 82, + 97, + 25, + 125, + 96, + 96, + 132, + 1, + 134, + 97, + 24, + 225, + 86, + 91, + 96, + 64, + 132, + 130, + 3, + 129, + 134, + 1, + 82, + 129, + 134, + 81, + 128, + 132, + 82, + 132, + 132, + 1, + 145, + 80, + 132, + 129, + 96, + 5, + 27, + 133, + 1, + 1, + 133, + 137, + 1, + 96, + 0, + 91, + 131, + 129, + 16, + 21, + 97, + 25, + 239, + 87, + 134, + 131, + 3, + 96, + 31, + 25, + 1, + 133, + 82, + 129, + 81, + 128, + 81, + 135, + 133, + 82, + 97, + 25, + 195, + 136, + 134, + 1, + 130, + 97, + 16, + 234, + 86, + 91, + 145, + 138, + 1, + 81, + 133, + 131, + 3, + 134, + 140, + 1, + 82, + 145, + 144, + 80, + 97, + 25, + 219, + 129, + 131, + 97, + 16, + 234, + 86, + 91, + 150, + 138, + 1, + 150, + 148, + 80, + 80, + 80, + 144, + 135, + 1, + 144, + 96, + 1, + 1, + 97, + 25, + 159, + 86, + 91, + 80, + 144, + 155, + 154, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 86, + 254, + 162, + 100, + 105, + 112, + 102, + 115, + 88, + 34, + 18, + 32, + 79, + 132, + 172, + 119, + 194, + 64, + 202, + 64, + 220, + 19, + 17, + 245, + 124, + 254, + 232, + 34, + 83, + 139, + 131, + 103, + 161, + 125, + 38, + 152, + 111, + 86, + 48, + 109, + 121, + 95, + 255, + 188, + 100, + 115, + 111, + 108, + 99, + 67, + 0, + 8, + 18, + 0, + 51, + ]; + ///The bytecode of the contract. + pub static SUMMA_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( + __BYTECODE, + ); + #[rustfmt::skip] + const __DEPLOYED_BYTECODE: &[u8] = &[ + 96, + 128, + 96, + 64, + 82, + 52, + 128, + 21, + 97, + 0, + 16, + 87, + 96, + 0, + 128, + 253, + 91, + 80, + 96, + 4, + 54, + 16, + 97, + 0, + 147, + 87, + 96, + 0, + 53, + 96, + 224, + 28, + 128, + 99, + 163, + 196, + 188, + 248, + 17, + 97, + 0, + 102, + 87, + 128, + 99, + 163, + 196, + 188, + 248, + 20, + 97, + 1, + 20, + 87, + 128, + 99, + 199, + 221, + 202, + 14, + 20, + 97, + 1, + 55, + 87, + 128, + 99, + 200, + 229, + 129, + 71, + 20, + 97, + 1, + 74, + 87, + 128, + 99, + 218, + 100, + 167, + 80, + 20, + 97, + 1, + 109, + 87, + 128, + 99, + 242, + 253, + 227, + 139, + 20, + 97, + 1, + 128, + 87, + 96, + 0, + 128, + 253, + 91, + 128, + 99, + 25, + 179, + 57, + 104, + 20, + 97, + 0, + 152, + 87, + 128, + 99, + 73, + 206, + 137, + 151, + 20, + 97, + 0, + 193, + 87, + 128, + 99, + 113, + 80, + 24, + 166, + 20, + 97, + 0, + 239, + 87, + 128, + 99, + 141, + 165, + 203, + 91, + 20, + 97, + 0, + 249, + 87, + 91, + 96, + 0, + 128, + 253, + 91, + 97, + 0, + 171, + 97, + 0, + 166, + 54, + 96, + 4, + 97, + 16, + 173, + 86, + 91, + 97, + 1, + 147, + 86, + 91, + 96, + 64, + 81, + 97, + 0, + 184, + 145, + 144, + 97, + 17, + 129, + 86, + 91, + 96, + 64, + 81, + 128, + 145, + 3, + 144, + 243, + 91, + 97, + 0, + 225, + 97, + 0, + 207, + 54, + 96, + 4, + 97, + 16, + 173, + 86, + 91, + 96, + 3, + 96, + 32, + 82, + 96, + 0, + 144, + 129, + 82, + 96, + 64, + 144, + 32, + 84, + 129, + 86, + 91, + 96, + 64, + 81, + 144, + 129, + 82, + 96, + 32, + 1, + 97, + 0, + 184, + 86, + 91, + 97, + 0, + 247, + 97, + 4, + 170, + 86, + 91, + 0, + 91, + 96, + 0, + 84, + 96, + 64, + 81, + 96, + 1, + 96, + 1, + 96, + 160, + 27, + 3, + 144, + 145, + 22, + 129, + 82, + 96, + 32, + 1, + 97, + 0, + 184, + 86, + 91, + 97, + 1, + 39, + 97, + 1, + 34, + 54, + 96, + 4, + 97, + 16, + 173, + 86, + 91, + 97, + 4, + 190, + 86, + 91, + 96, + 64, + 81, + 97, + 0, + 184, + 148, + 147, + 146, + 145, + 144, + 97, + 17, + 155, + 86, + 91, + 97, + 0, + 247, + 97, + 1, + 69, + 54, + 96, + 4, + 97, + 19, + 26, + 86, + 91, + 97, + 7, + 30, + 86, + 91, + 97, + 1, + 93, + 97, + 1, + 88, + 54, + 96, + 4, + 97, + 20, + 223, + 86, + 91, + 97, + 9, + 191, + 86, + 91, + 96, + 64, + 81, + 144, + 21, + 21, + 129, + 82, + 96, + 32, + 1, + 97, + 0, + 184, + 86, + 91, + 97, + 0, + 247, + 97, + 1, + 123, + 54, + 96, + 4, + 97, + 21, + 76, + 86, + 91, + 97, + 10, + 202, + 86, + 91, + 97, + 0, + 247, + 97, + 1, + 142, + 54, + 96, + 4, + 97, + 22, + 147, + 86, + 91, + 97, + 14, + 129, + 86, + 91, + 97, + 1, + 190, + 96, + 64, + 81, + 128, + 96, + 128, + 1, + 96, + 64, + 82, + 128, + 96, + 96, + 129, + 82, + 96, + 32, + 1, + 96, + 96, + 129, + 82, + 96, + 32, + 1, + 96, + 96, + 129, + 82, + 96, + 32, + 1, + 96, + 96, + 129, + 82, + 80, + 144, + 86, + 91, + 96, + 0, + 130, + 129, + 82, + 96, + 2, + 96, + 32, + 82, + 96, + 64, + 144, + 32, + 84, + 97, + 2, + 21, + 87, + 96, + 64, + 81, + 98, + 70, + 27, + 205, + 96, + 229, + 27, + 129, + 82, + 96, + 32, + 96, + 4, + 130, + 1, + 82, + 96, + 20, + 96, + 36, + 130, + 1, + 82, + 115, + 16, + 89, + 25, + 28, + 153, + 92, + 220, + 200, + 27, + 155, + 221, + 8, + 29, + 153, + 92, + 154, + 89, + 154, + 89, + 89, + 96, + 98, + 27, + 96, + 68, + 130, + 1, + 82, + 96, + 100, + 1, + 91, + 96, + 64, + 81, + 128, + 145, + 3, + 144, + 253, + 91, + 96, + 0, + 130, + 129, + 82, + 96, + 2, + 96, + 32, + 82, + 96, + 64, + 144, + 32, + 84, + 96, + 1, + 144, + 97, + 2, + 50, + 144, + 130, + 144, + 97, + 22, + 210, + 86, + 91, + 129, + 84, + 129, + 16, + 97, + 2, + 66, + 87, + 97, + 2, + 66, + 97, + 22, + 235, + 86, + 91, + 144, + 96, + 0, + 82, + 96, + 32, + 96, + 0, + 32, + 144, + 96, + 4, + 2, + 1, + 96, + 64, + 81, + 128, + 96, + 128, + 1, + 96, + 64, + 82, + 144, + 129, + 96, + 0, + 130, + 1, + 128, + 84, + 97, + 2, + 107, + 144, + 97, + 23, + 1, + 86, + 91, + 128, + 96, + 31, + 1, + 96, + 32, + 128, + 145, + 4, + 2, + 96, + 32, + 1, + 96, + 64, + 81, + 144, + 129, + 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, + 129, + 129, + 82, + 96, + 32, + 1, + 130, + 128, + 84, + 97, + 2, + 151, + 144, + 97, + 23, + 1, + 86, + 91, + 128, + 21, + 97, + 2, + 228, + 87, + 128, + 96, + 31, + 16, + 97, + 2, + 185, + 87, + 97, + 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, + 82, + 145, + 96, + 32, + 1, + 145, + 97, + 2, + 228, + 86, + 91, + 130, + 1, + 145, + 144, + 96, + 0, + 82, + 96, + 32, + 96, + 0, + 32, + 144, + 91, + 129, + 84, + 129, + 82, + 144, + 96, + 1, + 1, + 144, + 96, + 32, + 1, + 128, + 131, + 17, + 97, + 2, + 199, + 87, + 130, + 144, + 3, + 96, + 31, + 22, + 130, + 1, + 145, + 91, + 80, + 80, + 80, + 80, + 80, + 129, + 82, + 96, + 32, + 1, + 96, + 1, + 130, + 1, + 128, + 84, + 97, + 2, + 253, + 144, + 97, + 23, + 1, + 86, + 91, + 128, + 96, + 31, + 1, + 96, + 32, + 128, + 145, + 4, + 2, + 96, + 32, + 1, + 96, + 64, + 81, + 144, + 129, + 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, + 129, + 129, + 82, + 96, + 32, + 1, + 130, + 128, + 84, + 97, + 3, + 41, + 144, + 97, + 23, + 1, + 86, + 91, + 128, + 21, + 97, + 3, + 118, + 87, + 128, + 96, + 31, + 16, + 97, + 3, + 75, + 87, + 97, + 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, + 82, + 145, + 96, + 32, + 1, + 145, + 97, + 3, + 118, + 86, + 91, + 130, + 1, + 145, + 144, + 96, + 0, + 82, + 96, + 32, + 96, + 0, + 32, + 144, + 91, + 129, + 84, + 129, + 82, + 144, + 96, + 1, + 1, + 144, + 96, + 32, + 1, + 128, + 131, + 17, + 97, + 3, + 89, + 87, + 130, + 144, + 3, + 96, + 31, + 22, + 130, + 1, + 145, + 91, + 80, + 80, + 80, + 80, + 80, + 129, + 82, + 96, + 32, + 1, + 96, + 2, + 130, + 1, + 128, + 84, + 97, + 3, + 143, + 144, + 97, + 23, + 1, + 86, + 91, + 128, + 96, + 31, + 1, + 96, + 32, + 128, + 145, + 4, + 2, + 96, + 32, + 1, + 96, + 64, + 81, + 144, + 129, + 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, + 129, + 129, + 82, + 96, + 32, + 1, + 130, + 128, + 84, + 97, + 3, + 187, + 144, + 97, + 23, + 1, + 86, + 91, + 128, + 21, + 97, + 4, + 8, + 87, + 128, + 96, + 31, + 16, + 97, + 3, + 221, + 87, + 97, + 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, + 82, + 145, + 96, + 32, + 1, + 145, + 97, + 4, + 8, + 86, + 91, + 130, + 1, + 145, + 144, + 96, + 0, + 82, + 96, + 32, + 96, + 0, + 32, + 144, + 91, + 129, + 84, + 129, + 82, + 144, + 96, + 1, + 1, + 144, + 96, + 32, + 1, + 128, + 131, + 17, + 97, + 3, + 235, + 87, + 130, + 144, + 3, + 96, + 31, + 22, + 130, + 1, + 145, 91, + 80, + 80, + 80, + 80, + 80, + 129, + 82, 96, - 0, + 32, + 1, + 96, + 3, + 130, + 1, 128, - 253, - 91, - 97, - 0, - 195, + 84, 97, - 0, - 177, - 54, - 96, 4, + 33, + 144, 97, - 12, - 40, + 23, + 1, 86, 91, + 128, 96, - 2, + 31, + 1, 96, 32, - 82, + 128, + 145, + 4, + 2, 96, - 0, - 144, - 129, - 82, + 32, + 1, 96, 64, + 81, 144, - 32, - 84, 129, - 86, - 91, + 1, 96, 64, - 81, + 82, + 128, + 146, + 145, 144, 129, + 129, 82, 96, 32, 1, - 91, - 96, - 64, - 81, + 130, 128, - 145, - 3, - 144, - 243, - 91, - 97, - 0, - 233, + 84, 97, - 0, - 228, - 54, - 96, 4, + 77, + 144, 97, - 13, - 104, - 86, - 91, - 97, + 23, 1, - 173, 86, 91, - 0, - 91, - 97, - 0, - 254, + 128, + 21, 97, - 0, - 249, - 54, - 96, 4, + 154, + 87, + 128, + 96, + 31, + 16, 97, - 15, - 34, - 86, - 91, + 4, + 111, + 87, 97, + 1, + 0, + 128, + 131, + 84, 4, - 68, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, + 2, + 131, 82, + 145, 96, 32, 1, - 97, - 0, - 205, - 86, - 91, - 97, - 0, - 233, + 145, 97, 4, - 223, + 154, 86, 91, - 97, - 0, - 195, - 97, + 130, 1, - 36, - 54, - 96, - 4, - 97, - 12, - 40, - 86, - 91, + 145, + 144, 96, - 3, + 0, + 82, 96, 32, - 82, 96, 0, + 32, 144, + 91, 129, - 82, - 96, - 64, - 144, - 32, 84, 129, - 86, - 91, - 96, - 0, - 84, - 96, - 64, - 81, + 82, + 144, 96, 1, - 96, 1, - 96, - 160, - 27, - 3, 144, - 145, - 22, - 129, - 82, 96, 32, 1, - 97, - 0, - 205, - 86, - 91, - 97, - 1, - 100, - 97, - 1, - 95, - 54, - 96, - 4, - 97, - 12, - 40, - 86, - 91, + 128, + 131, + 17, 97, 4, - 243, - 86, - 91, - 96, - 64, - 81, - 97, - 0, - 205, - 148, - 147, - 146, - 145, - 144, - 97, - 15, - 204, - 86, - 91, - 97, - 0, - 233, - 97, - 1, + 125, + 87, 130, - 54, + 144, + 3, 96, - 4, - 97, - 16, - 36, - 86, + 31, + 22, + 130, + 1, + 145, 91, - 97, - 7, - 83, + 80, + 80, + 80, + 80, + 80, + 129, + 82, + 80, + 80, + 144, + 80, + 145, + 144, + 80, 86, 91, 97, - 0, - 254, - 97, - 1, - 149, - 54, - 96, 4, + 178, 97, - 17, - 126, - 86, - 91, - 97, - 9, - 253, + 14, + 250, 86, 91, 97, - 0, - 233, - 97, - 1, - 168, - 54, - 96, 4, + 188, + 96, + 0, 97, - 17, - 235, - 86, - 91, - 97, - 11, - 5, + 15, + 84, 86, 91, - 97, - 1, - 181, - 97, - 11, - 126, 86, 91, 96, 1, + 129, + 129, 84, - 96, - 0, - 3, + 129, + 16, 97, - 2, - 43, + 4, + 206, 87, 96, - 64, - 81, - 98, - 70, - 27, - 205, + 0, + 128, + 253, + 91, + 144, 96, - 229, - 27, - 129, + 0, 82, 96, 32, 96, + 0, + 32, + 144, + 96, 4, - 130, + 2, 1, - 82, 96, - 54, + 0, + 145, + 80, + 144, + 80, + 128, 96, - 36, - 130, + 0, 1, - 82, - 127, + 128, 84, - 104, - 101, - 32, - 67, - 69, - 88, - 32, - 104, - 97, - 115, - 32, - 110, - 111, - 116, - 32, - 115, - 117, - 98, - 109, - 105, - 116, - 116, - 101, - 100, - 32, 97, - 110, - 121, - 32, + 4, + 241, + 144, 97, - 100, + 23, + 1, + 86, + 91, + 128, 96, - 68, - 130, + 31, 1, - 82, - 117, - 100, - 114, - 101, - 115, - 115, - 32, - 111, - 119, - 110, - 101, - 114, - 115, - 104, - 105, - 112, - 32, - 112, - 114, - 111, - 111, - 102, - 115, 96, - 80, - 27, + 32, + 128, + 145, + 4, + 2, 96, - 100, - 130, + 32, 1, - 82, 96, - 132, + 64, + 81, + 144, + 129, 1, - 91, 96, 64, - 81, + 82, 128, + 146, 145, - 3, 144, - 253, - 91, - 96, - 0, - 131, - 81, + 129, + 129, + 82, 96, + 32, 1, + 130, + 128, + 84, 97, - 2, - 59, - 145, + 5, + 29, 144, 97, - 18, - 49, + 23, + 1, 86, 91, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, + 128, 21, 97, - 2, - 83, + 5, + 106, + 87, + 128, + 96, + 31, + 16, + 97, + 5, + 63, 87, 97, + 1, + 0, + 128, + 131, + 84, + 4, 2, - 83, + 131, + 82, + 145, + 96, + 32, + 1, + 145, 97, - 12, - 65, + 5, + 106, 86, 91, - 96, - 64, - 81, - 144, - 128, 130, + 1, + 145, + 144, + 96, + 0, 82, - 128, 96, 32, - 2, 96, + 0, 32, + 144, + 91, + 129, + 84, + 129, + 82, + 144, + 96, 1, - 130, 1, + 144, 96, - 64, - 82, + 32, + 1, 128, - 21, + 131, + 17, 97, - 2, - 124, + 5, + 77, 87, - 129, - 96, - 32, - 1, + 130, + 144, + 3, 96, - 32, + 31, + 22, 130, - 2, - 128, - 54, - 131, - 55, 1, - 144, - 80, + 145, 91, 80, - 144, 80, - 132, - 129, + 80, + 80, + 80, + 144, + 128, 96, - 0, - 129, - 81, - 129, - 16, - 97, - 2, - 147, - 87, + 1, + 1, + 128, + 84, 97, - 2, - 147, + 5, + 127, + 144, 97, - 18, - 68, + 23, + 1, 86, 91, + 128, + 96, + 31, + 1, 96, 32, + 128, + 145, + 4, 2, 96, 32, 1, - 1, - 129, - 129, - 82, - 80, - 80, 96, - 0, - 91, - 132, + 64, 81, + 144, 129, - 16, - 21, - 97, - 3, - 142, - 87, - 132, - 129, + 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, 129, - 81, 129, - 16, - 97, - 2, - 189, - 87, - 97, - 2, - 189, - 97, - 18, - 68, - 86, - 91, - 96, - 32, - 2, + 82, 96, 32, 1, + 130, + 128, + 84, + 97, + 5, + 171, + 144, + 97, + 23, 1, - 81, - 96, - 32, - 1, - 81, - 81, - 96, - 0, - 20, - 21, + 86, + 91, 128, 21, 97, - 2, - 249, + 5, + 248, 87, - 80, - 132, - 129, - 129, - 81, - 129, + 128, + 96, + 31, 16, 97, - 2, - 231, + 5, + 205, 87, 97, + 1, + 0, + 128, + 131, + 84, + 4, 2, - 231, - 97, - 18, - 68, - 86, - 91, - 96, - 32, - 2, + 131, + 82, + 145, 96, 32, 1, + 145, + 97, + 5, + 248, + 86, + 91, + 130, 1, - 81, + 145, + 144, 96, 0, - 1, - 81, - 81, + 82, + 96, + 32, 96, 0, - 20, - 21, + 32, + 144, 91, - 97, - 3, - 53, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, + 129, + 84, 129, 82, + 144, 96, - 32, - 96, - 4, - 130, 1, - 82, - 96, - 13, - 96, - 36, - 130, 1, - 82, - 108, - 18, - 91, - 157, - 152, - 91, - 26, - 89, - 8, - 24, - 92, - 220, - 217, - 93, + 144, 96, - 154, - 27, + 32, + 1, + 128, + 131, + 17, + 97, + 5, + 219, + 87, + 130, + 144, + 3, 96, - 68, + 31, + 22, 130, 1, - 82, + 145, + 91, + 80, + 80, + 80, + 80, + 80, + 144, + 128, 96, - 100, - 1, - 97, 2, - 34, - 86, - 91, - 132, - 129, - 129, - 81, - 129, - 16, - 97, - 3, - 71, - 87, + 1, + 128, + 84, 97, - 3, - 71, + 6, + 13, + 144, 97, - 18, - 68, + 23, + 1, 86, 91, + 128, + 96, + 31, + 1, 96, 32, + 128, + 145, + 4, 2, 96, 32, 1, - 1, - 81, 96, 64, - 1, 81, - 130, - 130, + 144, + 129, + 1, + 96, + 64, + 82, + 128, + 146, + 145, + 144, + 129, + 129, + 82, 96, + 32, 1, + 130, + 128, + 84, 97, - 3, - 97, - 145, + 6, + 57, 144, 97, - 18, - 49, + 23, + 1, 86, 91, - 129, - 81, - 129, + 128, + 21, + 97, + 6, + 134, + 87, + 128, + 96, + 31, 16, 97, - 3, - 113, + 6, + 91, 87, 97, - 3, - 113, + 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, + 82, + 145, + 96, + 32, + 1, + 145, 97, - 18, - 68, + 6, + 134, 86, 91, + 130, + 1, + 145, + 144, + 96, + 0, + 82, 96, 32, + 96, + 0, + 32, 144, + 91, 129, - 2, - 145, + 84, + 129, + 82, 144, - 145, + 96, 1, 1, - 82, + 144, + 96, + 32, + 1, 128, + 131, + 17, 97, + 6, + 105, + 87, + 130, + 144, 3, - 134, - 129, - 97, - 18, - 90, - 86, - 91, + 96, + 31, + 22, + 130, + 1, 145, + 91, 80, 80, - 97, - 2, - 162, - 86, - 91, 80, - 97, + 80, + 80, + 144, + 128, + 96, 3, - 153, - 131, - 130, + 1, + 128, + 84, 97, - 4, - 68, + 6, + 155, + 144, + 97, + 23, + 1, 86, 91, - 97, - 3, - 216, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, + 128, 96, - 229, - 27, - 129, - 82, + 31, + 1, 96, 32, - 96, + 128, + 145, 4, - 130, - 1, - 82, + 2, 96, - 16, + 32, + 1, 96, - 36, - 130, + 64, + 81, + 144, + 129, 1, + 96, + 64, 82, - 111, - 36, - 183, - 59, - 48, - 182, - 52, - 178, - 16, - 45, - 37, + 128, + 146, + 145, 144, - 56, - 57, - 55, - 183, - 179, - 96, 129, - 27, + 129, + 82, 96, - 68, + 32, + 1, 130, + 128, + 84, + 97, + 6, + 199, + 144, + 97, + 23, + 1, + 86, + 91, + 128, + 21, + 97, + 7, + 20, + 87, + 128, + 96, + 31, + 16, + 97, + 6, + 233, + 87, + 97, 1, + 0, + 128, + 131, + 84, + 4, + 2, + 131, 82, + 145, 96, - 100, + 32, 1, + 145, 97, - 2, - 34, + 7, + 20, 86, 91, + 130, + 1, + 145, + 144, 96, 0, - 130, - 129, 82, 96, - 3, - 96, 32, - 82, 96, - 64, - 129, + 0, 32, - 134, 144, - 85, + 91, 129, - 81, - 131, - 145, - 127, - 4, - 115, - 88, - 28, - 60, - 244, - 55, - 175, - 197, - 34, - 7, - 216, - 140, - 225, 84, - 26, - 251, - 199, - 206, - 159, - 219, + 129, + 82, + 144, + 96, + 1, + 1, + 144, + 96, + 32, + 1, + 128, 131, - 180, - 212, - 211, - 183, - 33, - 75, - 238, - 213, - 111, - 245, - 145, - 132, + 17, + 97, + 6, + 247, + 87, + 130, + 144, + 3, + 96, + 31, + 22, + 130, + 1, 145, + 91, + 80, + 80, + 80, + 80, + 80, 144, + 80, + 132, + 86, + 91, 97, - 4, - 30, + 7, + 38, + 97, + 14, + 250, + 86, + 91, + 96, + 0, + 91, + 129, + 81, + 129, + 16, + 21, + 97, + 9, + 132, + 87, + 96, + 0, + 130, + 130, + 129, + 81, + 129, + 16, + 97, + 7, + 70, 87, 97, - 4, - 30, + 7, + 70, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -6962,85 +8836,123 @@ pub mod summa { 1, 1, 81, - 134, + 96, + 0, + 1, + 81, 96, 64, 81, + 96, + 32, + 1, 97, - 4, - 53, - 146, + 7, + 98, 145, 144, 97, - 18, - 115, + 23, + 59, 86, 91, 96, 64, - 81, 128, - 145, + 81, + 96, + 31, + 25, + 129, + 132, 3, + 1, + 129, + 82, + 145, + 129, + 82, + 129, + 81, + 96, + 32, + 146, + 131, + 1, + 32, + 96, + 0, + 129, + 129, + 82, + 96, + 2, 144, - 162, - 80, - 80, - 80, - 80, + 147, + 82, + 145, + 32, + 84, + 144, + 145, 80, - 86, - 91, + 128, + 21, + 97, + 7, + 216, + 87, 96, 64, 81, - 99, - 11, - 210, - 5, - 169, + 98, + 70, + 27, + 205, 96, - 228, + 229, 27, 129, 82, 96, - 0, - 144, - 96, - 1, + 32, 96, + 4, + 130, 1, + 82, 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 24, + 96, + 36, + 130, + 1, + 82, + 127, + 65, + 100, + 100, + 114, + 101, + 115, + 115, + 32, + 97, + 108, + 114, + 101, + 97, + 100, + 121, + 32, + 118, + 101, + 114, + 105, + 102, + 105, + 101, + 100, 0, 0, 0, @@ -7049,845 +8961,856 @@ pub mod summa { 0, 0, 0, - 22, - 144, - 99, - 189, - 32, - 90, - 144, - 144, - 97, - 4, - 149, - 144, - 133, - 144, - 135, - 144, 96, - 4, + 68, + 130, + 1, + 82, + 96, + 100, 1, 97, - 19, - 10, + 2, + 12, 86, 91, 96, - 32, - 96, - 64, + 1, + 132, + 132, + 129, 81, - 128, - 131, - 3, 129, - 134, - 90, - 250, - 21, - 128, - 21, + 16, 97, - 4, - 178, + 7, + 236, 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, + 97, + 7, + 236, + 97, + 22, + 235, + 86, 91, - 80, - 80, - 80, - 80, 96, - 64, + 32, + 144, + 129, + 2, + 145, + 144, + 145, + 1, + 129, + 1, 81, - 61, - 96, - 31, - 25, - 96, - 31, 130, + 84, + 96, 1, - 22, - 130, + 129, 1, - 128, + 132, + 85, 96, - 64, + 0, + 147, + 132, 82, - 80, - 129, - 1, + 145, 144, - 97, + 146, + 32, + 130, + 81, + 96, 4, - 214, - 145, + 144, + 146, + 2, + 1, + 144, + 129, 144, 97, - 19, + 8, + 30, + 144, + 130, 97, + 23, + 166, 86, 91, - 144, - 80, - 91, - 146, - 145, 80, - 80, - 86, - 91, + 96, + 32, + 130, + 1, + 81, + 96, + 1, + 130, + 1, + 144, 97, - 4, - 231, + 8, + 51, + 144, + 130, 97, - 11, - 126, + 23, + 166, 86, 91, - 97, - 4, - 241, + 80, 96, - 0, - 97, - 11, - 216, - 86, - 91, - 86, - 91, + 64, + 130, + 1, + 81, 96, + 2, + 130, 1, - 129, - 129, - 84, - 129, - 16, + 144, 97, - 5, - 3, - 87, - 96, - 0, - 128, - 253, - 91, + 8, + 72, 144, + 130, + 97, + 23, + 166, + 86, + 91, + 80, 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, 96, - 4, - 2, + 130, 1, + 81, 96, - 0, - 145, - 80, - 144, - 80, - 128, - 96, - 0, + 3, + 130, 1, - 128, - 84, + 144, 97, - 5, - 38, + 8, + 93, 144, + 130, 97, - 19, - 131, + 23, + 166, 86, 91, - 128, + 80, + 80, 96, - 31, 1, + 84, + 96, + 0, + 132, + 129, + 82, 96, - 32, - 128, - 145, - 4, 2, 96, 32, - 1, + 82, 96, 64, + 144, + 32, + 85, + 80, + 131, 81, + 132, 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, + 132, 144, 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, + 16, 97, - 5, - 82, - 144, + 8, + 134, + 87, 97, - 19, - 131, + 8, + 134, + 97, + 22, + 235, 86, 91, + 96, + 32, + 2, + 96, + 32, + 1, + 1, + 81, + 96, + 0, + 1, + 81, + 81, + 96, + 0, + 20, + 21, 128, 21, 97, - 5, - 159, + 8, + 194, 87, - 128, - 96, - 31, + 80, + 131, + 131, + 129, + 81, + 129, 16, 97, - 5, - 116, + 8, + 176, 87, 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, + 8, + 176, 97, - 5, - 159, + 22, + 235, 86, 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, 96, 32, + 2, 96, - 0, 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, 1, 1, - 144, + 81, 96, 32, 1, + 81, + 81, + 96, + 0, + 20, + 21, + 91, 128, - 131, - 17, + 21, 97, - 5, - 130, + 8, + 237, 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, 80, - 80, - 144, - 128, - 96, - 1, - 1, - 128, - 84, + 131, + 131, + 129, + 81, + 129, + 16, 97, - 5, - 180, - 144, + 8, + 219, + 87, 97, - 19, - 131, + 8, + 219, + 97, + 22, + 235, 86, 91, - 128, - 96, - 31, - 1, 96, 32, - 128, - 145, - 4, 2, 96, 32, 1, - 96, - 64, - 81, - 144, - 129, 1, + 81, 96, 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, 1, - 130, - 128, - 84, - 97, - 5, - 224, - 144, - 97, - 19, - 131, - 86, + 81, + 81, + 96, + 0, + 20, + 21, 91, 128, 21, 97, - 6, - 45, + 9, + 24, 87, - 128, - 96, - 31, + 80, + 131, + 131, + 129, + 81, + 129, 16, 97, + 9, 6, - 2, 87, 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, + 9, 6, - 45, - 86, - 91, - 130, - 1, - 145, - 144, + 97, + 22, + 235, + 86, + 91, 96, - 0, - 82, + 32, + 2, 96, 32, + 1, + 1, + 81, + 96, + 96, + 1, + 81, + 81, 96, 0, - 32, - 144, + 20, + 21, 91, - 129, - 84, + 97, + 9, + 111, + 87, + 96, + 64, + 81, + 98, + 70, + 27, + 205, + 96, + 229, + 27, 129, 82, - 144, 96, + 32, + 96, + 4, + 130, 1, - 1, - 144, + 82, + 96, + 34, 96, + 36, + 130, + 1, + 82, + 127, + 73, + 110, + 118, + 97, + 108, + 105, + 100, + 32, + 112, + 114, + 111, + 111, + 102, + 32, + 111, + 102, + 32, + 97, + 100, + 100, + 114, + 101, + 115, + 115, 32, + 111, + 119, + 110, + 101, + 114, + 115, + 104, + 96, + 68, + 130, 1, - 128, - 131, - 17, + 82, 97, 6, - 16, - 87, - 130, - 144, - 3, + 151, 96, - 31, - 22, + 244, + 27, + 96, + 100, 130, 1, - 145, + 82, + 96, + 132, + 1, + 97, + 2, + 12, + 86, 91, 80, 80, - 80, - 80, - 80, - 144, 128, - 96, - 2, - 1, 128, - 84, 97, - 6, - 66, + 9, + 124, 144, 97, - 19, - 131, + 24, + 102, 86, 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, 145, - 4, - 2, + 80, + 80, + 97, + 7, + 41, + 86, + 91, + 80, + 127, + 56, + 35, + 21, + 212, + 213, + 106, 96, - 32, - 1, + 53, + 225, + 137, + 155, + 255, + 231, + 125, + 155, + 236, + 239, + 175, + 95, + 38, + 80, + 228, + 50, + 59, + 39, + 133, + 72, + 87, + 160, + 69, + 70, + 88, + 129, 96, 64, 81, + 97, + 9, + 180, + 145, 144, - 129, - 1, + 97, + 24, + 127, + 86, + 91, 96, 64, - 82, + 81, 128, - 146, 145, + 3, 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 6, - 110, - 144, - 97, - 19, - 131, + 161, + 80, 86, 91, - 128, - 21, - 97, - 6, - 187, - 87, - 128, 96, - 31, + 0, + 130, + 96, + 1, + 129, + 81, + 129, 16, 97, - 6, - 144, + 9, + 212, 87, 97, - 1, - 0, - 128, - 131, - 84, - 4, + 9, + 212, + 97, + 22, + 235, + 86, + 91, + 96, + 32, 2, - 131, - 82, - 145, 96, 32, 1, - 145, - 97, - 6, - 187, - 86, - 91, - 130, 1, - 145, - 144, + 81, + 96, + 3, 96, 0, + 132, + 129, 82, 96, 32, - 96, - 0, - 32, + 1, 144, - 91, - 129, - 84, 129, 82, - 144, 96, + 32, 1, - 1, - 144, 96, + 0, 32, + 96, + 0, 1, - 128, - 131, - 17, + 84, + 20, 97, - 6, - 158, + 10, + 51, 87, + 96, + 64, + 81, + 98, + 70, + 27, + 205, + 96, + 229, + 27, + 129, + 82, + 96, + 32, + 96, + 4, 130, - 144, - 3, + 1, + 82, 96, - 31, - 22, + 16, + 96, + 36, 130, 1, - 145, + 82, + 111, + 18, 91, - 80, - 80, - 80, - 80, - 80, - 144, - 128, + 157, + 152, + 91, + 26, + 89, + 8, + 19, + 84, + 213, + 8, + 28, + 155, + 219, + 221, 96, - 3, + 130, + 27, + 96, + 68, + 130, + 1, + 82, + 96, + 100, 1, - 128, - 84, - 97, - 6, - 208, - 144, 97, - 19, - 131, + 2, + 12, 86, 91, - 128, 96, - 31, - 1, + 64, + 81, + 99, + 11, + 210, + 5, + 169, 96, - 32, - 128, - 145, - 4, - 2, + 228, + 27, + 129, + 82, 96, - 32, 1, 96, - 64, - 81, - 144, - 129, 1, 96, - 64, - 82, - 128, - 146, - 145, + 160, + 27, + 3, + 127, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22, 144, - 129, - 129, - 82, - 96, + 99, + 189, 32, - 1, - 130, - 128, - 84, + 90, + 144, + 144, 97, - 6, - 252, + 10, + 129, + 144, + 134, + 144, + 136, 144, + 96, + 4, + 1, 97, - 19, - 131, + 25, + 28, 86, 91, + 96, + 32, + 96, + 64, + 81, 128, + 131, + 3, + 129, + 134, + 90, + 250, 21, - 97, - 7, - 73, - 87, 128, - 96, - 31, - 16, + 21, 97, - 7, - 30, + 10, + 158, 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 7, - 73, - 86, - 91, - 130, - 1, - 145, - 144, + 61, 96, 0, - 82, - 96, - 32, + 128, + 62, + 61, 96, 0, - 32, - 144, + 253, 91, - 129, - 84, - 129, - 82, - 144, + 80, + 80, + 80, + 80, 96, - 1, - 1, - 144, + 64, + 81, + 61, 96, - 32, - 1, - 128, - 131, - 17, - 97, - 7, - 44, - 87, - 130, - 144, - 3, + 31, + 25, 96, 31, + 130, + 1, 22, 130, 1, + 128, + 96, + 64, + 82, + 80, + 129, + 1, + 144, + 97, + 10, + 194, 145, + 144, + 97, + 25, + 65, + 86, 91, + 148, + 147, 80, 80, 80, 80, - 80, - 144, - 80, - 132, 86, 91, 97, - 7, - 91, + 10, + 210, 97, - 11, - 126, + 14, + 250, 86, 91, + 131, 96, 0, - 91, - 129, - 81, - 129, - 16, - 21, + 3, 97, - 9, - 194, + 11, + 21, 87, 96, - 0, - 130, - 130, - 129, + 64, 81, - 129, - 16, - 97, - 7, - 123, - 87, - 97, - 7, - 123, - 97, - 18, - 68, - 86, - 91, + 98, + 70, + 27, + 205, 96, - 32, - 2, + 229, + 27, + 129, + 82, 96, 32, - 1, - 1, - 81, 96, - 0, + 4, + 130, 1, - 81, + 82, 96, - 64, - 81, + 16, 96, - 32, + 36, + 130, 1, - 97, - 7, - 151, - 145, - 144, - 97, - 19, - 189, - 86, + 82, + 111, + 18, + 91, + 157, + 152, 91, + 26, + 89, + 8, + 19, + 84, + 213, + 8, + 28, + 155, + 219, + 221, 96, - 64, - 128, - 81, + 130, + 27, 96, - 31, - 25, - 129, - 132, - 3, + 68, + 130, 1, - 129, - 82, - 145, - 129, 82, - 129, - 81, 96, - 32, - 146, - 131, + 100, 1, - 32, - 96, - 0, - 129, - 129, - 82, - 96, + 97, 2, - 144, - 147, - 82, - 145, - 32, - 84, - 144, - 145, - 80, - 128, - 21, + 12, + 86, + 91, + 129, + 81, + 131, + 81, + 20, 97, - 8, - 13, + 11, + 120, 87, 96, 64, @@ -7909,281 +9832,268 @@ pub mod summa { 1, 82, 96, - 24, + 41, 96, 36, 130, 1, 82, 127, - 65, - 100, - 100, - 114, + 82, + 111, + 111, + 116, + 32, + 97, + 115, + 115, 101, + 116, + 32, 115, + 117, + 109, 115, 32, 97, - 108, - 114, - 101, - 97, + 110, 100, - 121, 32, - 118, + 97, + 115, + 115, 101, - 114, - 105, - 102, - 105, + 116, + 32, + 110, + 117, + 109, + 98, 101, - 100, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 114, 96, 68, 130, 1, 82, + 104, + 4, + 13, + 173, + 46, + 109, + 172, + 46, + 140, + 109, + 96, + 187, + 27, 96, 100, + 130, 1, - 97, - 2, - 34, - 86, - 91, - 97, - 8, - 24, - 131, + 82, 96, + 132, 1, 97, - 18, - 49, + 2, + 12, 86, 91, 96, 0, - 131, - 129, - 82, - 96, - 2, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 85, - 131, + 130, 81, - 96, - 1, - 144, - 133, - 144, - 133, - 144, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, - 16, + 17, + 21, 97, - 8, - 62, + 11, + 148, 87, 97, - 8, - 62, + 11, + 148, 97, - 18, - 68, + 17, + 243, 86, 91, 96, - 32, + 64, + 81, 144, - 129, + 128, + 130, + 82, + 128, + 96, + 32, 2, - 145, - 144, - 145, - 1, - 129, + 96, + 32, 1, - 81, 130, - 84, - 96, 1, + 96, + 64, + 82, + 128, + 21, + 97, + 11, + 199, + 87, 129, + 96, + 32, 1, - 132, - 85, + 91, 96, - 0, - 147, - 132, + 96, + 129, 82, - 145, - 144, - 146, - 32, - 130, - 81, 96, - 4, + 32, + 1, 144, - 146, - 2, + 96, 1, 144, - 129, + 3, 144, + 129, 97, - 8, - 112, + 11, + 178, + 87, 144, - 130, - 97, - 20, - 31, - 86, + 80, 91, 80, + 144, + 80, 96, - 32, - 130, - 1, + 0, + 131, 81, - 96, - 1, - 130, - 1, - 144, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 129, + 17, + 21, 97, - 8, - 133, - 144, - 130, + 11, + 230, + 87, 97, - 20, - 31, + 11, + 230, + 97, + 17, + 243, 86, 91, - 80, 96, 64, - 130, - 1, 81, + 144, + 128, + 130, + 82, + 128, 96, + 32, 2, - 130, + 96, + 32, 1, - 144, - 97, - 8, - 154, - 144, 130, + 1, + 96, + 64, + 82, + 128, + 21, 97, - 20, - 31, - 86, + 12, + 25, + 87, + 129, + 96, + 32, + 1, 91, - 80, 96, 96, - 130, + 129, + 82, + 96, + 32, 1, - 81, + 144, 96, - 3, - 130, 1, 144, - 97, - 8, - 175, + 3, 144, - 130, - 97, - 20, - 31, - 86, - 91, - 80, - 80, - 80, - 131, - 131, - 129, - 81, 129, - 16, 97, - 8, - 196, + 12, + 4, 87, - 97, - 8, - 196, - 97, - 18, - 68, - 86, + 144, + 80, 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, + 80, + 144, + 80, 96, 0, - 1, - 81, + 91, + 132, 81, - 96, - 0, - 20, - 21, - 128, + 129, + 16, 21, 97, - 9, - 0, - 87, - 80, - 131, - 131, + 13, + 182, + 87, + 132, + 129, 129, 81, 129, 16, 97, - 8, - 238, + 12, + 58, 87, 97, - 8, - 238, + 12, + 58, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -8203,30 +10113,29 @@ pub mod summa { 0, 20, 21, - 91, 128, 21, 97, - 9, - 43, + 12, + 118, 87, 80, - 131, - 131, + 132, + 129, 129, 81, 129, 16, 97, - 9, - 25, + 12, + 100, 87, 97, - 9, - 25, + 12, + 100, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -8238,7 +10147,7 @@ pub mod summa { 1, 81, 96, - 64, + 0, 1, 81, 81, @@ -8247,29 +10156,82 @@ pub mod summa { 20, 21, 91, - 128, - 21, 97, - 9, - 86, + 12, + 178, 87, - 80, - 131, - 131, + 96, + 64, + 81, + 98, + 70, + 27, + 205, + 96, + 229, + 27, + 129, + 82, + 96, + 32, + 96, + 4, + 130, + 1, + 82, + 96, + 13, + 96, + 36, + 130, + 1, + 82, + 108, + 18, + 91, + 157, + 152, + 91, + 26, + 89, + 8, + 24, + 92, + 220, + 217, + 93, + 96, + 154, + 27, + 96, + 68, + 130, + 1, + 82, + 96, + 100, + 1, + 97, + 2, + 12, + 86, + 91, + 133, + 129, 129, 81, 129, 16, 97, - 9, - 68, + 12, + 196, 87, 97, - 9, - 68, + 12, + 196, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -8281,18 +10243,11 @@ pub mod summa { 1, 81, 96, - 96, - 1, - 81, - 81, - 96, 0, - 20, - 21, - 91, + 3, 97, - 9, - 173, + 13, + 45, 87, 96, 64, @@ -8314,55 +10269,62 @@ pub mod summa { 1, 82, 96, - 34, + 41, 96, 36, 130, 1, 82, 127, - 73, - 110, - 118, - 97, + 65, + 108, 108, - 105, - 100, 32, - 112, 114, 111, 111, - 102, - 32, - 111, - 102, + 116, 32, - 97, - 100, - 100, - 114, - 101, 115, + 117, + 109, 115, 32, + 115, + 104, 111, - 119, - 110, + 117, + 108, + 100, + 32, + 98, 101, + 32, + 103, 114, - 115, - 104, + 101, + 97, + 116, + 101, + 114, + 32, 96, 68, 130, 1, 82, + 104, + 116, + 104, 97, - 6, - 151, + 110, + 32, + 122, + 101, + 114, + 111, 96, - 244, + 184, 27, 96, 100, @@ -8374,108 +10336,55 @@ pub mod summa { 1, 97, 2, - 34, - 86, - 91, - 80, - 80, - 128, - 128, - 97, - 9, - 186, - 144, - 97, - 18, - 90, - 86, - 91, - 145, - 80, - 80, - 97, - 7, - 94, + 12, 86, 91, - 80, - 127, - 56, - 35, - 21, - 212, - 213, - 106, - 96, - 53, - 225, - 137, - 155, - 255, - 231, - 125, - 155, - 236, - 239, - 175, - 95, - 38, - 80, - 228, - 50, - 59, - 39, - 133, - 72, - 87, - 160, - 69, - 70, - 88, + 132, + 129, 129, - 96, - 64, 81, + 129, + 16, 97, - 9, - 242, - 145, - 144, + 13, + 63, + 87, + 97, + 13, + 63, 97, - 20, - 223, + 22, + 235, 86, 91, 96, - 64, + 32, + 2, + 96, + 32, + 1, + 1, 81, - 128, - 145, - 3, - 144, - 161, - 80, - 86, - 91, 96, 0, - 130, - 96, 1, + 81, + 131, + 130, 129, 81, 129, 16, 97, - 10, - 18, + 13, + 93, 87, 97, - 10, - 18, + 13, + 93, 97, - 18, - 68, + 22, + 235, 86, 91, 96, @@ -8485,236 +10394,285 @@ pub mod summa { 32, 1, 1, + 129, + 144, + 82, + 80, + 132, + 129, + 129, 81, + 129, + 16, + 97, + 13, + 122, + 87, + 97, + 13, + 122, + 97, + 22, + 235, + 86, + 91, 96, - 3, + 32, + 2, 96, - 0, - 132, - 129, - 82, + 32, + 1, + 1, + 81, 96, 32, 1, - 144, + 81, + 130, + 130, 129, - 82, + 81, + 129, + 16, + 97, + 13, + 152, + 87, + 97, + 13, + 152, + 97, + 22, + 235, + 86, + 91, 96, 32, - 1, + 2, 96, - 0, 32, - 84, - 20, + 1, + 1, + 129, + 144, + 82, + 80, + 128, + 128, 97, - 10, - 110, - 87, + 13, + 174, + 144, + 97, + 24, + 102, + 86, + 91, + 145, + 80, + 80, + 97, + 12, + 31, + 86, + 91, + 80, 96, 64, + 128, 81, - 98, - 70, - 27, - 205, 96, - 229, - 27, + 128, + 129, + 1, + 130, + 82, + 135, 129, 82, 96, 32, - 96, - 4, + 128, 130, 1, + 136, + 129, 82, - 96, - 16, - 96, - 36, 130, + 132, 1, + 134, + 144, 82, - 111, - 18, - 91, - 157, - 152, - 91, - 26, - 89, - 8, - 19, - 84, - 213, - 8, - 28, - 155, - 219, - 221, 96, - 130, - 27, 96, - 68, - 130, + 131, 1, + 133, + 144, 82, 96, - 100, - 1, - 97, - 2, - 34, - 86, - 91, - 96, - 64, - 81, - 99, - 11, - 210, - 5, - 169, - 96, - 228, - 27, + 0, + 135, 129, 82, 96, - 1, - 96, - 1, - 96, - 160, - 27, 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, + 131, + 82, + 147, 144, - 99, - 189, + 147, 32, - 90, - 144, - 144, + 130, + 81, + 129, + 85, + 146, + 81, + 128, + 81, + 146, + 147, + 146, 97, - 10, - 188, - 144, - 134, - 144, - 136, - 144, + 14, + 1, + 146, 96, - 4, 1, + 133, + 1, + 146, + 1, + 144, 97, - 19, - 10, + 15, + 164, 86, 91, - 96, - 32, + 80, 96, 64, + 130, + 1, 81, 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, + 81, 97, - 10, - 217, - 87, - 61, + 14, + 29, + 145, 96, - 0, - 128, - 62, - 61, + 2, + 132, + 1, + 145, 96, - 0, - 253, + 32, + 144, + 145, + 1, + 144, + 97, + 15, + 239, + 86, 91, 80, - 80, - 80, - 80, 96, - 64, + 96, + 130, + 1, 81, - 61, + 128, + 81, + 97, + 14, + 57, + 145, 96, - 31, - 25, + 3, + 132, + 1, + 145, 96, - 31, - 130, + 32, + 144, + 145, 1, - 22, + 144, + 97, + 15, + 239, + 86, + 91, + 80, + 144, + 80, + 80, 130, - 1, + 127, + 136, + 191, + 199, + 56, + 156, + 184, + 49, + 234, + 2, + 8, + 255, + 16, + 109, + 166, + 245, + 201, + 248, 128, + 54, + 186, + 8, + 79, + 30, + 176, + 8, + 210, + 120, + 141, + 61, + 69, + 153, + 141, + 135, + 135, + 135, 96, 64, - 82, - 80, - 129, - 1, - 144, + 81, 97, - 10, - 253, + 14, + 113, + 147, + 146, 145, 144, 97, - 19, - 97, + 25, + 99, 86, 91, - 148, - 147, + 96, + 64, + 81, + 128, + 145, + 3, + 144, + 162, + 80, + 80, 80, 80, 80, @@ -8722,11 +10680,11 @@ pub mod summa { 86, 91, 97, - 11, - 13, + 14, + 137, 97, - 11, - 126, + 14, + 250, 86, 91, 96, @@ -8740,8 +10698,8 @@ pub mod summa { 129, 22, 97, - 11, - 114, + 14, + 238, 87, 96, 64, @@ -8827,16 +10785,16 @@ pub mod summa { 1, 97, 2, - 34, + 12, 86, 91, 97, - 11, - 123, + 14, + 247, 129, 97, - 11, - 216, + 15, + 84, 86, 91, 80, @@ -8858,7 +10816,7 @@ pub mod summa { 20, 97, 4, - 241, + 188, 87, 96, 64, @@ -8929,7 +10887,7 @@ pub mod summa { 1, 97, 2, - 34, + 12, 86, 91, 96, @@ -9012,789 +10970,708 @@ pub mod summa { 80, 86, 91, - 96, - 0, - 96, - 32, 130, - 132, - 3, - 18, - 21, - 97, - 12, - 58, - 87, - 96, - 0, 128, - 253, - 91, - 80, - 53, - 145, - 144, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 64, - 81, - 96, - 96, - 129, - 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, + 84, 130, - 16, - 23, - 21, - 97, - 12, - 122, - 87, - 97, - 12, - 122, - 97, - 12, - 65, - 86, - 91, + 130, + 85, + 144, 96, - 64, + 0, 82, - 144, - 86, - 91, 96, - 64, - 81, + 32, 96, - 128, + 0, + 32, + 144, 129, 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, + 146, 130, - 16, - 23, 21, 97, - 12, - 122, + 15, + 223, 87, - 97, - 12, - 122, - 97, - 12, - 65, - 86, - 91, - 96, - 64, - 81, + 145, 96, - 31, + 32, + 2, 130, 1, - 96, - 31, - 25, - 22, - 129, - 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, + 91, + 130, 129, 17, - 130, - 130, - 16, - 23, 21, 97, - 12, - 204, + 15, + 223, 87, - 97, - 12, - 204, - 97, - 12, - 65, - 86, - 91, + 130, + 81, + 130, + 85, + 145, 96, - 64, - 82, + 32, + 1, 145, 144, - 80, - 86, - 91, 96, - 0, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 130, - 17, - 21, + 1, + 1, + 144, 97, - 12, - 238, - 87, + 15, + 196, + 86, + 91, + 80, 97, - 12, - 238, + 15, + 235, + 146, + 145, + 80, 97, - 12, + 16, 65, 86, 91, 80, - 96, - 5, - 27, - 96, - 32, - 1, 144, 86, 91, + 130, + 128, + 84, + 130, + 130, + 85, + 144, 96, 0, - 130, + 82, 96, - 31, - 131, - 1, - 18, - 97, - 13, - 9, - 87, + 32, 96, 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, + 32, + 144, 129, - 17, + 1, + 146, + 130, 21, 97, - 13, - 35, + 16, + 53, 87, - 97, - 13, - 35, - 97, - 12, - 65, - 86, - 91, - 97, - 13, - 54, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, + 145, 96, 32, + 2, + 130, 1, - 97, - 12, - 163, - 86, 91, + 130, 129, - 129, - 82, - 132, - 96, - 32, - 131, - 134, - 1, - 1, 17, 21, 97, - 13, - 75, + 16, + 53, 87, - 96, - 0, - 128, - 253, + 130, + 81, + 130, + 144, + 97, + 16, + 37, + 144, + 130, + 97, + 23, + 166, + 86, 91, - 129, - 96, - 32, - 133, - 1, + 80, + 145, 96, 32, - 131, 1, - 55, - 96, - 0, 145, - 129, - 1, + 144, 96, - 32, 1, - 145, + 1, 144, - 145, - 82, - 147, - 146, - 80, + 97, + 16, + 15, + 86, + 91, 80, + 97, + 15, + 235, + 146, + 145, 80, + 97, + 16, + 86, 86, 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, + 91, 128, - 133, - 135, - 3, - 18, + 130, + 17, 21, 97, - 13, - 126, + 15, + 235, 87, 96, 0, - 128, - 253, - 91, - 132, - 53, - 147, - 80, + 129, + 85, 96, - 32, - 133, 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, + 1, + 97, + 16, + 66, + 86, + 91, 128, 130, 17, 21, 97, - 13, - 157, + 15, + 235, 87, 96, 0, - 128, - 253, + 97, + 16, + 106, + 130, + 130, + 97, + 16, + 115, + 86, 91, - 129, - 135, - 1, - 145, 80, - 135, 96, - 31, - 131, 1, - 18, + 1, 97, - 13, - 177, - 87, - 96, - 0, - 128, - 253, + 16, + 86, + 86, 91, + 80, + 128, + 84, 97, - 13, - 195, - 97, - 13, - 190, - 131, - 53, + 16, + 127, + 144, 97, - 12, - 212, + 23, + 1, 86, 91, + 96, + 0, + 130, + 85, + 128, + 96, + 31, + 16, 97, - 12, - 163, + 16, + 143, + 87, + 80, + 80, 86, 91, - 130, - 53, - 128, - 130, + 96, + 31, + 1, + 96, + 32, + 144, + 4, + 144, + 96, + 0, 82, 96, 32, - 128, - 131, + 96, + 0, + 32, + 144, + 129, 1, - 146, + 144, + 97, + 14, + 247, 145, + 144, + 97, + 16, + 65, + 86, + 91, 96, - 5, - 27, - 133, - 1, - 1, - 138, - 129, - 17, + 0, + 96, + 32, + 130, + 132, + 3, + 18, 21, 97, - 13, - 226, + 16, + 191, 87, 96, 0, 128, 253, 91, + 80, + 53, + 145, + 144, + 80, + 86, + 91, 96, - 32, - 133, - 1, + 0, 91, - 129, + 131, 129, 16, 21, 97, - 14, - 132, + 16, + 225, 87, - 132, 129, - 53, - 17, - 21, + 129, + 1, + 81, + 131, + 130, + 1, + 82, + 96, + 32, + 1, 97, - 13, - 253, - 87, + 16, + 201, + 86, + 91, + 80, + 80, 96, 0, - 128, - 253, + 145, + 1, + 82, + 86, 91, + 96, + 0, + 129, + 81, 128, - 53, + 132, + 82, + 97, + 17, + 2, + 129, + 96, + 32, 134, 1, 96, + 32, + 134, + 1, + 97, + 16, + 198, + 86, + 91, 96, - 129, - 142, - 3, + 31, + 1, 96, 31, 25, + 22, + 146, + 144, + 146, 1, - 18, - 21, - 97, - 14, - 21, - 87, + 96, + 32, + 1, + 146, + 145, + 80, + 80, + 86, + 91, 96, 0, + 129, + 81, + 96, 128, - 253, - 91, + 132, + 82, 97, - 14, - 29, + 17, + 43, + 96, + 128, + 133, + 1, + 130, 97, - 12, - 87, + 16, + 234, 86, 91, + 144, + 80, 96, 32, + 131, + 1, + 81, + 132, 130, + 3, + 96, + 32, + 134, 1, - 53, - 135, - 129, + 82, + 97, 17, - 21, + 68, + 130, + 130, 97, - 14, - 47, - 87, - 96, - 0, - 128, - 253, + 16, + 234, + 86, 91, - 97, - 14, - 62, - 143, + 145, + 80, + 80, 96, - 32, + 64, 131, - 134, 1, + 81, + 132, + 130, + 3, + 96, + 64, + 134, 1, + 82, 97, - 12, - 248, + 17, + 94, + 130, + 130, + 97, + 16, + 234, 86, 91, - 130, - 82, + 145, + 80, 80, 96, - 64, + 96, + 131, + 1, + 81, + 132, 130, + 3, + 96, + 96, + 134, 1, - 53, - 135, - 129, + 82, + 97, 17, - 21, + 120, + 130, + 130, 97, - 14, - 83, - 87, + 16, + 234, + 86, + 91, + 149, + 148, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 96, + 32, + 129, + 82, 96, 0, - 128, - 253, - 91, 97, - 14, - 98, - 143, + 17, + 148, 96, 32, 131, - 134, - 1, 1, + 132, 97, - 12, - 248, + 17, + 22, + 86, + 91, + 147, + 146, + 80, + 80, + 80, 86, 91, 96, - 32, - 131, + 128, 129, - 1, - 145, - 144, - 145, 82, 96, + 0, + 97, + 17, + 174, 96, - 147, - 144, - 147, - 1, - 53, - 96, - 64, + 128, 131, 1, - 82, - 80, - 133, - 82, - 147, + 135, + 97, + 16, + 234, + 86, + 91, + 130, + 129, + 3, + 96, + 32, 132, 1, - 147, - 1, + 82, 97, - 13, - 231, + 17, + 192, + 129, + 135, + 97, + 16, + 234, 86, 91, - 80, 144, - 150, - 80, - 80, 80, + 130, + 129, + 3, 96, 64, - 135, + 132, 1, - 53, - 145, - 80, - 128, - 130, + 82, + 97, 17, - 21, + 212, + 129, + 134, 97, - 14, - 158, - 87, - 96, - 0, - 128, - 253, + 16, + 234, + 86, 91, + 144, 80, - 97, - 14, - 171, - 135, 130, - 136, + 129, + 3, + 96, + 96, + 132, 1, + 82, 97, - 12, - 248, + 17, + 232, + 129, + 133, + 97, + 16, + 234, 86, 91, - 148, 151, - 147, 150, 80, - 147, - 148, - 96, - 96, - 1, - 53, - 147, + 80, + 80, + 80, 80, 80, 80, 86, 91, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, 96, 0, - 130, + 82, 96, - 31, - 131, - 1, - 18, - 97, - 14, - 205, - 87, + 65, + 96, + 4, + 82, + 96, + 36, 96, 0, - 128, 253, 91, - 129, - 53, 96, - 32, + 64, + 81, + 96, + 128, + 129, + 1, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 129, + 17, + 130, + 130, + 16, + 23, + 21, 97, - 14, - 221, + 18, + 44, + 87, 97, - 13, - 190, - 131, + 18, + 44, 97, - 12, - 212, + 17, + 243, 86, 91, - 130, - 129, + 96, + 64, 82, + 144, + 86, + 91, 96, - 5, - 146, + 64, + 128, + 81, 144, - 146, - 27, - 132, - 1, 129, 1, - 145, - 129, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, - 1, - 144, - 134, - 132, 17, - 21, - 97, - 14, - 252, - 87, - 96, - 0, - 128, - 253, - 91, 130, - 134, - 1, - 91, - 132, - 129, + 130, 16, + 23, 21, 97, - 15, - 23, + 18, + 44, 87, - 128, - 53, - 131, - 82, - 145, - 131, - 1, - 145, - 131, - 1, 97, - 15, - 0, - 86, - 91, - 80, - 150, - 149, - 80, - 80, - 80, - 80, - 80, - 80, + 18, + 44, + 97, + 17, + 243, 86, 91, 96, - 0, - 128, - 96, 64, - 131, - 133, - 3, - 18, - 21, - 97, - 15, - 53, - 87, + 81, 96, - 0, - 128, - 253, - 91, + 31, 130, - 53, + 1, + 96, + 31, + 25, + 22, + 129, + 1, 103, 255, 255, @@ -9804,229 +11681,176 @@ pub mod summa { 255, 255, 255, - 128, - 130, + 129, 17, + 130, + 130, + 16, + 23, 21, 97, - 15, - 77, + 18, + 126, 87, - 96, - 0, - 128, - 253, - 91, 97, - 15, - 89, - 134, - 131, - 135, - 1, + 18, + 126, 97, - 12, - 248, + 17, + 243, 86, 91, - 147, - 80, 96, - 32, - 133, - 1, - 53, + 64, + 82, 145, + 144, 80, - 128, + 86, + 91, + 96, + 0, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 130, 17, 21, 97, - 15, - 111, + 18, + 160, 87, - 96, - 0, - 128, - 253, - 91, - 80, 97, - 15, - 124, - 133, - 130, - 134, - 1, + 18, + 160, 97, - 14, - 188, + 17, + 243, 86, 91, - 145, - 80, 80, - 146, - 80, - 146, + 96, + 5, + 27, + 96, + 32, + 1, 144, - 80, 86, 91, 96, 0, - 129, - 81, + 130, + 96, + 31, + 131, + 1, + 18, + 97, + 18, + 187, + 87, + 96, + 0, 128, - 132, - 82, - 96, - 0, + 253, 91, 129, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 129, - 16, + 17, 21, 97, - 15, - 172, + 18, + 213, 87, - 96, - 32, - 129, - 133, - 1, - 129, - 1, - 81, - 134, - 131, - 1, - 130, - 1, - 82, - 1, 97, - 15, - 144, + 18, + 213, + 97, + 17, + 243, 86, 91, - 80, - 96, - 0, + 97, + 18, + 232, 96, - 32, + 31, 130, - 134, 1, - 1, - 82, - 96, - 32, 96, 31, 25, - 96, - 31, - 131, - 1, 22, - 133, - 1, + 96, + 32, 1, - 145, - 80, - 80, - 146, - 145, - 80, - 80, + 97, + 18, + 85, 86, 91, - 96, - 128, + 129, 129, 82, + 132, 96, - 0, - 97, - 15, - 223, - 96, - 128, + 32, 131, + 134, 1, - 135, + 1, + 17, + 21, 97, - 15, - 134, - 86, + 18, + 253, + 87, + 96, + 0, + 128, + 253, 91, - 130, 129, - 3, 96, 32, - 132, + 133, 1, - 82, - 97, - 15, - 241, - 129, - 135, - 97, - 15, - 134, - 86, - 91, - 144, - 80, - 130, - 129, - 3, 96, - 64, - 132, + 32, + 131, 1, - 82, - 97, - 16, - 5, - 129, - 134, - 97, - 15, - 134, - 86, - 91, - 144, - 80, - 130, - 129, - 3, + 55, 96, + 0, + 145, + 129, + 1, 96, - 132, + 32, 1, + 145, + 144, + 145, 82, - 97, - 16, - 25, - 129, - 133, - 97, - 15, - 134, - 86, - 91, - 151, - 150, - 80, - 80, - 80, - 80, + 147, + 146, 80, 80, 80, @@ -10043,8 +11867,8 @@ pub mod summa { 18, 21, 97, - 16, - 55, + 19, + 45, 87, 96, 0, @@ -10067,8 +11891,8 @@ pub mod summa { 17, 21, 97, - 16, - 79, + 19, + 69, 87, 96, 0, @@ -10087,8 +11911,8 @@ pub mod summa { 1, 18, 97, - 16, - 99, + 19, + 89, 87, 96, 0, @@ -10098,15 +11922,20 @@ pub mod summa { 129, 53, 97, - 16, - 113, + 19, + 108, 97, - 13, - 190, + 19, + 103, 130, 97, - 12, - 212, + 18, + 134, + 86, + 91, + 97, + 18, + 85, 86, 91, 129, @@ -10132,8 +11961,8 @@ pub mod summa { 17, 21, 97, - 16, - 144, + 19, + 139, 87, 96, 0, @@ -10149,8 +11978,8 @@ pub mod summa { 16, 21, 97, - 17, - 113, + 20, + 108, 87, 128, 53, @@ -10159,8 +11988,8 @@ pub mod summa { 17, 21, 97, - 16, - 171, + 19, + 166, 87, 96, 0, @@ -10181,8 +12010,8 @@ pub mod summa { 18, 21, 97, - 16, - 194, + 19, + 189, 87, 96, 0, @@ -10191,11 +12020,11 @@ pub mod summa { 253, 91, 97, - 16, - 202, + 19, + 197, 97, - 12, - 128, + 18, + 9, 86, 91, 136, @@ -10207,8 +12036,8 @@ pub mod summa { 17, 21, 97, - 16, - 220, + 19, + 215, 87, 96, 0, @@ -10217,8 +12046,8 @@ pub mod summa { 253, 91, 97, - 16, - 234, + 19, + 229, 141, 139, 131, @@ -10226,8 +12055,8 @@ pub mod summa { 1, 1, 97, - 12, - 248, + 18, + 170, 86, 91, 130, @@ -10244,8 +12073,8 @@ pub mod summa { 17, 21, 97, - 17, - 1, + 19, + 252, 87, 96, 0, @@ -10254,8 +12083,8 @@ pub mod summa { 253, 91, 97, - 17, - 15, + 20, + 10, 142, 140, 131, @@ -10263,8 +12092,8 @@ pub mod summa { 1, 1, 97, - 12, - 248, + 18, + 170, 86, 91, 139, @@ -10283,8 +12112,8 @@ pub mod summa { 17, 21, 97, - 17, - 40, + 20, + 35, 87, 96, 0, @@ -10293,8 +12122,8 @@ pub mod summa { 253, 91, 97, - 17, - 54, + 20, + 49, 143, 141, 131, @@ -10302,8 +12131,8 @@ pub mod summa { 1, 1, 97, - 12, - 248, + 18, + 170, 86, 91, 131, @@ -10323,8 +12152,8 @@ pub mod summa { 17, 21, 97, - 17, - 80, + 20, + 75, 87, 96, 0, @@ -10333,8 +12162,8 @@ pub mod summa { 253, 91, 97, - 17, - 94, + 20, + 89, 142, 140, 132, @@ -10342,8 +12171,8 @@ pub mod summa { 1, 1, 97, - 12, - 248, + 18, + 170, 86, 91, 144, @@ -10361,8 +12190,8 @@ pub mod summa { 134, 1, 97, - 16, - 148, + 19, + 143, 86, 91, 80, @@ -10380,6 +12209,108 @@ pub mod summa { 91, 96, 0, + 130, + 96, + 31, + 131, + 1, + 18, + 97, + 20, + 138, + 87, + 96, + 0, + 128, + 253, + 91, + 129, + 53, + 96, + 32, + 97, + 20, + 154, + 97, + 19, + 103, + 131, + 97, + 18, + 134, + 86, + 91, + 130, + 129, + 82, + 96, + 5, + 146, + 144, + 146, + 27, + 132, + 1, + 129, + 1, + 145, + 129, + 129, + 1, + 144, + 134, + 132, + 17, + 21, + 97, + 20, + 185, + 87, + 96, + 0, + 128, + 253, + 91, + 130, + 134, + 1, + 91, + 132, + 129, + 16, + 21, + 97, + 20, + 212, + 87, + 128, + 53, + 131, + 82, + 145, + 131, + 1, + 145, + 131, + 1, + 97, + 20, + 189, + 86, + 91, + 80, + 150, + 149, + 80, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 96, + 0, 128, 96, 0, @@ -10391,8 +12322,8 @@ pub mod summa { 18, 21, 97, - 17, - 147, + 20, + 244, 87, 96, 0, @@ -10415,8 +12346,8 @@ pub mod summa { 17, 21, 97, - 17, - 171, + 21, + 12, 87, 96, 0, @@ -10424,15 +12355,15 @@ pub mod summa { 253, 91, 97, - 17, - 183, + 21, + 24, 135, 131, 136, 1, 97, - 12, - 248, + 18, + 170, 86, 91, 148, @@ -10449,8 +12380,8 @@ pub mod summa { 17, 21, 97, - 17, - 205, + 21, + 46, 87, 96, 0, @@ -10459,15 +12390,15 @@ pub mod summa { 91, 80, 97, - 17, - 218, + 21, + 59, 134, 130, 135, 1, 97, - 14, - 188, + 20, + 121, 86, 91, 146, @@ -10489,370 +12420,323 @@ pub mod summa { 91, 96, 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 17, - 253, - 87, + 128, 96, 0, 128, - 253, - 91, - 129, - 53, - 96, - 1, - 96, - 1, 96, - 160, - 27, + 128, + 133, + 135, 3, - 129, - 22, - 129, - 20, - 97, 18, - 20, + 21, + 97, + 21, + 98, 87, 96, 0, 128, 253, 91, + 132, + 53, 147, - 146, - 80, - 80, 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 17, - 96, - 4, - 82, - 96, - 36, 96, - 0, - 253, - 91, - 128, - 130, + 32, + 133, 1, + 53, + 103, + 255, + 255, + 255, + 255, + 255, + 255, + 255, + 255, 128, 130, 17, 21, 97, - 4, - 217, - 87, - 97, - 4, - 217, - 97, - 18, - 27, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 50, - 96, - 4, - 82, - 96, - 36, + 21, + 129, + 87, 96, 0, + 128, 253, 91, - 96, - 0, - 96, - 1, - 130, - 1, 97, - 18, - 108, - 87, - 97, - 18, - 108, + 21, + 141, + 136, + 131, + 137, + 1, 97, - 18, - 27, + 20, + 121, 86, 91, + 148, 80, 96, + 64, + 135, 1, - 1, - 144, - 86, - 91, + 53, + 145, + 80, + 128, + 130, + 17, + 21, + 97, + 21, + 163, + 87, 96, 0, - 96, - 64, 128, - 131, + 253, + 91, + 129, + 135, 1, - 133, - 132, - 82, + 145, + 80, + 135, 96, - 32, - 130, - 129, - 134, + 31, + 131, 1, - 82, - 129, + 18, + 97, + 21, + 183, + 87, + 96, + 0, + 128, + 253, + 91, + 97, + 21, + 196, + 97, + 19, + 103, + 131, + 53, + 97, + 18, 134, - 81, + 86, + 91, + 130, + 53, 128, - 132, + 130, 82, 96, - 96, - 147, - 80, + 32, + 128, 131, - 135, 1, + 146, 145, - 80, - 131, - 129, 96, 5, 27, - 136, - 1, + 133, 1, - 131, - 137, 1, + 138, + 129, + 17, + 21, + 97, + 21, + 227, + 87, 96, 0, + 128, + 253, 91, - 131, + 96, + 32, + 133, + 1, + 91, + 129, 129, 16, 21, 97, - 18, - 250, + 22, + 127, 87, - 137, - 131, - 3, - 96, - 95, - 25, - 1, - 133, - 82, + 132, 129, - 81, - 128, - 81, - 136, - 133, - 82, - 97, - 18, - 197, - 137, - 134, - 1, - 130, + 53, + 17, + 21, 97, - 15, - 134, - 86, + 21, + 254, + 87, + 96, + 0, + 128, + 253, 91, - 144, - 80, - 135, - 130, + 128, + 53, + 134, 1, - 81, - 133, - 130, + 96, + 64, + 129, + 142, 3, - 137, - 135, + 96, + 31, + 25, 1, - 82, - 97, 18, - 220, - 130, - 130, + 21, 97, - 15, - 134, - 86, - 91, - 146, - 139, - 1, - 81, - 149, - 139, - 1, - 149, - 144, - 149, - 82, - 80, - 148, - 134, - 1, - 148, - 146, - 80, - 144, - 133, - 1, - 144, + 22, + 22, + 87, 96, - 1, - 1, + 0, + 128, + 253, + 91, + 97, + 22, + 30, 97, 18, - 161, - 86, - 91, - 80, - 144, - 154, - 153, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, + 50, 86, 91, 96, - 64, - 128, - 130, - 82, - 131, - 81, - 144, + 32, 130, 1, + 53, + 135, 129, - 144, - 82, + 17, + 21, + 97, + 22, + 48, + 87, 96, 0, - 144, + 128, + 253, + 91, + 97, + 22, + 63, + 143, 96, 32, - 144, - 96, - 96, - 132, + 131, + 134, 1, - 144, - 130, - 135, 1, - 132, + 97, + 18, + 170, + 86, 91, 130, + 82, + 80, + 96, + 64, + 130, + 1, + 53, + 135, 129, - 16, + 17, 21, 97, - 19, - 67, + 22, + 84, 87, - 129, - 81, - 132, - 82, - 146, - 132, - 1, - 146, - 144, - 132, - 1, - 144, 96, + 0, + 128, + 253, + 91, + 97, + 22, + 99, + 143, + 96, + 32, + 131, + 134, 1, 1, 97, - 19, - 39, + 18, + 170, 86, 91, + 96, + 32, + 131, + 1, + 82, 80, + 128, + 134, + 82, 80, 80, - 131, - 129, - 3, - 130, - 133, + 96, + 32, + 132, 1, - 82, - 97, - 19, - 87, + 147, + 80, + 96, + 32, 129, - 134, + 1, + 144, + 80, 97, - 15, - 134, + 21, + 232, 86, 91, + 80, + 151, + 154, + 150, + 153, + 80, + 151, + 96, + 96, + 1, + 53, 150, - 149, 80, 80, 80, @@ -10871,8 +12755,8 @@ pub mod summa { 18, 21, 97, - 19, - 115, + 22, + 165, 87, 96, 0, @@ -10880,21 +12764,97 @@ pub mod summa { 253, 91, 129, - 81, - 128, - 21, - 21, + 53, + 96, + 1, + 96, + 1, + 96, + 160, + 27, + 3, + 129, + 22, 129, 20, 97, - 18, - 20, + 17, + 148, 87, 96, 0, 128, 253, 91, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, + 96, + 0, + 82, + 96, + 17, + 96, + 4, + 82, + 96, + 36, + 96, + 0, + 253, + 91, + 129, + 129, + 3, + 129, + 129, + 17, + 21, + 97, + 22, + 229, + 87, + 97, + 22, + 229, + 97, + 22, + 188, + 86, + 91, + 146, + 145, + 80, + 80, + 86, + 91, + 99, + 78, + 72, + 123, + 113, + 96, + 224, + 27, + 96, + 0, + 82, + 96, + 50, + 96, + 4, + 82, + 96, + 36, + 96, + 0, + 253, + 91, 96, 1, 129, @@ -10905,8 +12865,8 @@ pub mod summa { 22, 128, 97, - 19, - 151, + 23, + 21, 87, 96, 127, @@ -10922,8 +12882,8 @@ pub mod summa { 129, 3, 97, - 19, - 183, + 23, + 53, 87, 99, 78, @@ -10954,22 +12914,31 @@ pub mod summa { 86, 91, 96, - 32, - 129, - 82, - 96, 0, + 130, + 81, 97, - 4, - 214, + 23, + 77, + 129, + 132, 96, 32, - 131, + 135, 1, - 132, 97, - 15, - 134, + 16, + 198, + 86, + 91, + 145, + 144, + 145, + 1, + 146, + 145, + 80, + 80, 86, 91, 96, @@ -10978,8 +12947,8 @@ pub mod summa { 17, 21, 97, - 20, - 26, + 23, + 161, 87, 96, 0, @@ -11005,8 +12974,8 @@ pub mod summa { 16, 21, 97, - 19, - 247, + 23, + 126, 87, 80, 128, @@ -11028,8 +12997,8 @@ pub mod summa { 16, 21, 97, - 20, - 22, + 23, + 157, 87, 130, 129, @@ -11038,8 +13007,8 @@ pub mod summa { 1, 1, 97, - 20, - 3, + 23, + 138, 86, 91, 80, @@ -11066,35 +13035,35 @@ pub mod summa { 17, 21, 97, - 20, - 57, + 23, + 192, 87, 97, - 20, - 57, + 23, + 192, 97, - 12, - 65, + 17, + 243, 86, 91, 97, - 20, - 77, + 23, + 212, 129, 97, - 20, - 71, + 23, + 206, 132, 84, 97, - 19, - 131, + 23, + 1, 86, 91, 132, 97, - 19, - 208, + 23, + 87, 86, 91, 96, @@ -11109,16 +13078,16 @@ pub mod summa { 129, 20, 97, - 20, - 130, + 24, + 9, 87, 96, 0, 132, 21, 97, - 20, - 106, + 23, + 241, 87, 80, 133, @@ -11146,8 +13115,8 @@ pub mod summa { 133, 85, 97, - 20, - 22, + 23, + 157, 86, 91, 96, @@ -11166,118 +13135,392 @@ pub mod summa { 22, 145, 91, - 130, + 130, + 129, + 16, + 21, + 97, + 24, + 56, + 87, + 136, + 134, + 1, + 81, + 130, + 85, + 148, + 132, + 1, + 148, + 96, + 1, + 144, + 145, + 1, + 144, + 132, + 1, + 97, + 24, + 25, + 86, + 91, + 80, + 133, + 130, + 16, + 21, + 97, + 24, + 86, + 87, + 135, + 133, + 1, + 81, + 96, + 0, + 25, + 96, + 3, + 136, + 144, + 27, + 96, + 248, + 22, + 28, + 25, + 22, + 129, + 85, + 91, + 80, + 80, + 80, + 80, + 80, + 96, + 1, + 144, + 129, + 27, + 1, + 144, + 85, + 80, + 86, + 91, + 96, + 0, + 96, + 1, + 130, + 1, + 97, + 24, + 120, + 87, + 97, + 24, + 120, + 97, + 22, + 188, + 86, + 91, + 80, + 96, + 1, + 1, + 144, + 86, + 91, + 96, + 0, + 96, + 32, + 128, + 131, + 1, + 129, + 132, + 82, + 128, + 133, + 81, + 128, + 131, + 82, + 96, + 64, + 134, + 1, + 145, + 80, + 96, + 64, + 129, + 96, + 5, + 27, + 135, + 1, + 1, + 146, + 80, + 131, + 135, + 1, + 96, + 0, + 91, + 130, + 129, + 16, + 21, + 97, + 24, + 212, + 87, + 96, + 63, + 25, + 136, + 134, + 3, + 1, + 132, + 82, + 97, + 24, + 194, + 133, + 131, + 81, + 97, + 17, + 22, + 86, + 91, + 148, + 80, + 146, + 133, + 1, + 146, + 144, + 133, + 1, + 144, + 96, + 1, + 1, + 97, + 24, + 166, + 86, + 91, + 80, + 146, + 151, + 150, + 80, + 80, + 80, + 80, + 80, + 80, + 80, + 86, + 91, + 96, + 0, + 129, + 81, + 128, + 132, + 82, + 96, + 32, + 128, + 133, + 1, + 148, + 80, + 128, + 132, + 1, + 96, + 0, + 91, + 131, 129, 16, 21, 97, - 20, - 177, + 25, + 17, 87, - 136, - 134, - 1, + 129, 81, + 135, + 82, + 149, 130, - 85, - 148, - 132, - 1, - 148, - 96, 1, + 149, 144, - 145, + 130, 1, 144, - 132, + 96, + 1, 1, 97, - 20, - 146, + 24, + 245, 86, 91, 80, - 133, - 130, - 16, - 21, - 97, - 20, - 207, - 87, - 135, - 133, - 1, - 81, - 96, - 0, - 25, - 96, - 3, - 136, - 144, - 27, - 96, - 248, - 22, - 28, - 25, - 22, - 129, - 85, - 91, + 148, + 149, + 148, 80, 80, 80, 80, 80, + 86, + 91, + 96, + 64, + 129, + 82, + 96, + 0, + 97, + 25, + 47, 96, + 64, + 131, 1, - 144, + 133, + 97, + 24, + 225, + 86, + 91, + 130, 129, - 27, + 3, + 96, + 32, + 132, 1, - 144, - 85, - 80, + 82, + 97, + 17, + 120, + 129, + 133, + 97, + 16, + 234, 86, 91, 96, 0, 96, 32, - 128, - 131, - 1, - 129, + 130, 132, - 82, + 3, + 18, + 21, + 97, + 25, + 83, + 87, + 96, + 0, 128, - 133, + 253, + 91, + 129, 81, 128, + 21, + 21, + 129, + 20, + 97, + 17, + 148, + 87, + 96, + 0, + 128, + 253, + 91, 131, + 129, + 82, + 96, + 0, + 96, + 32, + 96, + 96, + 129, + 132, + 1, 82, + 97, + 25, + 125, + 96, + 96, + 132, + 1, + 134, + 97, + 24, + 225, + 86, + 91, 96, 64, - 146, - 80, + 132, 130, + 3, + 129, + 134, + 1, + 82, + 129, 134, + 81, + 128, + 132, + 82, + 132, + 132, 1, 145, 80, - 130, + 132, 129, 96, 5, 27, - 135, + 133, 1, 1, - 132, - 136, + 133, + 137, 1, 96, 0, @@ -11287,118 +13530,63 @@ pub mod summa { 16, 21, 97, - 21, - 141, + 25, + 239, 87, + 134, + 131, + 3, 96, - 63, + 31, 25, - 137, - 132, - 3, 1, 133, 82, 129, 81, - 96, 128, - 129, 81, - 129, - 134, - 82, - 97, - 21, - 44, - 130, 135, - 1, - 130, - 97, - 15, - 134, - 86, - 91, - 145, - 80, - 80, - 136, - 130, - 1, - 81, 133, - 130, - 3, - 138, - 135, - 1, 82, 97, - 21, - 68, - 130, - 130, - 97, - 15, + 25, + 195, + 136, 134, - 86, - 91, - 145, - 80, - 80, - 135, - 130, 1, - 81, - 133, - 130, - 3, - 137, - 135, - 1, - 82, - 97, - 21, - 92, - 130, 130, 97, - 15, - 134, + 16, + 234, 86, - 91, - 145, - 80, - 80, - 96, - 96, - 128, - 131, + 91, + 145, + 138, 1, 81, - 146, - 80, 133, - 130, + 131, 3, - 129, - 135, + 134, + 140, 1, 82, + 145, + 144, 80, 97, - 21, - 121, + 25, + 219, 129, 131, 97, - 15, - 134, + 16, + 234, 86, 91, 150, - 137, + 138, 1, 150, 148, @@ -11406,21 +13594,24 @@ pub mod summa { 80, 80, 144, - 134, + 135, 1, 144, 96, 1, 1, 97, - 21, - 6, + 25, + 159, 86, 91, 80, 144, - 152, - 151, + 155, + 154, + 80, + 80, + 80, 80, 80, 80, @@ -11441,38 +13632,38 @@ pub mod summa { 34, 18, 32, - 243, - 47, + 79, 132, - 14, - 221, - 200, - 12, - 236, - 130, - 235, - 143, - 5, - 195, - 78, - 49, - 31, - 44, - 9, - 34, - 218, - 112, - 185, - 0, - 232, - 151, - 24, - 130, - 217, + 172, + 119, + 194, 64, - 229, - 4, - 73, + 202, + 64, + 220, + 19, + 17, + 245, + 124, + 254, + 232, + 34, + 83, + 139, + 131, + 103, + 161, + 125, + 38, + 152, + 111, + 86, + 48, + 109, + 121, + 95, + 255, + 188, 100, 115, 111, @@ -11582,13 +13773,22 @@ pub mod summa { .method_hash([163, 196, 188, 248], p0) .expect("method not found (this should never happen)") } - ///Calls the contract's `mstRoots` (0x7f3bfb2e) function - pub fn mst_roots( + ///Calls the contract's `commitments` (0x49ce8997) function + pub fn commitments( &self, p0: ::ethers::core::types::U256, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([127, 59, 251, 46], p0) + .method_hash([73, 206, 137, 151], p0) + .expect("method not found (this should never happen)") + } + ///Calls the contract's `getAddressOwnershipProof` (0x19b33968) function + pub fn get_address_ownership_proof( + &self, + address_hash: [u8; 32], + ) -> ::ethers::contract::builders::ContractCall { + self.0 + .method_hash([25, 179, 57, 104], address_hash) .expect("method not found (this should never happen)") } ///Calls the contract's `owner` (0x8da5cb5b) function @@ -11602,15 +13802,6 @@ pub mod summa { .method_hash([141, 165, 203, 91], ()) .expect("method not found (this should never happen)") } - ///Calls the contract's `ownershipProofByAddress` (0x23eb94a0) function - pub fn ownership_proof_by_address( - &self, - p0: [u8; 32], - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([35, 235, 148, 160], p0) - .expect("method not found (this should never happen)") - } ///Calls the contract's `renounceOwnership` (0x715018a6) function pub fn renounce_ownership( &self, @@ -11619,25 +13810,28 @@ pub mod summa { .method_hash([113, 80, 24, 166], ()) .expect("method not found (this should never happen)") } - ///Calls the contract's `submitProofOfAddressOwnership` (0xc7ddca0e) function - pub fn submit_proof_of_address_ownership( + ///Calls the contract's `submitCommitment` (0xda64a750) function + pub fn submit_commitment( &self, - address_ownership_proofs: ::std::vec::Vec, + mst_root: ::ethers::core::types::U256, + root_sums: ::std::vec::Vec<::ethers::core::types::U256>, + assets: ::std::vec::Vec, + timestamp: ::ethers::core::types::U256, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([199, 221, 202, 14], address_ownership_proofs) + .method_hash( + [218, 100, 167, 80], + (mst_root, root_sums, assets, timestamp), + ) .expect("method not found (this should never happen)") } - ///Calls the contract's `submitProofOfSolvency` (0x413a9f2d) function - pub fn submit_proof_of_solvency( + ///Calls the contract's `submitProofOfAddressOwnership` (0xc7ddca0e) function + pub fn submit_proof_of_address_ownership( &self, - mst_root: ::ethers::core::types::U256, - assets: ::std::vec::Vec, - proof: ::ethers::core::types::Bytes, - timestamp: ::ethers::core::types::U256, + address_ownership_proofs: ::std::vec::Vec, ) -> ::ethers::contract::builders::ContractCall { self.0 - .method_hash([65, 58, 159, 45], (mst_root, assets, proof, timestamp)) + .method_hash([199, 221, 202, 14], address_ownership_proofs) .expect("method not found (this should never happen)") } ///Calls the contract's `transferOwnership` (0xf2fde38b) function @@ -11660,16 +13854,6 @@ pub mod summa { .method_hash([200, 229, 129, 71], (proof, public_inputs, timestamp)) .expect("method not found (this should never happen)") } - ///Calls the contract's `verifySolvencyProof` (0x6c7684fe) function - pub fn verify_solvency_proof( - &self, - proof: ::ethers::core::types::Bytes, - public_inputs: ::std::vec::Vec<::ethers::core::types::U256>, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([108, 118, 132, 254], (proof, public_inputs)) - .expect("method not found (this should never happen)") - } ///Gets the contract's `AddressOwnershipProofSubmitted` event pub fn address_ownership_proof_submitted_filter( &self, @@ -11680,23 +13864,23 @@ pub mod summa { > { self.0.event() } - ///Gets the contract's `OwnershipTransferred` event - pub fn ownership_transferred_filter( + ///Gets the contract's `LiabilitiesCommitmentSubmitted` event + pub fn liabilities_commitment_submitted_filter( &self, ) -> ::ethers::contract::builders::Event< ::std::sync::Arc, M, - OwnershipTransferredFilter, + LiabilitiesCommitmentSubmittedFilter, > { self.0.event() } - ///Gets the contract's `SolvencyProofSubmitted` event - pub fn solvency_proof_submitted_filter( + ///Gets the contract's `OwnershipTransferred` event + pub fn ownership_transferred_filter( &self, ) -> ::ethers::contract::builders::Event< ::std::sync::Arc, M, - SolvencyProofSubmittedFilter, + OwnershipTransferredFilter, > { self.0.event() } @@ -11741,14 +13925,15 @@ pub mod summa { Hash )] #[ethevent( - name = "OwnershipTransferred", - abi = "OwnershipTransferred(address,address)" + name = "LiabilitiesCommitmentSubmitted", + abi = "LiabilitiesCommitmentSubmitted(uint256,uint256,uint256[],(string,string)[])" )] - pub struct OwnershipTransferredFilter { + pub struct LiabilitiesCommitmentSubmittedFilter { #[ethevent(indexed)] - pub previous_owner: ::ethers::core::types::Address, - #[ethevent(indexed)] - pub new_owner: ::ethers::core::types::Address, + pub timestamp: ::ethers::core::types::U256, + pub mst_root: ::ethers::core::types::U256, + pub root_sums: ::std::vec::Vec<::ethers::core::types::U256>, + pub assets: ::std::vec::Vec, } #[derive( Clone, @@ -11761,21 +13946,21 @@ pub mod summa { Hash )] #[ethevent( - name = "SolvencyProofSubmitted", - abi = "SolvencyProofSubmitted(uint256,uint256,(string,string,uint256)[])" + name = "OwnershipTransferred", + abi = "OwnershipTransferred(address,address)" )] - pub struct SolvencyProofSubmittedFilter { + pub struct OwnershipTransferredFilter { #[ethevent(indexed)] - pub timestamp: ::ethers::core::types::U256, - pub mst_root: ::ethers::core::types::U256, - pub assets: ::std::vec::Vec, + pub previous_owner: ::ethers::core::types::Address, + #[ethevent(indexed)] + pub new_owner: ::ethers::core::types::Address, } ///Container type for all of the contract's events #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum SummaEvents { AddressOwnershipProofSubmittedFilter(AddressOwnershipProofSubmittedFilter), + LiabilitiesCommitmentSubmittedFilter(LiabilitiesCommitmentSubmittedFilter), OwnershipTransferredFilter(OwnershipTransferredFilter), - SolvencyProofSubmittedFilter(SolvencyProofSubmittedFilter), } impl ::ethers::contract::EthLogDecode for SummaEvents { fn decode_log( @@ -11784,12 +13969,12 @@ pub mod summa { if let Ok(decoded) = AddressOwnershipProofSubmittedFilter::decode_log(log) { return Ok(SummaEvents::AddressOwnershipProofSubmittedFilter(decoded)); } + if let Ok(decoded) = LiabilitiesCommitmentSubmittedFilter::decode_log(log) { + return Ok(SummaEvents::LiabilitiesCommitmentSubmittedFilter(decoded)); + } if let Ok(decoded) = OwnershipTransferredFilter::decode_log(log) { return Ok(SummaEvents::OwnershipTransferredFilter(decoded)); } - if let Ok(decoded) = SolvencyProofSubmittedFilter::decode_log(log) { - return Ok(SummaEvents::SolvencyProofSubmittedFilter(decoded)); - } Err(::ethers::core::abi::Error::InvalidData) } } @@ -11799,10 +13984,10 @@ pub mod summa { Self::AddressOwnershipProofSubmittedFilter(element) => { ::core::fmt::Display::fmt(element, f) } - Self::OwnershipTransferredFilter(element) => { + Self::LiabilitiesCommitmentSubmittedFilter(element) => { ::core::fmt::Display::fmt(element, f) } - Self::SolvencyProofSubmittedFilter(element) => { + Self::OwnershipTransferredFilter(element) => { ::core::fmt::Display::fmt(element, f) } } @@ -11813,16 +13998,16 @@ pub mod summa { Self::AddressOwnershipProofSubmittedFilter(value) } } + impl ::core::convert::From for SummaEvents { + fn from(value: LiabilitiesCommitmentSubmittedFilter) -> Self { + Self::LiabilitiesCommitmentSubmittedFilter(value) + } + } impl ::core::convert::From for SummaEvents { fn from(value: OwnershipTransferredFilter) -> Self { Self::OwnershipTransferredFilter(value) } } - impl ::core::convert::From for SummaEvents { - fn from(value: SolvencyProofSubmittedFilter) -> Self { - Self::SolvencyProofSubmittedFilter(value) - } - } ///Container type for all input parameters for the `addressOwnershipProofs` function with signature `addressOwnershipProofs(uint256)` and selector `0xa3c4bcf8` #[derive( Clone, @@ -11836,7 +14021,7 @@ pub mod summa { )] #[ethcall(name = "addressOwnershipProofs", abi = "addressOwnershipProofs(uint256)")] pub struct AddressOwnershipProofsCall(pub ::ethers::core::types::U256); - ///Container type for all input parameters for the `mstRoots` function with signature `mstRoots(uint256)` and selector `0x7f3bfb2e` + ///Container type for all input parameters for the `commitments` function with signature `commitments(uint256)` and selector `0x49ce8997` #[derive( Clone, ::ethers::contract::EthCall, @@ -11847,9 +14032,9 @@ pub mod summa { Eq, Hash )] - #[ethcall(name = "mstRoots", abi = "mstRoots(uint256)")] - pub struct MstRootsCall(pub ::ethers::core::types::U256); - ///Container type for all input parameters for the `owner` function with signature `owner()` and selector `0x8da5cb5b` + #[ethcall(name = "commitments", abi = "commitments(uint256)")] + pub struct CommitmentsCall(pub ::ethers::core::types::U256); + ///Container type for all input parameters for the `getAddressOwnershipProof` function with signature `getAddressOwnershipProof(bytes32)` and selector `0x19b33968` #[derive( Clone, ::ethers::contract::EthCall, @@ -11860,9 +14045,14 @@ pub mod summa { Eq, Hash )] - #[ethcall(name = "owner", abi = "owner()")] - pub struct OwnerCall; - ///Container type for all input parameters for the `ownershipProofByAddress` function with signature `ownershipProofByAddress(bytes32)` and selector `0x23eb94a0` + #[ethcall( + name = "getAddressOwnershipProof", + abi = "getAddressOwnershipProof(bytes32)" + )] + pub struct GetAddressOwnershipProofCall { + pub address_hash: [u8; 32], + } + ///Container type for all input parameters for the `owner` function with signature `owner()` and selector `0x8da5cb5b` #[derive( Clone, ::ethers::contract::EthCall, @@ -11873,11 +14063,8 @@ pub mod summa { Eq, Hash )] - #[ethcall( - name = "ownershipProofByAddress", - abi = "ownershipProofByAddress(bytes32)" - )] - pub struct OwnershipProofByAddressCall(pub [u8; 32]); + #[ethcall(name = "owner", abi = "owner()")] + pub struct OwnerCall; ///Container type for all input parameters for the `renounceOwnership` function with signature `renounceOwnership()` and selector `0x715018a6` #[derive( Clone, @@ -11891,7 +14078,7 @@ pub mod summa { )] #[ethcall(name = "renounceOwnership", abi = "renounceOwnership()")] pub struct RenounceOwnershipCall; - ///Container type for all input parameters for the `submitProofOfAddressOwnership` function with signature `submitProofOfAddressOwnership((string,string,bytes,bytes)[])` and selector `0xc7ddca0e` + ///Container type for all input parameters for the `submitCommitment` function with signature `submitCommitment(uint256,uint256[],(string,string)[],uint256)` and selector `0xda64a750` #[derive( Clone, ::ethers::contract::EthCall, @@ -11903,13 +14090,16 @@ pub mod summa { Hash )] #[ethcall( - name = "submitProofOfAddressOwnership", - abi = "submitProofOfAddressOwnership((string,string,bytes,bytes)[])" + name = "submitCommitment", + abi = "submitCommitment(uint256,uint256[],(string,string)[],uint256)" )] - pub struct SubmitProofOfAddressOwnershipCall { - pub address_ownership_proofs: ::std::vec::Vec, + pub struct SubmitCommitmentCall { + pub mst_root: ::ethers::core::types::U256, + pub root_sums: ::std::vec::Vec<::ethers::core::types::U256>, + pub assets: ::std::vec::Vec, + pub timestamp: ::ethers::core::types::U256, } - ///Container type for all input parameters for the `submitProofOfSolvency` function with signature `submitProofOfSolvency(uint256,(string,string,uint256)[],bytes,uint256)` and selector `0x413a9f2d` + ///Container type for all input parameters for the `submitProofOfAddressOwnership` function with signature `submitProofOfAddressOwnership((string,string,bytes,bytes)[])` and selector `0xc7ddca0e` #[derive( Clone, ::ethers::contract::EthCall, @@ -11921,14 +14111,11 @@ pub mod summa { Hash )] #[ethcall( - name = "submitProofOfSolvency", - abi = "submitProofOfSolvency(uint256,(string,string,uint256)[],bytes,uint256)" + name = "submitProofOfAddressOwnership", + abi = "submitProofOfAddressOwnership((string,string,bytes,bytes)[])" )] - pub struct SubmitProofOfSolvencyCall { - pub mst_root: ::ethers::core::types::U256, - pub assets: ::std::vec::Vec, - pub proof: ::ethers::core::types::Bytes, - pub timestamp: ::ethers::core::types::U256, + pub struct SubmitProofOfAddressOwnershipCall { + pub address_ownership_proofs: ::std::vec::Vec, } ///Container type for all input parameters for the `transferOwnership` function with signature `transferOwnership(address)` and selector `0xf2fde38b` #[derive( @@ -11965,38 +14152,18 @@ pub mod summa { pub public_inputs: ::std::vec::Vec<::ethers::core::types::U256>, pub timestamp: ::ethers::core::types::U256, } - ///Container type for all input parameters for the `verifySolvencyProof` function with signature `verifySolvencyProof(bytes,uint256[])` and selector `0x6c7684fe` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "verifySolvencyProof", - abi = "verifySolvencyProof(bytes,uint256[])" - )] - pub struct VerifySolvencyProofCall { - pub proof: ::ethers::core::types::Bytes, - pub public_inputs: ::std::vec::Vec<::ethers::core::types::U256>, - } ///Container type for all of the contract's call #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum SummaCalls { AddressOwnershipProofs(AddressOwnershipProofsCall), - MstRoots(MstRootsCall), + Commitments(CommitmentsCall), + GetAddressOwnershipProof(GetAddressOwnershipProofCall), Owner(OwnerCall), - OwnershipProofByAddress(OwnershipProofByAddressCall), RenounceOwnership(RenounceOwnershipCall), + SubmitCommitment(SubmitCommitmentCall), SubmitProofOfAddressOwnership(SubmitProofOfAddressOwnershipCall), - SubmitProofOfSolvency(SubmitProofOfSolvencyCall), TransferOwnership(TransferOwnershipCall), VerifyInclusionProof(VerifyInclusionProofCall), - VerifySolvencyProof(VerifySolvencyProofCall), } impl ::ethers::core::abi::AbiDecode for SummaCalls { fn decode( @@ -12010,18 +14177,18 @@ pub mod summa { return Ok(Self::AddressOwnershipProofs(decoded)); } if let Ok(decoded) - = ::decode(data) { - return Ok(Self::MstRoots(decoded)); - } - if let Ok(decoded) - = ::decode(data) { - return Ok(Self::Owner(decoded)); + = ::decode(data) { + return Ok(Self::Commitments(decoded)); } if let Ok(decoded) - = ::decode( + = ::decode( data, ) { - return Ok(Self::OwnershipProofByAddress(decoded)); + return Ok(Self::GetAddressOwnershipProof(decoded)); + } + if let Ok(decoded) + = ::decode(data) { + return Ok(Self::Owner(decoded)); } if let Ok(decoded) = ::decode( @@ -12030,16 +14197,16 @@ pub mod summa { return Ok(Self::RenounceOwnership(decoded)); } if let Ok(decoded) - = ::decode( + = ::decode( data, ) { - return Ok(Self::SubmitProofOfAddressOwnership(decoded)); + return Ok(Self::SubmitCommitment(decoded)); } if let Ok(decoded) - = ::decode( + = ::decode( data, ) { - return Ok(Self::SubmitProofOfSolvency(decoded)); + return Ok(Self::SubmitProofOfAddressOwnership(decoded)); } if let Ok(decoded) = ::decode( @@ -12053,12 +14220,6 @@ pub mod summa { ) { return Ok(Self::VerifyInclusionProof(decoded)); } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::VerifySolvencyProof(decoded)); - } Err(::ethers::core::abi::Error::InvalidData.into()) } } @@ -12068,20 +14229,20 @@ pub mod summa { Self::AddressOwnershipProofs(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::MstRoots(element) => { + Self::Commitments(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::Owner(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::OwnershipProofByAddress(element) => { + Self::GetAddressOwnershipProof(element) => { ::ethers::core::abi::AbiEncode::encode(element) } + Self::Owner(element) => ::ethers::core::abi::AbiEncode::encode(element), Self::RenounceOwnership(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::SubmitProofOfAddressOwnership(element) => { + Self::SubmitCommitment(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::SubmitProofOfSolvency(element) => { + Self::SubmitProofOfAddressOwnership(element) => { ::ethers::core::abi::AbiEncode::encode(element) } Self::TransferOwnership(element) => { @@ -12090,9 +14251,6 @@ pub mod summa { Self::VerifyInclusionProof(element) => { ::ethers::core::abi::AbiEncode::encode(element) } - Self::VerifySolvencyProof(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } } } } @@ -12102,25 +14260,20 @@ pub mod summa { Self::AddressOwnershipProofs(element) => { ::core::fmt::Display::fmt(element, f) } - Self::MstRoots(element) => ::core::fmt::Display::fmt(element, f), - Self::Owner(element) => ::core::fmt::Display::fmt(element, f), - Self::OwnershipProofByAddress(element) => { + Self::Commitments(element) => ::core::fmt::Display::fmt(element, f), + Self::GetAddressOwnershipProof(element) => { ::core::fmt::Display::fmt(element, f) } + Self::Owner(element) => ::core::fmt::Display::fmt(element, f), Self::RenounceOwnership(element) => ::core::fmt::Display::fmt(element, f), + Self::SubmitCommitment(element) => ::core::fmt::Display::fmt(element, f), Self::SubmitProofOfAddressOwnership(element) => { ::core::fmt::Display::fmt(element, f) } - Self::SubmitProofOfSolvency(element) => { - ::core::fmt::Display::fmt(element, f) - } Self::TransferOwnership(element) => ::core::fmt::Display::fmt(element, f), Self::VerifyInclusionProof(element) => { ::core::fmt::Display::fmt(element, f) } - Self::VerifySolvencyProof(element) => { - ::core::fmt::Display::fmt(element, f) - } } } } @@ -12129,9 +14282,14 @@ pub mod summa { Self::AddressOwnershipProofs(value) } } - impl ::core::convert::From for SummaCalls { - fn from(value: MstRootsCall) -> Self { - Self::MstRoots(value) + impl ::core::convert::From for SummaCalls { + fn from(value: CommitmentsCall) -> Self { + Self::Commitments(value) + } + } + impl ::core::convert::From for SummaCalls { + fn from(value: GetAddressOwnershipProofCall) -> Self { + Self::GetAddressOwnershipProof(value) } } impl ::core::convert::From for SummaCalls { @@ -12139,26 +14297,21 @@ pub mod summa { Self::Owner(value) } } - impl ::core::convert::From for SummaCalls { - fn from(value: OwnershipProofByAddressCall) -> Self { - Self::OwnershipProofByAddress(value) - } - } impl ::core::convert::From for SummaCalls { fn from(value: RenounceOwnershipCall) -> Self { Self::RenounceOwnership(value) } } + impl ::core::convert::From for SummaCalls { + fn from(value: SubmitCommitmentCall) -> Self { + Self::SubmitCommitment(value) + } + } impl ::core::convert::From for SummaCalls { fn from(value: SubmitProofOfAddressOwnershipCall) -> Self { Self::SubmitProofOfAddressOwnership(value) } } - impl ::core::convert::From for SummaCalls { - fn from(value: SubmitProofOfSolvencyCall) -> Self { - Self::SubmitProofOfSolvency(value) - } - } impl ::core::convert::From for SummaCalls { fn from(value: TransferOwnershipCall) -> Self { Self::TransferOwnership(value) @@ -12169,11 +14322,6 @@ pub mod summa { Self::VerifyInclusionProof(value) } } - impl ::core::convert::From for SummaCalls { - fn from(value: VerifySolvencyProofCall) -> Self { - Self::VerifySolvencyProof(value) - } - } ///Container type for all return fields from the `addressOwnershipProofs` function with signature `addressOwnershipProofs(uint256)` and selector `0xa3c4bcf8` #[derive( Clone, @@ -12191,7 +14339,7 @@ pub mod summa { pub signature: ::ethers::core::types::Bytes, pub message: ::ethers::core::types::Bytes, } - ///Container type for all return fields from the `mstRoots` function with signature `mstRoots(uint256)` and selector `0x7f3bfb2e` + ///Container type for all return fields from the `commitments` function with signature `commitments(uint256)` and selector `0x49ce8997` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12202,8 +14350,10 @@ pub mod summa { Eq, Hash )] - pub struct MstRootsReturn(pub ::ethers::core::types::U256); - ///Container type for all return fields from the `owner` function with signature `owner()` and selector `0x8da5cb5b` + pub struct CommitmentsReturn { + pub mst_root: ::ethers::core::types::U256, + } + ///Container type for all return fields from the `getAddressOwnershipProof` function with signature `getAddressOwnershipProof(bytes32)` and selector `0x19b33968` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12214,8 +14364,8 @@ pub mod summa { Eq, Hash )] - pub struct OwnerReturn(pub ::ethers::core::types::Address); - ///Container type for all return fields from the `ownershipProofByAddress` function with signature `ownershipProofByAddress(bytes32)` and selector `0x23eb94a0` + pub struct GetAddressOwnershipProofReturn(pub AddressOwnershipProof); + ///Container type for all return fields from the `owner` function with signature `owner()` and selector `0x8da5cb5b` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12226,7 +14376,7 @@ pub mod summa { Eq, Hash )] - pub struct OwnershipProofByAddressReturn(pub ::ethers::core::types::U256); + pub struct OwnerReturn(pub ::ethers::core::types::Address); ///Container type for all return fields from the `verifyInclusionProof` function with signature `verifyInclusionProof(bytes,uint256[],uint256)` and selector `0xc8e58147` #[derive( Clone, @@ -12239,18 +14389,6 @@ pub mod summa { Hash )] pub struct VerifyInclusionProofReturn(pub bool); - ///Container type for all return fields from the `verifySolvencyProof` function with signature `verifySolvencyProof(bytes,uint256[])` and selector `0x6c7684fe` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct VerifySolvencyProofReturn(pub bool); ///`AddressOwnershipProof(string,string,bytes,bytes)` #[derive( Clone, @@ -12268,7 +14406,7 @@ pub mod summa { pub signature: ::ethers::core::types::Bytes, pub message: ::ethers::core::types::Bytes, } - ///`Asset(string,string,uint256)` + ///`Asset(string,string)` #[derive( Clone, ::ethers::contract::EthAbiType, @@ -12282,6 +14420,5 @@ pub mod summa { pub struct Asset { pub asset_name: ::std::string::String, pub chain: ::std::string::String, - pub amount: ::ethers::core::types::U256, } } diff --git a/backend/src/contracts/signer.rs b/backend/src/contracts/signer.rs index 633b2ed6..36b6e1c7 100644 --- a/backend/src/contracts/signer.rs +++ b/backend/src/contracts/signer.rs @@ -1,13 +1,12 @@ use ethers::{ prelude::SignerMiddleware, - providers::{Http, Provider}, + providers::{Http, Middleware, Provider}, signers::{LocalWallet, Signer}, - types::Address, + types::{Address, U256}, }; use serde_json::Value; -use std::{ - error::Error, fs::File, io::BufReader, path::Path, str::FromStr, sync::Arc, time::Duration, -}; +use std::{error::Error, fs::File, io::BufReader, path::Path, str::FromStr, sync::Arc}; +use tokio::sync::Mutex; use super::generated::summa_contract::{AddressOwnershipProof, Asset}; use crate::contracts::generated::summa_contract::Summa; @@ -19,27 +18,25 @@ pub enum AddressInput { #[derive(Debug)] pub struct SummaSigner { - summa_contract: Summa, LocalWallet>>, + nonce_lock: Mutex<()>, // To prevent running `submit` methods concurrently + summa_contract: Summa>, LocalWallet>>, } impl SummaSigner { /// Creates a new SummaSigner instance /// # Arguments /// * `signer_key` - The private key of wallet that will interact with the chain on behalf of the exchange - /// * `chain_id` - The chain id of the network - /// * `rpc_url` - The RPC URL of the network - /// * `address_input` - Either the contract's direct address or a path to its config file. - pub fn new( + /// * `url` - The endpoint for connecting to the node + /// * `address` - The address of the Summa contract + pub async fn new( signer_key: &str, - chain_id: u64, - rpc_url: &str, + url: &str, address_input: AddressInput, - ) -> Self { + ) -> Result> { let wallet: LocalWallet = LocalWallet::from_str(signer_key).unwrap(); - let provider = Provider::::try_from(rpc_url) - .unwrap() - .interval(Duration::from_millis(10u64)); + let provider = Arc::new(Provider::try_from(url)?); + let chain_id = provider.get_chainid().await?.as_u64(); let client = Arc::new(SignerMiddleware::new( provider, wallet.with_chain_id(chain_id), @@ -53,10 +50,10 @@ impl SummaSigner { } }; - let contract = Summa::new(address, client); - Self { - summa_contract: contract, - } + Ok(Self { + nonce_lock: Mutex::new(()), + summa_contract: Summa::new(address, client), + }) } pub fn get_summa_address(&self) -> Address { @@ -91,32 +88,43 @@ impl SummaSigner { &self, address_ownership_proofs: Vec, ) -> Result<(), Box> { + let lock_guard = self.nonce_lock.lock().await; + let submit_proof_of_address_ownership = &self .summa_contract .submit_proof_of_address_ownership(address_ownership_proofs); + + // To prevent nonce collision, we lock the nonce before sending the transaction let tx = submit_proof_of_address_ownership.send().await?; // Wait for the pending transaction to be mined tx.await?; + drop(lock_guard); Ok(()) } - pub async fn submit_proof_of_solvency( + pub async fn submit_commitment( &self, - mst_root: ethers::types::U256, + mst_root: U256, + root_sums: Vec, assets: Vec, - proof: ethers::types::Bytes, - timestamp: ethers::types::U256, + timestamp: U256, ) -> Result<(), Box> { - let submit_proof_of_solvency_call = &self + let lock_guard = self.nonce_lock.lock().await; + + let submit_liability_commitment = &self .summa_contract - .submit_proof_of_solvency(mst_root, assets, proof, timestamp); - let tx = submit_proof_of_solvency_call.send().await?; + .submit_commitment(mst_root, root_sums, assets, timestamp); + + // To prevent nonce collision, we lock the nonce before sending the transaction + let tx = submit_liability_commitment.send().await?; // Wait for the pending transaction to be mined tx.await?; + drop(lock_guard); + Ok(()) } } diff --git a/backend/src/lib.rs b/backend/src/lib.rs index 6c363179..ad43f6e6 100644 --- a/backend/src/lib.rs +++ b/backend/src/lib.rs @@ -2,3 +2,5 @@ pub mod apis; pub mod contracts; pub mod tests; +pub use merkle_sum_tree::{Entry, MerkleSumTree}; +use summa_solvency::merkle_sum_tree; diff --git a/backend/src/tests.rs b/backend/src/tests.rs index 7098c8e6..ffbdae70 100644 --- a/backend/src/tests.rs +++ b/backend/src/tests.rs @@ -9,23 +9,29 @@ use ethers::{ }; use tokio::time; -use crate::contracts::generated::{ - inclusion_verifier::InclusionVerifier, solvency_verifier::SolvencyVerifier, - summa_contract::Summa, -}; +use crate::contracts::generated::{inclusion_verifier::InclusionVerifier, summa_contract::Summa}; use crate::contracts::mock::mock_erc20::{MockERC20, MOCKERC20_ABI, MOCKERC20_BYTECODE}; // Setup test environment on the anvil instance -pub async fn initialize_test_env() -> ( +pub async fn initialize_test_env( + block_time: Option, +) -> ( AnvilInstance, H160, H160, Arc, LocalWallet>>, Summa, LocalWallet>>, ) { - let anvil: ethers::utils::AnvilInstance = Anvil::new() - .mnemonic("test test test test test test test test test test test junk") - .spawn(); + // Initiate anvil by following assign block time or instant mining + let anvil = match block_time { + Some(interval) => Anvil::new() + .mnemonic("test test test test test test test test test test test junk") + .block_time(interval) + .spawn(), + None => Anvil::new() + .mnemonic("test test test test test test test test test test test junk") + .spawn(), + }; // Extracting two exchange addresses from the Anvil instance let cex_addr_1 = anvil.addresses()[1]; @@ -43,15 +49,7 @@ pub async fn initialize_test_env() -> ( wallet.with_chain_id(anvil.chain_id()), )); - // Creating a factory to deploy a mock ERC20 contract - let factory = ContractFactory::new( - MOCKERC20_ABI.to_owned(), - MOCKERC20_BYTECODE.to_owned(), - Arc::clone(&client), - ); - // Send RPC requests with `anvil_setBalance` method via provider to set ETH balance of `cex_addr_1` and `cex_addr_2` - // This is for meeting `proof_of_solvency` test conditions for addr in [cex_addr_1, cex_addr_2].iter().copied() { let _res = client .provider() @@ -59,6 +57,14 @@ pub async fn initialize_test_env() -> ( .await; } + // Mock ERC20 contract deployment + // Creating a factory to deploy a mock ERC20 contract + let factory = ContractFactory::new( + MOCKERC20_ABI.to_owned(), + MOCKERC20_BYTECODE.to_owned(), + Arc::clone(&client), + ); + // Deploy Mock ERC20 contract let mock_erc20_deployment = factory.deploy(()).unwrap().send().await.unwrap(); @@ -71,45 +77,52 @@ pub async fn initialize_test_env() -> ( time::sleep(Duration::from_millis(500)).await; - // Deploy verifier contracts before deploy Summa contract - let solvency_verifer_contract = SolvencyVerifier::deploy(Arc::clone(&client), ()) + if block_time != None { + time::sleep(Duration::from_secs(block_time.unwrap())).await; + }; + + let inclusion_verifer_contract = InclusionVerifier::deploy(Arc::clone(&client), ()) .unwrap() .send() .await .unwrap(); - let inclusion_verifer_contract = InclusionVerifier::deploy(Arc::clone(&client), ()) + if block_time != None { + time::sleep(Duration::from_secs(block_time.unwrap())).await; + }; + + // Deploy Summa contract + let summa_contract = Summa::deploy(Arc::clone(&client), inclusion_verifer_contract.address()) .unwrap() .send() .await .unwrap(); - // Deploy Summa contract - let summa_contract = Summa::deploy( - Arc::clone(&client), - ( - solvency_verifer_contract.address(), - inclusion_verifer_contract.address(), - ), - ) - .unwrap() - .send() - .await - .unwrap(); + time::sleep(Duration::from_secs(3)).await; (anvil, cex_addr_1, cex_addr_2, client, summa_contract) } #[cfg(test)] mod test { - use ethers::{abi::AbiEncode, types::U256, utils::to_checksum}; - use std::error::Error; + use ethers::{ + abi::AbiEncode, + providers::{Http, Middleware, Provider}, + types::{U256, U64}, + utils::to_checksum, + }; + use std::{convert::TryFrom, error::Error}; + use summa_solvency::merkle_sum_tree::MerkleSumTree; + use tokio::{ + join, + time::{sleep, Duration}, + }; use crate::apis::{address_ownership::AddressOwnership, round::Round}; use crate::contracts::{ generated::summa_contract::{ AddressOwnershipProof, AddressOwnershipProofSubmittedFilter, Asset, - SolvencyProofSubmittedFilter, + LiabilitiesCommitmentSubmittedFilter, }, signer::{AddressInput, SummaSigner}, }; @@ -117,37 +130,89 @@ mod test { #[tokio::test] async fn test_deployed_address() -> Result<(), Box> { - let (anvil, _, _, _, summa_contract) = initialize_test_env().await; + let (anvil, _, _, _, summa_contract) = initialize_test_env(None).await; // Hardhat development environment, usually updates the address of a deployed contract in the `artifacts` directory. // However, in our custom deployment script, `contracts/scripts/deploy.ts`, // the address gets updated in `backend/src/contracts/deployments.json`. let contract_address = summa_contract.address(); - let summa_signer = SummaSigner::new( + let signer = SummaSigner::new( "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", - anvil.chain_id(), anvil.endpoint().as_str(), AddressInput::Path("./src/contracts/deployments.json".into()), // the file contains the address of the deployed contract + ) + .await?; + + assert_eq!(contract_address, signer.get_summa_address()); + + Ok(()) + } + + #[tokio::test] + async fn test_concurrent_sumbit_commitments() -> Result<(), Box> { + let (anvil, _, _, _, summa_contract) = initialize_test_env(Some(1)).await; + + // This test ensures that two proofs, when dispatched concurrently, do not result in nonce collisions. + // It checks that both proofs are processed and mined within a reasonable timeframe, + // indicating that there's no interference or delay when the two are submitted simultaneously. + let signer = SummaSigner::new( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + anvil.endpoint().as_str(), + AddressInput::Address(summa_contract.address()), + ) + .await?; + + let asset_csv = "src/apis/csv/assets.csv"; + let params_path = "ptau/hermez-raw-11"; + let entry_csv = "../zk_prover/src/merkle_sum_tree/csv/entry_16.csv"; + let mst = MerkleSumTree::new(entry_csv).unwrap(); + + let mut round_one = + Round::<4, 2, 14>::new(&signer, Box::new(mst.clone()), asset_csv, params_path, 1) + .unwrap(); + let mut round_two = + Round::<4, 2, 14>::new(&signer, Box::new(mst), asset_csv, params_path, 2).unwrap(); + + // Checking block number before sending transaction of liability commitment + let outer_provider: Provider = Provider::try_from(anvil.endpoint().as_str())?; + let start_block_number = outer_provider.get_block_number().await?; + + // Send two commitments simultaneously + let (round_one_result, round_two_result) = join!( + round_one.dispatch_commitment(), + round_two.dispatch_commitment() ); - assert_eq!(contract_address, summa_signer.get_summa_address()); + // Check two blocks has been mined + for _ in 0..5 { + sleep(Duration::from_millis(500)).await; + let updated_block_number = outer_provider.get_block_number().await?; + if (updated_block_number - start_block_number) > U64::from(2) { + break; + } + } + + // Check two rounds' result are both Ok + assert!(round_one_result.is_ok()); + assert!(round_two_result.is_ok()); Ok(()) } #[tokio::test] async fn test_round_features() -> Result<(), Box> { - let (anvil, cex_addr_1, cex_addr_2, _, summa_contract) = initialize_test_env().await; + let (anvil, cex_addr_1, cex_addr_2, _, summa_contract) = initialize_test_env(None).await; - let mut address_ownership_client = AddressOwnership::new( + let signer = SummaSigner::new( "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", - anvil.chain_id(), anvil.endpoint().as_str(), AddressInput::Address(summa_contract.address()), - "src/apis/csv/signatures.csv", ) - .unwrap(); + .await?; + + let mut address_ownership_client = + AddressOwnership::new(&signer, "src/apis/csv/signatures.csv").unwrap(); address_ownership_client .dispatch_proof_of_address_ownership() @@ -180,62 +245,49 @@ mod test { ); // Initialize round + let params_path = "ptau/hermez-raw-11"; let asset_csv = "src/apis/csv/assets.csv"; let entry_csv = "../zk_prover/src/merkle_sum_tree/csv/entry_16.csv"; - let params_path = "ptau/hermez-raw-11"; - let mut round = Round::<4, 2, 14>::new( - "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil account [0] - anvil.chain_id(), - anvil.endpoint().as_str(), - AddressInput::Address(summa_contract.address()), - entry_csv, - asset_csv, - params_path, - 1, - ) - .unwrap(); + let mst = MerkleSumTree::new(entry_csv).unwrap(); + let mut round = + Round::<4, 2, 14>::new(&signer, Box::new(mst), asset_csv, params_path, 1).unwrap(); - // Verify solvency proof - let mut solvency_proof_logs = summa_contract - .solvency_proof_submitted_filter() + let mut liability_commitment_logs = summa_contract + .liabilities_commitment_submitted_filter() .query() .await?; - assert_eq!(solvency_proof_logs.len(), 0); - - // Dispatch solvency proof - let assets = [ - Asset { - asset_name: "ETH".to_string(), - chain: "ETH".to_string(), - amount: U256::from(556863), - }, - Asset { - asset_name: "USDT".to_string(), - chain: "ETH".to_string(), - amount: U256::from(556863), - }, - ]; - - // Send sovlecy proof to contract - round.dispatch_solvency_proof().await?; - - // After sending transaction of proof of solvency, logs should be updated - solvency_proof_logs = summa_contract - .solvency_proof_submitted_filter() + assert_eq!(liability_commitment_logs.len(), 0); + + // Send liability commitment transaction + round.dispatch_commitment().await?; + + // After sending transaction of liability commitment, logs should be updated + liability_commitment_logs = summa_contract + .liabilities_commitment_submitted_filter() .query() .await?; - assert_eq!(solvency_proof_logs.len(), 1); + assert_eq!(liability_commitment_logs.len(), 1); assert_eq!( - solvency_proof_logs[0], - SolvencyProofSubmittedFilter { + liability_commitment_logs[0], + LiabilitiesCommitmentSubmittedFilter { timestamp: U256::from(1), mst_root: "0x2E021D9BF99C5BD7267488B6A7A5CF5F7D00222A41B6A9B971899C44089E0C5" .parse() .unwrap(), - assets: assets.to_vec() + root_sums: vec![U256::from(556862), U256::from(556862)], + assets: vec![ + Asset { + asset_name: "ETH".to_string(), + chain: "ETH".to_string(), + }, + Asset { + asset_name: "USDT".to_string(), + chain: "ETH".to_string(), + }, + ], } ); diff --git a/contracts/src/InclusionVerifier.yul b/contracts/src/InclusionVerifier.yul index 55fc481d..67bdfaf5 100644 --- a/contracts/src/InclusionVerifier.yul +++ b/contracts/src/InclusionVerifier.yul @@ -1478,4 +1478,4 @@ success := and(eq(mload(0x6f60), 1), success) } } - } + } \ No newline at end of file diff --git a/contracts/src/Summa.sol b/contracts/src/Summa.sol index cff887d3..c0357c85 100644 --- a/contracts/src/Summa.sol +++ b/contracts/src/Summa.sol @@ -84,7 +84,7 @@ contract Summa is Ownable { constructor(IVerifier _inclusionVerifier) { inclusionVerifier = _inclusionVerifier; } - + /** * @dev Submit an optimistic proof of multiple address ownership for a CEX. The proof is subject to an off-chain verification as it's not feasible to verify the signatures of non-EVM chains in an Ethereum smart contract. * @param _addressOwnershipProofs The list of address ownership proofs diff --git a/zk_prover/benches/full_solvency_flow.rs b/zk_prover/benches/full_solvency_flow.rs index 66164d70..eab18332 100644 --- a/zk_prover/benches/full_solvency_flow.rs +++ b/zk_prover/benches/full_solvency_flow.rs @@ -11,7 +11,7 @@ use summa_solvency::{ solvency::SolvencyCircuit, utils::{full_prover, full_verifier, generate_setup_artifacts}, }, - merkle_sum_tree::MerkleSumTree, + merkle_sum_tree::{MerkleSumTree, Tree}, }; const SAMPLE_SIZE: usize = 10; @@ -101,7 +101,7 @@ fn generate_zk_proof_mst_inclusion_circuit(_c: &mut Criterion) { let empty_circuit = MstInclusionCircuit::::init_empty(); - let (params, pk, vk) = generate_setup_artifacts(13, None, empty_circuit).unwrap(); + let (params, pk, _) = generate_setup_artifacts(13, None, empty_circuit).unwrap(); let csv_file = format!( "benches/csv/{}/{}_entry_2_{}.csv", @@ -111,7 +111,14 @@ fn generate_zk_proof_mst_inclusion_circuit(_c: &mut Criterion) { let merkle_sum_tree = MerkleSumTree::::new(&csv_file).unwrap(); // Only now we can instantiate the circuit with the actual inputs - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + let circuit = + MstInclusionCircuit::::init(merkle_proof, user_entry.clone()); let bench_name = format!( "generate zk proof - tree of 2 power of {} entries with {} assets mst inclusion circuit", @@ -139,7 +146,14 @@ fn verify_zk_proof_mst_inclusion_circuit(_c: &mut Criterion) { let merkle_sum_tree = MerkleSumTree::::new(&csv_file).unwrap(); // Only now we can instantiate the circuit with the actual inputs - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + let circuit = + MstInclusionCircuit::::init(merkle_proof, user_entry.clone()); let proof = full_prover(¶ms, &pk, circuit.clone(), circuit.instances()); @@ -197,7 +211,7 @@ fn generate_zk_proof_solvency_circuit(_c: &mut Criterion) { let empty_circuit = SolvencyCircuit::::init_empty(); - let (params, pk, vk) = generate_setup_artifacts(11, None, empty_circuit).unwrap(); + let (params, pk, _) = generate_setup_artifacts(11, None, empty_circuit).unwrap(); let csv_file = format!( "benches/csv/{}/{}_entry_2_{}.csv", @@ -209,7 +223,7 @@ fn generate_zk_proof_solvency_circuit(_c: &mut Criterion) { let asset_sums = merkle_sum_tree.root().balances.map(|x| x + Fp::from(1)); // Only now we can instantiate the circuit with the actual inputs - let circuit = SolvencyCircuit::::init(merkle_sum_tree, asset_sums); + let circuit = SolvencyCircuit::::init(&merkle_sum_tree, asset_sums); let bench_name = format!( "generate zk proof - tree of 2 power of {} entries with {} assets solvency circuit", @@ -239,7 +253,7 @@ fn verify_zk_proof_solvency_circuit(_c: &mut Criterion) { let asset_sums = merkle_sum_tree.root().balances.map(|x| x + Fp::from(1)); // Only now we can instantiate the circuit with the actual inputs - let circuit = SolvencyCircuit::::init(merkle_sum_tree, asset_sums); + let circuit = SolvencyCircuit::::init(&merkle_sum_tree, asset_sums); let proof = full_prover(¶ms, &pk, circuit.clone(), circuit.instances()); diff --git a/zk_prover/examples/gen_inclusion_verifier.rs b/zk_prover/examples/gen_inclusion_verifier.rs index 9f439aba..312aace1 100644 --- a/zk_prover/examples/gen_inclusion_verifier.rs +++ b/zk_prover/examples/gen_inclusion_verifier.rs @@ -14,7 +14,7 @@ use summa_solvency::{ gen_proof_solidity_calldata, generate_setup_artifacts, write_verifier_sol_from_yul, }, }, - merkle_sum_tree::MerkleSumTree, + merkle_sum_tree::{MerkleSumTree, Tree}, }; const LEVELS: usize = 4; @@ -49,7 +49,15 @@ fn main() { // In order to generate a proof for testing purpose we create the circuit using the init() method // which takes as input the merkle sum tree and the index of the leaf we are generating the proof for. - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + // Generate the circuit with the actual inputs + let circuit = + MstInclusionCircuit::::init(merkle_proof, user_entry.clone()); let instances = circuit.instances(); diff --git a/zk_prover/examples/gen_solvency_verifier.rs b/zk_prover/examples/gen_solvency_verifier.rs deleted file mode 100644 index 2680fdd8..00000000 --- a/zk_prover/examples/gen_solvency_verifier.rs +++ /dev/null @@ -1,86 +0,0 @@ -#![feature(generic_const_exprs)] - -use halo2_proofs::halo2curves::bn256::Fr as Fp; -use serde_json::to_string_pretty; -use snark_verifier_sdk::{ - evm::{evm_verify, gen_evm_proof_shplonk, gen_evm_verifier_shplonk}, - CircuitExt, -}; -use std::{fs::File, io::Write, path::Path}; -use summa_solvency::{ - circuits::{ - solvency::SolvencyCircuit, - types::ProofSolidityCallData, - utils::{ - gen_proof_solidity_calldata, generate_setup_artifacts, write_verifier_sol_from_yul, - }, - }, - merkle_sum_tree::MerkleSumTree, -}; - -const N_ASSETS: usize = 2; -const N_BYTES: usize = 14; - -fn main() { - // In order to generate the verifier we create the circuit using the init_empty() method, which means that the circuit is not initialized with any data. - let circuit = SolvencyCircuit::::init_empty(); - - // generate a universal trusted setup for testing, along with the verification key (vk) and the proving key (pk). - let (params, pk, _) = - generate_setup_artifacts(10, Some("../backend/ptau/hermez-raw-11"), circuit.clone()) - .unwrap(); - - let num_instances = circuit.num_instance(); - - let yul_output_path = "../contracts/src/SolvencyVerifier.yul"; - let sol_output_path = "../contracts/src/SolvencyVerifier.sol"; - - let deployment_code = gen_evm_verifier_shplonk::>( - ¶ms, - pk.get_vk(), - num_instances, - Some(Path::new(yul_output_path)), - ); - - write_verifier_sol_from_yul(yul_output_path, sol_output_path).unwrap(); - - // In order to generate a proof for testing purpose we create the circuit using the init() method, which take as input the merkle sum tree and the asset sums. - let merkle_sum_tree = - MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv").unwrap(); - - let asset_sums = [Fp::from(556863u64), Fp::from(556863u64)]; - - let circuit = SolvencyCircuit::::init(merkle_sum_tree, asset_sums); - - // generate a universal trusted setup for testing, along with the verification key (vk) and the proving key (pk). - let (params, pk, _) = - generate_setup_artifacts(10, Some("../backend/ptau/hermez-raw-11"), circuit.clone()) - .unwrap(); - - let num_instances = circuit.num_instance(); - let instances = circuit.instances(); - - let proof = gen_evm_proof_shplonk(¶ms, &pk, circuit.clone(), instances.clone()); - - let proof_solidity_calldata = gen_proof_solidity_calldata(¶ms, &pk, circuit.clone()); - - let proof_hex_string = format!("0x{}", hex::encode(&proof_solidity_calldata.clone().0 .0)); - - let data = ProofSolidityCallData { - proof: proof_hex_string, - public_inputs: proof_solidity_calldata.1, - }; - - // Serialize the data to a JSON string - let serialized_data = to_string_pretty(&data).expect("Failed to serialize data"); - - // Save the serialized data to a JSON file - let mut file = File::create("./examples/solvency_proof_solidity_calldata.json") - .expect("Unable to create file"); - file.write_all(serialized_data.as_bytes()) - .expect("Unable to write data to file"); - - let gas_cost = evm_verify(deployment_code, instances, proof); - - print!("gas_cost: {:?}", gas_cost); -} diff --git a/zk_prover/examples/inclusion_proof_solidity_calldata.json b/zk_prover/examples/inclusion_proof_solidity_calldata.json index 7aad7233..fa338586 100644 --- a/zk_prover/examples/inclusion_proof_solidity_calldata.json +++ b/zk_prover/examples/inclusion_proof_solidity_calldata.json @@ -1,7 +1,7 @@ { - "proof": "0x20915f0d4ee13b0f773e691621c4928b83b08ae6e3aed158976eb2ef1781cfa109afb66750a062a7a8cbacaf1149308efe1b274fd61a768101c72dff47370b7e0447eafd8e01e3775851f6ce2aa6458b5193449ddc80ee0ae08f8213d98bd121135193e6fc64182ce38da867ed9eb9b163c10bffdd0639200b8097e98da05e140ddf7ebeb2e40ecbcca43014f3fafe4c7512a76e1c936f4e34a3c681ffe6da7003ff5fafde2132aae22440d510ce903a712dfe29a1f308311a5d0f95a6eacdd904d4197fbba0c2c589c35456629393cfa0740657645c854973e4cb902c33155e0d30a3f1cab21461def7045cf5c1514a390ddc4f89d082304fbb9bb72cd2aa1a242239b3e980df0348ec3a3360cbf3e72d83d6a85fe9431752cb689395c926f81eb1a04b332a5d9573f2cb7b988d0fe49687fa232ab2472f1aae47432335ac710c1d210547ff2f93a0a233d80fe3f4c2a683cc3273bf90676656f0d69ed1ccf721484460a99e140de309cbcee7f5ed9d0e84f021d214457349797275e40c7fc92c578c4bf2d1d6b9c9f5134261bf26c79a6437be946d72ac368add653fc007610c5be8be22dd3c99cdb24e024206619bd072cc068ea4828288f9d075b91720ff1a02871f0707d48d8217a6572ae8e4164012c9de818226ccd1be7db9f43eb6bc1312184bd7e125b9ab4ed04442fffb17052faf8fb35a4d2603520bf11cf228720dc9c4b63c83bfed43104528fab3dab4d9524881a9e6cf20a731dcf6f0def235258a98fc0bef2dfb9bfceb6f270009473f9cfa6739ac47e9d3eb5eb7444079d007add1686645f019607dd33e3e16041aaee1c8cf0692d867c1166347e2b090ec1928f9dc9d73dc3a3a596824d124ecae398f45a84b6cbbedfec416f94b788fd2211584dc44dffb9cdb5b24fbb36b8e06265f2e61d9c16abe43850b0e100be2702caee065ba5353038939d221fbda5824d5ec8e68b06f0198fda4829b40f588fb27dc7295709f4cad4f02b90096e57dc300af3cfc644c14aae7a6201e5c0d2a2e0b73428b9bd5f10c9be516c1f850a557f013cf27cc357ecf6b1a6e445f5d75e8167ff43a7e19acc59c240ed1d918f9d13347099ba8864b08a3ea1b06dab64a9a26f92c5035287181bfbb82dcf96132c4c28b4faf2779c3907424bac9529140fd2f73787050de67a9eb4ca2549aa42db52fa6558ff5ee441e43a708d0b7182d25026c6c54fb1b3a9cd7823d6861ea065a32b63e1fe11cda017cd9a969e20b7e9f1f9933de26c02f4e6645773d37be67573574de0e967553eba8dfa6f4728be0d6009e1dd03ea2010912a9b01d6641591229c43440869ad4561fef86c26ae463a1210680cf3f0af0c0328903b1b1af1e23109ecca9a8bca6b7fbbf091f4bf112a40802cfd52b8c4d1e02b09b56afac0d6aeb894fcafd3856d36542bc744a0661b52f6a13ac9ba1dcb552ca1b2205815b10d364237fb83db626c02d8b6670fff96d13f40532806e6c7e8f0e3656a0e75741cc6c37d450e198ccf276670029a4bc9c15650226898a98f4763a459c5aa18d28d67775ddb13ac9ae1dc62a08dd0f592c15b18565f0b46f61a3c92e3d80a938aa4fc70ea71c418c368ae73410cded87ac0079d60ac04155d44ebd9d53aa5967409bd81a23c6141b86f0b955298272d81828f5a90f08e6ecc22286dc97208ebb36876b81a26da23ba09dc529f8ebf7294d0d557e14755c1cc8af10977ff0ee5f5826d13eaee84cd0dc08a7a494f144b26529e2b4b41eeead5b7318d28faf23962493b4d06dc51a40ec03892727c1133bde0a2f6ba7bfa8f9d261fdf0aaf303cd6cc4c1a5483d45ef8451c19d209d7fb63e1ae22a2652fa3696b09d6834f2cab4cc0749bcb0a8f9210242b2485e6adb5aef23d9a545d08d2f0fe8a84120ca2c5ad5d998536ba9d86836949a28e246f22059206ba16b68a7510ea6ea801ff3af65490be25cb32c6e2e3e958de49cfb8501852f61fe1af50471376e10db200eb89accaa2a400a8235cf0cb3f7bc6d69d1c67e15bb88c4e2d8e5d4e25a8d890fbb95e6f7bf082ea795df8f29f54d0b9ccbecb72d7c76019c25584553ecd518face907a19d91131439bb63df871b53685d631931322d656297616a4ba7382b51d1cbe5fb15b56e1ba5c4ec093bfd8994f618f891ebfad8b93e48c57781ac7394372036010454d433fca08292b444da888cd469614029fece429cd043352ef39bf2bee9a15a6f878238ef4622a9d84d47e138dd81af3a39ebfdeccf85e3dfb61195fb062fb3dd2affb8efa0259a2fbf9a9541c7118a845fe2f4847840a84444b7f8dec8e6bb649e145b6d4815cae4d17563763950729f96fafd5fba5f24021188df77ab4b443497d8990e58d4855d8939738187b2bf0629c7150c0ac31aed7b10635615110713bdd1286a0f57e531e21b127a18e1866688a312d558158bd65237ecfb43b5256ccc65b3a9024f1fb59f2c3d71cea2232820ad7bceb6d70dae830ee378f36f7f338e4cd908eb6c1720395ad3d7faa300d12109f274bffb2684364a1f709b4da6c093ccdc5b2ce6e2fae39238b0b35035975b59a763024eaecb62aaeaf1857ee9551f8654bd98efc649dbd52ae0df0040c540283a6a8a121121e18b8d3ea1cec896f8a7d6b787d2eae3cfc6e2991d70cc456c8431a329b9bd4d2eef293172386075d8ff091e816373048940a10d93703c06b81f510b1df541089a83fdfeaff914b4c3cdae8a8d990daa4d941565ccc0222d574fc693b505a223d81580221208c156a02603632f2093b1f1d896d36a3049a3e85d60e7017e04ef5d78a0964d63b50cabdcd27de0a31aad462553d208a1da12050832f76381b6830d8796a06c8bef43ab4b6934704c8ab69d001bd02762a74e5e360a97682f5720c914b318353dc521fc0dd7404b362c389f8a333e3901198585a9ba11454f9076dee844fdac101c409d75314e5f728507661fb96818f0edf6564266421ca1e980fed4e747113712b1431107456eba6bdc998c62bcdd6", + "proof": "0x13403af61410c5c302c94b2cc6edd5564a7e18001399ce63be4e80a7e12124c00c7a2c9e809945caa2039128bedb827f7dc6dbd078e979cc22139ad1791bf92d2e4faaddb95f660720890598d49a79d6541a4f3f5688aba8e498cb03df887a0a10f18d44f08de3cc22e9d7367e949945333524bfb0cad270da557cc7b9a5b9bf0b7be3d68c10694d2b5361bd9ab1b51e65928ddd906ba4390b944fe82433493428e04bf5ab93c7b505b73b55909417706a2b2276e4965eb848742d66619ba9982790a991c0364b08f8b21575415c6c43a9e81dda9b73a69a2ea7a195ad09561b2560e89e472043a9853a9d6eea1390b708541b2f3e1611852186881ce5412df50c9268b3eeb2d3535843f1ddd9f69b15215ef311260a0f16c9c0422cc58ec2e018951ead384f4f48c164233faa716af819b62a75a6482439df7c8a5e4a2685b317d86ef6cc91970797a14fd1081f351de158a14ec474a24997619ae5763003901b2b3e77f306182fb9a5b262ed69185cd8b4fb6042da7a07ec329018067e64422d9f913ce69e5f3b180f6ff301b89e5718d4fbebd6c95eeb32accbbec9050b4714783a8a9f063daf33b3e6ad99b2bf0b72c635d256baa606eb2be67eeab3c1971639c0a0a6283eadc47f549aaf73dde26f52eafc0e59123f835c2af94dbdf97b1e5ff9022c7c1fafc3b6223b86187568f30f242684995f79fc236c1dfa8da29216b8041d3173f0a255a8fad649a5e6cf0e17b92f20151f748e5c87f25c3c28d10506906a752c525994a39ea29bdf43951081b87f93a2df8ec99276472a2a8b0c1695cb6830519f5bf4bb6d3a0ce07d172460b3ba2b11224bcef03b1da45de7032ff3c6a56979ea5ef4355526830db3833cd920391c36e4287b6d3f1225e795181b17eba8464a28ff8acfc6cbb2e0e17504a5a45844b22ea0a7c3861e97a90c3504f22136d1c6072693c821987480ef82c7ec047fc3d7f0496da157cbb5793c1100e3c5d1f4bb79719e756f85e871e30647fb0df31a0042baeded973857c1ec32076a23a9beabe10e22bd9f25dff9ff0b02cabd5e562ccf00b5461414f7a37a8b2333445c5911ca9dbe4e61e52cbf44c8c270447f33a5039442e379f5ec35019316c15a4a6d20fc7d4f44a5e494e4ca0e2cab768d4dc5b5129d3129daf9b7c06c0525b59ea0ac498d50ee04543c69a2ad1475f4daea9b8c8e17371c13611e0b1e211c0ff89525a0de1f75229e49cb6c67e16c7c83ffc0f537eb30436eadbfbe9118f309a391b4d24065742086899fe51893bf03154607440ebbf9678ff920d3e321e90ab6ad9be50192ed6792864f6cde95ed1bb51a8a8d797f9432c9001673d412eafb7242040d2215bbb4acced972f5ca8bdb53a36c439c0da6aa9e435fa2b82365ca7ac26332b53c07a702539a897859a95492c4ef468bf53244360e6b1b4e10cfa91f73cb3bc117e93f2da9ef7c6db202a5e8e7a905f9a4f990594444cd1404e00fa4fbcc815928ca7b08bed877b51b08a9cef10345d58ca39e4090b285d82861eb394c64222a28f80c7414ac924af3f18539f5b4f76b02ed49460f7369132908f5aba537c39227f02c5c5483be4e6166889c46dbc4ce2af227ea2be40abc19b4f39c2e31ec61f94647f895916089e3fc75b70344a9df1b68b378958bfa0810c4ed1267ecca973a0a5b5769a16a2519a9685adbbf83be19e34a3cd5e5ac5421a71dd395df440b2639c73d34a9cc4893d23cc780e75b90a36d7635c2628f5c2bc312485b67416f3bf483b6b0b804f5aa6b5bedd66c1baeaddc971c3da64bb61018cb310d1dd98fd067b8b65a3bcd27ff226fa6c0a5a922022a32950cb8d60530510a5142d39a6a08a8e7f5a4a2e3a727bad928170f90c83df504baf82e053613bcf4565cc6e75eae1c046103f60ffe17eee0c87d52d4425583267bcb9fe49c14f0d96b1a440a42553262f6a9342b5d188b6cb20a1899c4d91ffdca61e8d6bd151e9ae7f8ec311850539dc0b61f0de1595247e3a97fbac78cc185d1d30fc7601530d50cc2d555f68d6042b809330f58be58426304738dcc6cb211d23fd0a2591a6aa97c71fffd4e27e0072ad98d0f2992e2a9114f5161545b1f4de57e3248a1186b55c6a643aa4977a215e0fb42aeba42590baf33ec529d5f28012ba5851c8426d5262d69b850c9dd946888f237089b608f2df977b9ea1b64570974c3ab4ac21be1ccf9c90ce8b361daadb8b83a46f5f2c8793a5a03335f2b970fb9a04c6ad22393fa799e5f50615dd8d83cbe023f7106bba673943c2bb3ca1547bec7ba21d31ab4a7099fca496ff31e9ff480dbf598496df7fba9d1592c4f859ebc15c862de05e47e5e9a7cc1f2e559480b6d9f380e812f3898237a178570e0cc622a73d6802896ee9860696852a89778122834cf9de8b5f296e90689769bba9588308eed5b1a34c90929d20262ee785553da10dddcb5da0bdce4b12fd33d179caa65ffe34d150e621f9cf8842b42583028e5d0f96659a4fb340d30cd70627d414a2c77526d220dd07096fcad9680d0bc34ae9cb3416da19c2341ec705f00cebdee1e71d9941d9d7b693a4a444873cc73cba3442ba82e477e19143853c5c694d7257ccdd4c0241bf6de0c7fe5df1ac02f70ae3de105eb42166eb45345884b1a08bd5aa495ce016607288b6f9e48d0cf587c5be61601c4a7c01b94eef51fe9877b65f6186cc4066d7ecb67a69582ee074c1b0d8131d76309605e7642eb5fa4be718538c6b77d272e6595a0d7c862c21efa0feabb1290b897af7000ab178fd59ff6191586dfab19369aa902dd30725be46b61ba8a173168908e989aff4cc42129aee03a416647160754507fcc1ffb50ec91eb902378e2dc441876678943c1707fbbc8e3e05eef199f2de9495468202bc6d411494200b38126392b2acf47c17c46c3eee1171bd213f5afff56502ce7a7cd172079b8ecc1429ac03d9b09d86d6b3f40843cadd60816693ed6de5615075e2bc17250be87181113066d38bec7adaebd7ebfd05d6ffd", "public_inputs": [ "0xe113acd03b98f0bab0ef6f577245d5d008cbcc19ef2dab3608aa4f37f72a407", "0x2e021d9bf99c5bd7267488b6a7a5cf5f7d00222a41b6a9b971899c44089e0c5" ] -} +} \ No newline at end of file diff --git a/zk_prover/examples/nova_incremental_verifier.rs b/zk_prover/examples/nova_incremental_verifier.rs index 7ab36e43..74ff0a2d 100644 --- a/zk_prover/examples/nova_incremental_verifier.rs +++ b/zk_prover/examples/nova_incremental_verifier.rs @@ -235,7 +235,7 @@ fn main() { run_test(circuit_filepath.clone(), witness_gen_filepath); } -use num_traits::{FromPrimitive, Num}; +use num_traits::Num; use poseidon_rs::{Fr, Poseidon}; // Note that we cannot reuse the MerkleSumTree implementation from zk_prover because it is not compatible with circom's Poseidon Hasher diff --git a/zk_prover/src/circuits/merkle_sum_tree.rs b/zk_prover/src/circuits/merkle_sum_tree.rs index 3ed075c0..f095dfea 100644 --- a/zk_prover/src/circuits/merkle_sum_tree.rs +++ b/zk_prover/src/circuits/merkle_sum_tree.rs @@ -3,7 +3,7 @@ use crate::chips::poseidon::hash::{PoseidonChip, PoseidonConfig}; use crate::chips::poseidon::poseidon_spec::PoseidonSpec; use crate::chips::range::range_check::{RangeCheckChip, RangeCheckConfig}; use crate::circuits::traits::CircuitBase; -use crate::merkle_sum_tree::{big_uint_to_fp, Entry, MerkleSumTree}; +use crate::merkle_sum_tree::{big_uint_to_fp, Entry, MerkleProof}; use halo2_proofs::circuit::{AssignedCell, Layouter, SimpleFloorPlanner}; use halo2_proofs::halo2curves::bn256::Fr as Fp; use halo2_proofs::plonk::{ @@ -68,23 +68,24 @@ impl } } - /// Initializes the circuit with the merkle sum tree and the index of the user of which the inclusion is to be verified. - pub fn init(merkle_sum_tree: MerkleSumTree, user_index: usize) -> Self + /// Initializes the circuit with the merkle proof and the entry of the user of which the inclusion is to be verified. + pub fn init(merkle_proof: MerkleProof, entry: Entry) -> Self where [usize; N_ASSETS + 1]:, { - let proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + assert_eq!(merkle_proof.path_indices.len(), LEVELS); + assert_eq!(merkle_proof.sibling_hashes.len(), LEVELS); + assert_eq!(merkle_proof.sibling_sums.len(), LEVELS); - assert_eq!(proof.path_indices.len(), LEVELS); - assert_eq!(proof.sibling_hashes.len(), LEVELS); - assert_eq!(proof.sibling_sums.len(), LEVELS); + // assert that the entry leaf hash matches the leaf hash in the merkle proof + assert_eq!(merkle_proof.leaf.hash, entry.compute_leaf().hash); Self { - entry: proof.entry, - path_element_hashes: proof.sibling_hashes, - path_element_balances: proof.sibling_sums, - path_indices: proof.path_indices, - root_hash: proof.root_hash, + entry, + path_element_hashes: merkle_proof.sibling_hashes, + path_element_balances: merkle_proof.sibling_sums, + path_indices: merkle_proof.path_indices, + root_hash: merkle_proof.root_hash, } } } @@ -222,8 +223,7 @@ where config.poseidon_middle_config.clone(), ); - let range_check_chip = - RangeCheckChip::::construct(config.range_check_config.clone()); + let range_check_chip = RangeCheckChip::::construct(config.range_check_config); // Assign the entry username let username = self.assign_value_to_witness( diff --git a/zk_prover/src/circuits/solvency.rs b/zk_prover/src/circuits/solvency.rs index 3d5cde6b..95cec188 100644 --- a/zk_prover/src/circuits/solvency.rs +++ b/zk_prover/src/circuits/solvency.rs @@ -3,7 +3,7 @@ use crate::chips::merkle_sum_tree::{MerkleSumTreeChip, MerkleSumTreeConfig}; use crate::chips::poseidon::hash::{PoseidonChip, PoseidonConfig}; use crate::chips::poseidon::poseidon_spec::PoseidonSpec; use crate::circuits::traits::CircuitBase; -use crate::merkle_sum_tree::MerkleSumTree; +use crate::merkle_sum_tree::Tree; use halo2_proofs::circuit::{AssignedCell, Layouter, SimpleFloorPlanner, Value}; use halo2_proofs::halo2curves::bn256::Fr as Fp; use halo2_proofs::plonk::{ @@ -72,8 +72,8 @@ impl SolvencyCircuit, + pub fn init>( + merkle_sum_tree: &T, asset_sums: [Fp; N_ASSETS], ) -> Self { let (penultimate_node_left, penultimate_node_right) = merkle_sum_tree diff --git a/zk_prover/src/circuits/tests.rs b/zk_prover/src/circuits/tests.rs index e55ffd0d..80069a11 100644 --- a/zk_prover/src/circuits/tests.rs +++ b/zk_prover/src/circuits/tests.rs @@ -1,7 +1,7 @@ #[cfg(test)] mod test { - use crate::merkle_sum_tree::MerkleSumTree; + use crate::merkle_sum_tree::{MerkleSumTree, Tree}; use crate::{ circuits::{ merkle_sum_tree::MstInclusionCircuit, @@ -33,9 +33,13 @@ mod test { .unwrap(); for user_index in 0..16 { + // get proof for entry ˆuser_indexˆ + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + let circuit = MstInclusionCircuit::::init( - merkle_sum_tree.clone(), - user_index, + merkle_proof, + user_entry.clone(), ); let valid_prover = MockProver::run(K, &circuit, circuit.instances()).unwrap(); @@ -62,8 +66,16 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + // Only now we can instantiate the circuit with the actual inputs - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + let circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); // Generate the proof let proof = full_prover(¶ms, &pk, circuit.clone(), circuit.instances()); @@ -89,7 +101,7 @@ mod test { let asset_sums = [Fp::from(556863u64), Fp::from(556863u64)]; // Only now we can instantiate the circuit with the actual inputs - let circuit = SolvencyCircuit::::init(merkle_sum_tree, asset_sums); + let circuit = SolvencyCircuit::::init(&merkle_sum_tree, asset_sums); // Generate the proof let proof = full_prover(¶ms, &pk, circuit.clone(), circuit.instances()); @@ -104,8 +116,15 @@ mod test { let merkle_sum_tree = MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + let circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); let mut instances = circuit.instances(); let invalid_root_hash = Fp::from(1000u64); @@ -142,8 +161,16 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + // Only now we can instantiate the circuit with the actual inputs - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + let circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); let invalid_root_hash = Fp::from(1000u64); @@ -166,8 +193,16 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); - let mut circuit = - MstInclusionCircuit::::init(merkle_sum_tree, 0); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + // Only now we can instantiate the circuit with the actual inputs + let mut circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); let instances = circuit.instances(); @@ -216,7 +251,16 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + // Only now we can instantiate the circuit with the actual inputs + let circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); let mut instances = circuit.instances(); let invalid_leaf_hash = Fp::from(1000u64); @@ -249,8 +293,16 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); - let mut circuit = - MstInclusionCircuit::::init(merkle_sum_tree, 0); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + // Only now we can instantiate the circuit with the actual inputs + let mut circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); let instances = circuit.instances(); @@ -366,8 +418,16 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); - let mut circuit = - MstInclusionCircuit::::init(merkle_sum_tree, 0); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + // Only now we can instantiate the circuit with the actual inputs + let mut circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); let instances = circuit.instances(); @@ -401,8 +461,16 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); - let mut circuit = - MstInclusionCircuit::::init(merkle_sum_tree.clone(), 0); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + // Only now we can instantiate the circuit with the actual inputs + let mut circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); let balance = BigUint::from(2u64).pow(N_BYTES as u32 * 8) - BigUint::from(1u64); @@ -482,7 +550,7 @@ mod test { // Make the first asset sum more than liabilities sum (556862) let asset_sums = [Fp::from(556863u64), Fp::from(556863u64)]; - let circuit = SolvencyCircuit::::init(merkle_sum_tree, asset_sums); + let circuit = SolvencyCircuit::::init(&merkle_sum_tree, asset_sums); let valid_prover = MockProver::run(K, &circuit, circuit.instances()).unwrap(); @@ -497,7 +565,7 @@ mod test { let asset_sums = [Fp::from(556863u64), Fp::from(556863u64)]; - let circuit = SolvencyCircuit::::init(merkle_sum_tree, asset_sums); + let circuit = SolvencyCircuit::::init(&merkle_sum_tree, asset_sums); // generate a universal trusted setup for testing, along with the verification key (vk) and the proving key (pk). let (params, pk, _) = generate_setup_artifacts(10, None, circuit.clone()).unwrap(); @@ -534,10 +602,8 @@ mod test { // Make the first asset sum less than liabilities sum (556862) let less_than_asset_sums_1st = [Fp::from(556861u64), Fp::from(556863u64)]; - let circuit = SolvencyCircuit::::init( - merkle_sum_tree.clone(), - less_than_asset_sums_1st, - ); + let circuit = + SolvencyCircuit::::init(&merkle_sum_tree, less_than_asset_sums_1st); let invalid_prover = MockProver::run(K, &circuit, circuit.instances()).unwrap(); @@ -561,10 +627,8 @@ mod test { // Make the second asset sum less than liabilities sum (556862) let less_than_asset_sums_2nd = [Fp::from(556863u64), Fp::from(556861u64)]; - let circuit = SolvencyCircuit::::init( - merkle_sum_tree.clone(), - less_than_asset_sums_2nd, - ); + let circuit = + SolvencyCircuit::::init(&merkle_sum_tree, less_than_asset_sums_2nd); let invalid_prover = MockProver::run(K, &circuit, circuit.instances()).unwrap(); @@ -589,7 +653,7 @@ mod test { let less_than_asset_sums_both = [Fp::from(556861u64), Fp::from(556861u64)]; let circuit = - SolvencyCircuit::::init(merkle_sum_tree, less_than_asset_sums_both); + SolvencyCircuit::::init(&merkle_sum_tree, less_than_asset_sums_both); let invalid_prover = MockProver::run(K, &circuit, circuit.instances()).unwrap(); @@ -633,7 +697,7 @@ mod test { let less_than_asset_sums_2nd = [Fp::from(556863u64), Fp::from(556861u64)]; let mut circuit = - SolvencyCircuit::::init(merkle_sum_tree, less_than_asset_sums_2nd); + SolvencyCircuit::::init(&merkle_sum_tree, less_than_asset_sums_2nd); // But actually, the CEX tries to manipulate the liabilities sum for the second asset to make it less than the assets sum and result solvent circuit.left_node_balances[1] = Fp::from(1u64); @@ -668,7 +732,15 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); - let circuit = MstInclusionCircuit::::init(merkle_sum_tree, 0); + let user_index = 0; + + let merkle_proof = merkle_sum_tree.generate_proof(user_index).unwrap(); + let user_entry = merkle_sum_tree.get_entry(user_index); + + let circuit = MstInclusionCircuit::::init( + merkle_proof, + user_entry.clone(), + ); let root = BitMapBackend::new("prints/mst-inclusion-layout.png", (2048, 32768)) .into_drawing_area(); @@ -693,7 +765,7 @@ mod test { MerkleSumTree::::new("src/merkle_sum_tree/csv/entry_16.csv") .unwrap(); - let circuit = SolvencyCircuit::::init(merkle_sum_tree, asset_sums); + let circuit = SolvencyCircuit::::init(&merkle_sum_tree, asset_sums); let root = BitMapBackend::new("prints/solvency-layout.png", (2048, 32768)).into_drawing_area(); diff --git a/zk_prover/src/merkle_sum_tree/mod.rs b/zk_prover/src/merkle_sum_tree/mod.rs index b7950d93..644e2509 100644 --- a/zk_prover/src/merkle_sum_tree/mod.rs +++ b/zk_prover/src/merkle_sum_tree/mod.rs @@ -2,13 +2,14 @@ mod entry; mod mst; mod node; mod tests; +mod tree; pub mod utils; use halo2_proofs::halo2curves::bn256::Fr as Fp; #[derive(Clone, Debug)] -pub struct MerkleProof { +pub struct MerkleProof { + pub leaf: Node, pub root_hash: Fp, - pub entry: Entry, pub sibling_hashes: Vec, pub sibling_sums: Vec<[Fp; N_ASSETS]>, pub path_indices: Vec, @@ -17,4 +18,5 @@ pub struct MerkleProof { pub use entry::Entry; pub use mst::MerkleSumTree; pub use node::Node; +pub use tree::Tree; pub use utils::{big_intify_username, big_uint_to_fp}; diff --git a/zk_prover/src/merkle_sum_tree/mst.rs b/zk_prover/src/merkle_sum_tree/mst.rs index 4145f7ed..59619ac7 100644 --- a/zk_prover/src/merkle_sum_tree/mst.rs +++ b/zk_prover/src/merkle_sum_tree/mst.rs @@ -1,7 +1,7 @@ use crate::merkle_sum_tree::utils::{ - build_merkle_tree_from_entries, create_proof, index_of, parse_csv_to_entries, verify_proof, + build_leaves_from_entries, build_merkle_tree_from_leaves, parse_csv_to_entries, }; -use crate::merkle_sum_tree::{Entry, MerkleProof, Node}; +use crate::merkle_sum_tree::{Entry, Node, Tree}; use num_bigint::BigUint; /// Merkle Sum Tree Data Structure. @@ -25,9 +25,41 @@ pub struct MerkleSumTree { is_sorted: bool, } -impl MerkleSumTree { - pub const MAX_DEPTH: usize = 29; +impl Tree + for MerkleSumTree +{ + fn root(&self) -> &Node { + &self.root + } + + fn depth(&self) -> &usize { + &self.depth + } + + fn leaves(&self) -> &[Node] { + &self.nodes[0] + } + + fn nodes(&self) -> &[Vec>] { + &self.nodes + } + + fn get_entry(&self, index: usize) -> &Entry { + &self.entries[index] + } + + /// Returns the nodes stored at the penultimate level of the tree, namely the one before the root + fn penultimate_level_data(&self) -> Result<(&Node, &Node), &'static str> { + let penultimate_level = self + .nodes + .get(self.depth - 1) + .ok_or("The tree does not have a penultimate level")?; + + Ok((&penultimate_level[0], &penultimate_level[1])) + } +} +impl MerkleSumTree { /// Builds a Merkle Sum Tree from a CSV file stored at `path`. The CSV file must be formatted as follows: /// /// `username;balances` @@ -39,7 +71,7 @@ impl MerkleSumTree(path)?; - Self::build_tree(entries, false) + Self::from_entries(entries, false) } /// Builds a Merkle Sum Tree from a CSV file stored at `path`. The MST leaves are sorted by the username byte values. The CSV file must be formatted as follows: @@ -56,10 +88,10 @@ impl MerkleSumTree>, is_sorted: bool, ) -> Result, Box> @@ -69,15 +101,11 @@ impl MerkleSumTree MerkleSumTree &Node { - &self.root - } - - pub fn depth(&self) -> &usize { - &self.depth - } - - pub fn leaves(&self) -> &[Node] { - &self.nodes[0] - } - pub fn entries(&self) -> &[Entry] { &self.entries } - /// Returns the nodes stored at the penultimate level of the tree, namely the one before the root - pub fn penultimate_level_data( - &self, - ) -> Result<(&Node, &Node), &'static str> { - let penultimate_level = self - .nodes - .get(self.depth - 1) - .ok_or("The tree does not have a penultimate level")?; - - Ok((&penultimate_level[0], &penultimate_level[1])) - } - - /// Returns the index of the user with the given username and balances in the tree - pub fn index_of(&self, username: &str, balances: [BigUint; N_ASSETS]) -> Option - where - [usize; N_ASSETS + 1]: Sized, - { - index_of(username, balances, &self.nodes) - } - /// Returns the index of the leaf with the matching username pub fn index_of_username(&self, username: &str) -> Result> where @@ -182,18 +178,4 @@ impl MerkleSumTree Result, &'static str> { - create_proof(index, &self.entries, self.depth, &self.nodes, &self.root) - } - - /// Verifies a MerkleProof - pub fn verify_proof(&self, proof: &MerkleProof) -> bool - where - [usize; N_ASSETS + 1]: Sized, - [usize; 2 * (1 + N_ASSETS)]: Sized, - { - verify_proof(proof) - } } diff --git a/zk_prover/src/merkle_sum_tree/tests.rs b/zk_prover/src/merkle_sum_tree/tests.rs index 164f64ba..9cab36e7 100644 --- a/zk_prover/src/merkle_sum_tree/tests.rs +++ b/zk_prover/src/merkle_sum_tree/tests.rs @@ -2,7 +2,7 @@ mod test { use crate::merkle_sum_tree::utils::{big_uint_to_fp, poseidon_node}; - use crate::merkle_sum_tree::{Entry, MerkleSumTree}; + use crate::merkle_sum_tree::{Entry, MerkleSumTree, Tree}; use num_bigint::{BigUint, ToBigUint}; const N_ASSETS: usize = 2; @@ -68,13 +68,15 @@ mod test { // shouldn't create a proof for an entry that doesn't exist in the tree assert!(merkle_tree.generate_proof(16).is_err()); - // shouldn't verify a proof with a wrong entry - let mut proof_invalid_1 = proof.clone(); - proof_invalid_1.entry = Entry::new( + // shouldn't verify a proof with a wrong leaf + let invalid_entry = Entry::new( "AtwIxZHo".to_string(), [35479.to_biguint().unwrap(), 35479.to_biguint().unwrap()], ) .unwrap(); + let invalid_leaf = invalid_entry.compute_leaf(); + let mut proof_invalid_1 = proof.clone(); + proof_invalid_1.leaf = invalid_leaf; assert!(!merkle_tree.verify_proof(&proof_invalid_1)); // shouldn't verify a proof with a wrong root hash diff --git a/zk_prover/src/merkle_sum_tree/tree.rs b/zk_prover/src/merkle_sum_tree/tree.rs new file mode 100644 index 00000000..e03d5b5a --- /dev/null +++ b/zk_prover/src/merkle_sum_tree/tree.rs @@ -0,0 +1,110 @@ +use crate::merkle_sum_tree::{Entry, MerkleProof, Node}; +use halo2_proofs::halo2curves::bn256::Fr as Fp; +use num_bigint::BigUint; + +/// A trait representing the basic operations for a Merkle-Sum-like Tree. +pub trait Tree { + /// Returns a reference to the root node. + fn root(&self) -> &Node; + + /// Returns the depth of the tree. + fn depth(&self) -> &usize; + + /// Returns a slice of the leaf nodes. + fn leaves(&self) -> &[Node]; + + /// Returns a slice of the nodes. + fn nodes(&self) -> &[Vec>]; + + fn get_entry(&self, index: usize) -> &Entry; + + /// Returns the nodes stored at the penultimate level of the tree, namely the one before the root + fn penultimate_level_data(&self) -> Result<(&Node, &Node), &'static str>; + + /// Generates a MerkleProof for the user with the given index. + fn generate_proof(&self, index: usize) -> Result, &'static str> { + let nodes = self.nodes(); + let depth = *self.depth(); + let root = self.root(); + + if index >= nodes[0].len() { + return Err("The leaf does not exist in this tree"); + } + + let mut sibling_hashes = vec![Fp::from(0); depth]; + let mut sibling_sums = vec![[Fp::from(0); N_ASSETS]; depth]; + let mut path_indices = vec![Fp::from(0); depth]; + let mut current_index = index; + + let leaf = &nodes[0][index]; + + for level in 0..depth { + let position = current_index % 2; + let level_start_index = current_index - position; + let level_end_index = level_start_index + 2; + + path_indices[level] = Fp::from(position as u64); + + for i in level_start_index..level_end_index { + if i != current_index { + sibling_hashes[level] = nodes[level][i].hash; + sibling_sums[level] = nodes[level][i].balances; + } + } + current_index /= 2; + } + + Ok(MerkleProof { + leaf: leaf.clone(), + root_hash: root.hash, + sibling_hashes, + sibling_sums, + path_indices, + }) + } + + /// Verifies a MerkleProof. + fn verify_proof(&self, proof: &MerkleProof) -> bool + where + [usize; N_ASSETS + 1]: Sized, + [usize; 2 * (1 + N_ASSETS)]: Sized, + { + let mut node = proof.leaf.clone(); + + let mut balances = proof.leaf.balances; + + for i in 0..proof.sibling_hashes.len() { + let sibling_node = Node { + hash: proof.sibling_hashes[i], + balances: proof.sibling_sums[i], + }; + + if proof.path_indices[i] == 0.into() { + node = Node::middle(&node, &sibling_node); + } else { + node = Node::middle(&sibling_node, &node); + } + + for (balance, sibling_balance) in balances.iter_mut().zip(sibling_node.balances.iter()) + { + *balance += sibling_balance; + } + } + + proof.root_hash == node.hash && balances == node.balances + } + + /// Returns the index of the user with the given username and balances in the tree + fn index_of(&self, username: &str, balances: [BigUint; N_ASSETS]) -> Option + where + [usize; N_ASSETS + 1]: Sized, + { + let entry: Entry = Entry::new(username.to_string(), balances).unwrap(); + let leaf = entry.compute_leaf(); + let leaf_hash = leaf.hash; + + self.nodes()[0] + .iter() + .position(|node| node.hash == leaf_hash) + } +} diff --git a/zk_prover/src/merkle_sum_tree/utils/build_tree.rs b/zk_prover/src/merkle_sum_tree/utils/build_tree.rs index c3e1741f..8e186478 100644 --- a/zk_prover/src/merkle_sum_tree/utils/build_tree.rs +++ b/zk_prover/src/merkle_sum_tree/utils/build_tree.rs @@ -2,8 +2,8 @@ use crate::merkle_sum_tree::{Entry, Node}; use halo2_proofs::halo2curves::bn256::Fr as Fp; use rayon::prelude::*; -pub fn build_merkle_tree_from_entries( - entries: &[Entry], +pub fn build_merkle_tree_from_leaves( + leaves: &[Node], depth: usize, nodes: &mut Vec>>, ) -> Result, Box> @@ -11,7 +11,7 @@ where [usize; N_ASSETS + 1]: Sized, [usize; 2 * (1 + N_ASSETS)]: Sized, { - let n = entries.len(); + let n = leaves.len(); let mut tree: Vec>> = Vec::with_capacity(depth + 1); @@ -36,7 +36,9 @@ where ]); } - build_leaves_level(entries, &mut tree); + for (index, leaf) in leaves.iter().enumerate() { + tree[0][index] = leaf.clone(); + } for level in 1..=depth { build_middle_level(level, &mut tree) @@ -47,20 +49,18 @@ where Ok(root) } -fn build_leaves_level( +pub fn build_leaves_from_entries( entries: &[Entry], - tree: &mut [Vec>], -) where +) -> Vec> +where [usize; N_ASSETS + 1]: Sized, { - let results = entries + let leaves = entries .par_iter() .map(|entry| entry.compute_leaf()) .collect::>(); - for (index, node) in results.iter().enumerate() { - tree[0][index] = node.clone(); - } + leaves } fn build_middle_level(level: usize, tree: &mut [Vec>]) diff --git a/zk_prover/src/merkle_sum_tree/utils/create_proof.rs b/zk_prover/src/merkle_sum_tree/utils/create_proof.rs deleted file mode 100644 index 600ae88a..00000000 --- a/zk_prover/src/merkle_sum_tree/utils/create_proof.rs +++ /dev/null @@ -1,43 +0,0 @@ -use crate::merkle_sum_tree::{Entry, MerkleProof, Node}; -use halo2_proofs::halo2curves::bn256::Fr as Fp; - -pub fn create_proof( - index: usize, - entries: &[Entry], - depth: usize, - nodes: &[Vec>], - root: &Node, -) -> Result, &'static str> { - if index >= nodes[0].len() { - return Err("The leaf does not exist in this tree"); - } - - let mut sibling_hashes = vec![Fp::from(0); depth]; - let mut sibling_sums = vec![[Fp::from(0); N_ASSETS]; depth]; - let mut path_indices = vec![Fp::from(0); depth]; - let mut current_index = index; - - for level in 0..depth { - let position = current_index % 2; - let level_start_index = current_index - position; - let level_end_index = level_start_index + 2; - - path_indices[level] = Fp::from(position as u64); - - for i in level_start_index..level_end_index { - if i != current_index { - sibling_hashes[level] = nodes[level][i].hash; - sibling_sums[level] = nodes[level][i].balances; - } - } - current_index /= 2; - } - - Ok(MerkleProof { - root_hash: root.hash, - entry: entries[index].clone(), - sibling_hashes, - sibling_sums, - path_indices, - }) -} diff --git a/zk_prover/src/merkle_sum_tree/utils/index_of.rs b/zk_prover/src/merkle_sum_tree/utils/index_of.rs deleted file mode 100644 index 5ef7f191..00000000 --- a/zk_prover/src/merkle_sum_tree/utils/index_of.rs +++ /dev/null @@ -1,17 +0,0 @@ -use crate::merkle_sum_tree::{Entry, Node}; -use num_bigint::BigUint; - -pub fn index_of( - username: &str, - balances: [BigUint; N_ASSETS], - nodes: &[Vec>], -) -> Option -where - [usize; N_ASSETS + 1]: Sized, -{ - let entry: Entry = Entry::new(username.to_string(), balances).unwrap(); - let leaf = entry.compute_leaf(); - let leaf_hash = leaf.hash; - - nodes[0].iter().position(|node| node.hash == leaf_hash) -} diff --git a/zk_prover/src/merkle_sum_tree/utils/mod.rs b/zk_prover/src/merkle_sum_tree/utils/mod.rs index e759def0..210eb55d 100644 --- a/zk_prover/src/merkle_sum_tree/utils/mod.rs +++ b/zk_prover/src/merkle_sum_tree/utils/mod.rs @@ -1,17 +1,11 @@ mod build_tree; -mod create_proof; mod csv_parser; mod generate_leaf_hash; mod hash; -mod index_of; mod operation_helpers; -mod proof_verification; -pub use build_tree::build_merkle_tree_from_entries; -pub use create_proof::create_proof; +pub use build_tree::{build_leaves_from_entries, build_merkle_tree_from_leaves}; pub use csv_parser::parse_csv_to_entries; pub use generate_leaf_hash::generate_leaf_hash; pub use hash::{poseidon_entry, poseidon_node}; -pub use index_of::index_of; pub use operation_helpers::*; -pub use proof_verification::verify_proof; diff --git a/zk_prover/src/merkle_sum_tree/utils/proof_verification.rs b/zk_prover/src/merkle_sum_tree/utils/proof_verification.rs deleted file mode 100644 index 78c6ec72..00000000 --- a/zk_prover/src/merkle_sum_tree/utils/proof_verification.rs +++ /dev/null @@ -1,36 +0,0 @@ -use crate::merkle_sum_tree::utils::big_uint_to_fp; -use crate::merkle_sum_tree::{MerkleProof, Node}; -use halo2_proofs::halo2curves::bn256::Fr as Fp; - -pub fn verify_proof(proof: &MerkleProof) -> bool -where - [usize; N_ASSETS + 1]: Sized, - [usize; 2 * (1 + N_ASSETS)]: Sized, -{ - let mut node = proof.entry.compute_leaf(); - let mut balances = proof - .entry - .balances() - .iter() - .map(big_uint_to_fp) - .collect::>(); - - for i in 0..proof.sibling_hashes.len() { - let sibling_node = Node { - hash: proof.sibling_hashes[i], - balances: proof.sibling_sums[i], - }; - - if proof.path_indices[i] == 0.into() { - node = Node::middle(&node, &sibling_node); - } else { - node = Node::middle(&sibling_node, &node); - } - - for (balance, sibling_balance) in balances.iter_mut().zip(sibling_node.balances.iter()) { - *balance += sibling_balance; - } - } - - proof.root_hash == node.hash && balances == node.balances -}