diff --git a/yarn-project/acir-simulator/src/client/private_execution.test.ts b/yarn-project/acir-simulator/src/client/private_execution.test.ts index 37a553d9949..2a811e5f594 100644 --- a/yarn-project/acir-simulator/src/client/private_execution.test.ts +++ b/yarn-project/acir-simulator/src/client/private_execution.test.ts @@ -104,6 +104,8 @@ describe('Private Execution test suite', () => { return trees[name]; }; + const hash = (data: Buffer[]) => pedersenPlookupCommitInputs(circuitsWasm, data); + beforeAll(async () => { circuitsWasm = await CircuitsWasm.get(); logger = createDebugLogger('aztec:test:private_execution'); @@ -283,6 +285,32 @@ describe('Private Execution test suite', () => { expect(recipientNote.preimage[0]).toEqual(new Fr(amountToTransfer)); expect(changeNote.preimage[0]).toEqual(new Fr(balance - amountToTransfer)); }, 30_000); + + it('Should be able to claim a note by providing the correct secret', async () => { + const contractAddress = AztecAddress.random(); + const amount = 100n; + const secret = Fr.random(); + const abi = ZkTokenContractAbi.functions.find(f => f.name === 'claim')!; + + const storageSlot = 2n; + const innerNoteHash = hash([toBufferBE(amount, 32), secret.toBuffer()]); + const noteHash = Fr.fromBuffer(hash([toBufferBE(storageSlot, 32), innerNoteHash])); + + const result = await runSimulator({ + origin: contractAddress, + abi, + args: [amount, secret, recipient], + }); + + // Check a nullifier has been created. + const newNullifiers = result.callStackItem.publicInputs.newNullifiers.filter(field => !field.equals(Fr.ZERO)); + expect(newNullifiers).toHaveLength(1); + + // Check the read request was created successfully. + const readRequests = result.callStackItem.publicInputs.readRequests.filter(field => !field.equals(Fr.ZERO)); + expect(readRequests).toHaveLength(1); + expect(readRequests[0]).toEqual(noteHash); + }, 30_000); }); describe('nested calls', () => { @@ -373,9 +401,7 @@ describe('Private Execution test suite', () => { const wasm = await CircuitsWasm.get(); const secret = new Fr(1n); const secretHash = computeSecretMessageHash(wasm, secret); - const commitment = Fr.fromBuffer( - pedersenPlookupCommitInputs(wasm, [toBufferBE(amount, 32), secretHash.toBuffer()]), - ); + const commitment = Fr.fromBuffer(hash([toBufferBE(amount, 32), secretHash.toBuffer()])); const siloedCommitment = siloCommitment(wasm, contractAddress, commitment); const tree = await insertLeaves([siloedCommitment.toBuffer()]); diff --git a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/hash.nr b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/hash.nr new file mode 100644 index 00000000000..9cae0fb2a96 --- /dev/null +++ b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/hash.nr @@ -0,0 +1,78 @@ +use dep::std::hash::sha256; + +// Computes a content hash of a deposit/mint message. +fn get_mint_content_hash(amount: Field, owner_address: Field, canceller: Field) -> pub Field { + let mut hash_bytes: [u8; 100] = [0; 100]; + let amount_bytes = amount.to_be_bytes(32); + let recipient_bytes = owner_address.to_be_bytes(32); + let canceller_bytes = canceller.to_be_bytes(32); + + for i in 0..32 { + hash_bytes[i + 4] = amount_bytes[i]; + hash_bytes[i + 36] = recipient_bytes[i]; + hash_bytes[i + 68] = canceller_bytes[i]; + } + + // Function selector: 0xeeb73071 keccak256('mint(uint256,bytes32,address)') + hash_bytes[0] = 0xee; + hash_bytes[1] = 0xb7; + hash_bytes[2] = 0x30; + hash_bytes[3] = 0x71; + + let content_sha256 = sha256(hash_bytes); + + // // Convert the content_sha256 to a field element + let mut v = 1; + let mut high = 0 as Field; + let mut low = 0 as Field; + + for i in 0..16 { + high = high + (content_sha256[15 - i] as Field) * v; + low = low + (content_sha256[16 + 15 - i] as Field) * v; + v = v * 256; + } + + // Abuse that a % p + b % p = (a + b) % p and that low < p + let content_hash = low + high * v; + content_hash +} + +// Computes a content hash of a withdraw message. +fn get_withdraw_content_hash(amount: Field, recipient: Field, callerOnL1: Field) -> pub Field { + // Compute the content hash + // Compute sha256(selector || amount || recipient) + // then convert to a single field element + // add that to the l2 to l1 messages + let mut hash_bytes: [u8; 100] = [0; 100]; + let amount_bytes = amount.to_be_bytes(32); + let recipient_bytes = recipient.to_be_bytes(32); + let callerOnL1_bytes = callerOnL1.to_be_bytes(32); + + // 0xb460af94, selector for "withdraw(uint256,address,address)" + hash_bytes[0] = 0xb4; + hash_bytes[1] = 0x60; + hash_bytes[2] = 0xaf; + hash_bytes[3] = 0x94; + + for i in 0..32 { + hash_bytes[i + 4] = amount_bytes[i]; + hash_bytes[i + 36] = recipient_bytes[i]; + hash_bytes[i + 68] = callerOnL1_bytes[i]; + } + let content_sha256 = sha256(hash_bytes); + + // Convert the content_sha256 to a field element + let mut v = 1; + let mut high = 0 as Field; + let mut low = 0 as Field; + + for i in 0..16 { + high = high + (content_sha256[15 - i] as Field) * v; + low = low + (content_sha256[16 + 15 - i] as Field) * v; + v = v * 256; + } + + // Abuse that a % p + b % p = (a + b) % p and that low < p + let content = low + high * v; + content +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr index b1a567140bf..ea6a8e21ab2 100644 --- a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/main.nr @@ -1,3 +1,4 @@ +mod hash; mod storage; // Represents an ERC20 token bridged from L1 to L2 via `l1-contracts/test/portals/TokenPortal.sol`. The bridged user @@ -18,14 +19,12 @@ contract NonNativeToken { // Libs use dep::token_utils::{ balance_utils, - value_note::{ - value_note::ValueNote, - utils::spend_notes, - } + value_note::utils::{send_note, spend_notes}, }; use dep::custom_notes::transparent_note::TransparentNote; use crate::storage::Storage; + use crate::hash::{get_mint_content_hash, get_withdraw_content_hash}; use dep::aztec::context::Context; use dep::aztec::types::point::Point; @@ -40,17 +39,13 @@ contract NonNativeToken { // oracles use dep::aztec::oracle::{ create_l2_to_l1_message::create_l2_to_l1_message, - create_commitment::create_commitment, - create_nullifier::create_nullifier, - get_commitment::get_commitment, }; // public messaging use dep::aztec::messaging::consume_l1_to_l2_message_public; use dep::aztec::public_call_stack_item::PublicCallStackItem; - use dep::aztec::log::emit_encrypted_log; - use dep::aztec::note::note_getter::NoteGetterOptions; + use dep::aztec::oracle::create_commitment::create_commitment; fn constructor( //*********************************/ @@ -64,12 +59,8 @@ contract NonNativeToken { let mut context = Context::new(inputs, abi::hash_args([initial_supply, owner.x, owner.y])); - let owner_balance = storage.balances.at(owner.x); - let note = ValueNote::new(initial_supply, owner); - - // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. - context = owner_balance.insert(context, note); - context = emit_encrypted_log(context, inputs.call_context.storage_contract_address, owner_balance.storage_slot, note.owner, note.serialise()); + let balance = storage.balances.at(owner.x); + context = send_note(context, inputs, balance, initial_supply, owner); // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel. context.finish() @@ -97,25 +88,19 @@ contract NonNativeToken { amount, owner.x, owner.y, owner_address, msg_key, secret, canceller ])); - let content_hash = _get_mint_content_hash(amount, owner_address, canceller); + let content_hash = get_mint_content_hash(amount, owner_address, canceller); // Get the l1 message from an oracle call let updated_context = context.consume_l1_to_l2_message(inputs, msg_key, content_hash, secret); context = updated_context; - let owner_balance = storage.balances.at(owner.x); - let note = ValueNote::new(amount, owner); - - // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. - context = owner_balance.insert(context, note); - context = emit_encrypted_log(context, inputs.call_context.storage_contract_address, owner_balance.storage_slot, note.owner, note.serialise()); + let balance = storage.balances.at(owner.x); + context = send_note(context, inputs, balance, amount, owner); // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel. context.finish() } - - // Withdraws using user's private balance. // @dev Destroys 2 of user's notes and sends a message to the L1 portal contract. That message can then be consumed // by calling the `withdraw` function on the L1 portal contract (assuming the args are set correctly). @@ -137,7 +122,7 @@ contract NonNativeToken { let sender_balance = storage.balances.at(sender.x); context = spend_notes(context, inputs, sender_balance, amount, sender); - let content = _get_withdraw_content_hash(amount, recipient, callerOnL1); + let content = get_withdraw_content_hash(amount, recipient, callerOnL1); context = context.message_portal(content); // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel. @@ -162,7 +147,7 @@ contract NonNativeToken { let storage = Storage::init(); let public_balances = storage.public_balances; - let content_hash = _get_mint_content_hash(amount, owner_address, canceller); + let content_hash = get_mint_content_hash(amount, owner_address, canceller); // Consume message and emit nullifier consume_l1_to_l2_message_public(inputs, msg_key, content_hash, secret); @@ -199,7 +184,7 @@ contract NonNativeToken { } // TODO: Revert if there is not enough balance - let content = _get_withdraw_content_hash(amount, recipient, callerOnL1); + let content = get_withdraw_content_hash(amount, recipient, callerOnL1); // Emit the l2 to l1 message create_l2_to_l1_message(content); @@ -226,17 +211,8 @@ contract NonNativeToken { let sender_balance = storage.balances.at(sender.x); context = spend_notes(context, inputs, sender_balance, amount, sender); - // Creates 2 new notes, one for the recipient and one for the sender (change note). - let recipient_note = ValueNote::new(amount, recipient); - - // Get the recipient's set of notes. - let recipient_balance = storage.balances.at(recipient.x); - - // Insert the 2 new notes to the recipient's and sender's sets of notes. - context = recipient_balance.insert(context, recipient_note); - - // Emit the newly created encrypted note preimages via oracle calls. - context = emit_encrypted_log(context, inputs.call_context.storage_contract_address, recipient_balance.storage_slot, recipient_note.owner, recipient_note.serialise()); + let balance = storage.balances.at(recipient.x); + context = send_note(context, inputs, balance, amount, recipient); // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel. context.finish() @@ -287,12 +263,8 @@ contract NonNativeToken { context = public_note.consume_in_secret(context, inputs.roots.private_data_tree_root, secret); // Mint the tokens - let owner_balance = storage.balances.at(owner.x); - let note = ValueNote::new(amount, owner); - - // Insert note and emit encrypted preimage - context = owner_balance.insert(context, note); - context = emit_encrypted_log(context, inputs.call_context.storage_contract_address, owner_balance.storage_slot, note.owner, note.serialise()); + let balance = storage.balances.at(owner.x); + context = send_note(context, inputs, balance, amount, owner); context.finish() } @@ -337,7 +309,6 @@ contract NonNativeToken { recipient_balance.write(new_balance); } - /// ABI getBalance type "unconstrained" fn getBalance( owner: Point, @@ -347,81 +318,4 @@ contract NonNativeToken { balance_utils::get_balance(owner_balance.storage_slot) } - - // Computes a content hash of a deposit/mint message. - fn _get_mint_content_hash(amount: Field, owner_address: Field, canceller: Field) -> pub Field { - let mut hash_bytes: [u8; 100] = [0; 100]; - let amount_bytes = amount.to_be_bytes(32); - let recipient_bytes = owner_address.to_be_bytes(32); - let canceller_bytes = canceller.to_be_bytes(32); - - for i in 0..32 { - hash_bytes[i + 4] = amount_bytes[i]; - hash_bytes[i + 36] = recipient_bytes[i]; - hash_bytes[i + 68] = canceller_bytes[i]; - } - - // Function selector: 0xeeb73071 keccak256('mint(uint256,bytes32,address)') - hash_bytes[0] = 0xee; - hash_bytes[1] = 0xb7; - hash_bytes[2] = 0x30; - hash_bytes[3] = 0x71; - - let content_sha256 = dep::std::hash::sha256(hash_bytes); - - // // Convert the content_sha256 to a field element - let mut v = 1; - let mut high = 0 as Field; - let mut low = 0 as Field; - - for i in 0..16 { - high = high + (content_sha256[15 - i] as Field) * v; - low = low + (content_sha256[16 + 15 - i] as Field) * v; - v = v * 256; - } - - // Abuse that a % p + b % p = (a + b) % p and that low < p - let content_hash = low + high * v; - content_hash - } - - // Computes a content hash of a withdraw message. - fn _get_withdraw_content_hash(amount: Field, recipient: Field, callerOnL1: Field) -> pub Field { - // Compute the content hash - // Compute sha256(selector || amount || recipient) - // then convert to a single field element - // add that to the l2 to l1 messages - let mut hash_bytes: [u8; 100] = [0; 100]; - let amount_bytes = amount.to_be_bytes(32); - let recipient_bytes = recipient.to_be_bytes(32); - let callerOnL1_bytes = callerOnL1.to_be_bytes(32); - - // 0xb460af94, selector for "withdraw(uint256,address,address)" - hash_bytes[0] = 0xb4; - hash_bytes[1] = 0x60; - hash_bytes[2] = 0xaf; - hash_bytes[3] = 0x94; - - for i in 0..32 { - hash_bytes[i + 4] = amount_bytes[i]; - hash_bytes[i + 36] = recipient_bytes[i]; - hash_bytes[i + 68] = callerOnL1_bytes[i]; - } - let content_sha256 = dep::std::hash::sha256(hash_bytes); - - // Convert the content_sha256 to a field element - let mut v = 1; - let mut high = 0 as Field; - let mut low = 0 as Field; - - for i in 0..16 { - high = high + (content_sha256[15 - i] as Field) * v; - low = low + (content_sha256[16 + 15 - i] as Field) * v; - v = v * 256; - } - - // Abuse that a % p + b % p = (a + b) % p and that low < p - let content = low + high * v; - content - } } diff --git a/yarn-project/noir-contracts/src/contracts/public_private_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/public_private_contract/Nargo.toml deleted file mode 100644 index eb2d7c5c68f..00000000000 --- a/yarn-project/noir-contracts/src/contracts/public_private_contract/Nargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -authors = [""] -compiler_version = "0.7.1" - -[dependencies] -aztec = { path = "../../libs/noir-aztec" } -custom_notes = { path = "../../libs/custom-notes" } -token_utils = { path = "../../libs/token-utils" } diff --git a/yarn-project/noir-contracts/src/contracts/public_private_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/public_private_contract/src/main.nr deleted file mode 100644 index a3f9ba1bbc9..00000000000 --- a/yarn-project/noir-contracts/src/contracts/public_private_contract/src/main.nr +++ /dev/null @@ -1,110 +0,0 @@ -mod storage; -use dep::std::hash::pedersen; - -// A contract used to test insertion of a note from public domain into the private data tree. How this works is that -// a user provides a secret hash as an argument on the input of the public function, and the contract then inserts -// a note into the private data tree once the public call is processed. A note can later on be spent by providing -// the secret hash preimage on the input of a private function call. -// -// This flow will be typically used when performing a token swap: -// 1. A calls a private function which enqueues a public call to the DEX contract (with the secret hash on input). -// 2. The sequencer performs the public call to the DEX and the note gets inserted into the private data tree. -// 3. At this point a recipient can spend the note in a private function assuming he/she knows the secret. -contract PublicPrivate { - // Custom deps - use dep::token_utils::balance_utils; - use dep::token_utils::value_note::value_note::ValueNote; - use dep::custom_notes::transparent_note::TransparentNote; - - use crate::storage::Storage; - - use dep::aztec::context::Context; - - use dep::aztec::{ - abi, - abi::{ - PrivateContextInputs, - PublicContextInputs, - } - }; - - // Private state - use dep::aztec::{ - types::point::Point, - state_vars::{ - map::Map, set::Set - }, - }; - - // oracles - use dep::aztec::oracle::{ - create_commitment::create_commitment, - create_l2_to_l1_message::create_l2_to_l1_message, - create_nullifier::create_nullifier, - get_commitment::get_commitment - }; - - // Logs - use dep::aztec::log::emit_encrypted_log; - - fn constructor( - inputs: PrivateContextInputs, - ) -> distinct pub abi::PrivateCircuitPublicInputs { - // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel. - Context::new(inputs, 0).finish() - } - - // A public function which inserts a note to the private data tree. - open fn mintFromPublicToPrivate( - _inputs: PublicContextInputs, - amount: Field, - secretHash: Field, - ) { - // Create a commitment to the amount - let note = TransparentNote::new(amount, secretHash); - - // Public oracle call to emit new commitment. - create_commitment(note.get_commitment()); - } - - // Consumes the transparent note and creates a standard note. - fn mintFromPublicMessage( - inputs: PrivateContextInputs, - amount: Field, - secret: Field, - owner: Point, - ) -> distinct pub abi::PrivateCircuitPublicInputs { - let storage = Storage::init(); - let mut context = Context::new(inputs, abi::hash_args([ - amount, - secret, - owner.x, - owner.y, - ])); - - // Assert that the note exists within the tree - let public_note = TransparentNote::new_from_secret(amount, secret); - context = public_note.consume_in_secret(context, inputs.roots.private_data_tree_root, secret); - - // Mint the tokens - let owner_balance = storage.balances.at(owner.x); - let note = ValueNote::new(amount, owner); - - // Insert note and emit encrypted preimage - context = owner_balance.insert(context, note); - let preimage = note.serialise(); - context = emit_encrypted_log(context, inputs.call_context.storage_contract_address, owner_balance.storage_slot, note.owner, preimage); - - // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel. - context.finish() - } - - /// ABI getBalance type "unconstrained" - fn getBalance( - owner: Point, - ) -> pub Field { - let storage = Storage::init(); - let owner_balance = storage.balances.at(owner.x); - balance_utils::get_balance(owner_balance.storage_slot) - } -} diff --git a/yarn-project/noir-contracts/src/contracts/public_private_contract/src/storage.nr b/yarn-project/noir-contracts/src/contracts/public_private_contract/src/storage.nr deleted file mode 100644 index 55cb3eb8d5b..00000000000 --- a/yarn-project/noir-contracts/src/contracts/public_private_contract/src/storage.nr +++ /dev/null @@ -1,22 +0,0 @@ -use dep::aztec::state_vars::{ - map::Map, - set::Set -}; - -use dep::token_utils::value_note::value_note::{ - ValueNote, - ValueNoteInterface, - VALUE_NOTE_LEN, -}; - -struct Storage { - balances: Map>, -} - -impl Storage { - fn init() -> Self { - Storage { - balances: Map::new(1, |s| Set::new(s, ValueNoteInterface)), - } - } -} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/zk_token_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/zk_token_contract/Nargo.toml index d55250f05fa..fc354666d1e 100644 --- a/yarn-project/noir-contracts/src/contracts/zk_token_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/zk_token_contract/Nargo.toml @@ -4,4 +4,5 @@ compiler_version = "0.1" [dependencies] aztec = { path = "../../libs/noir-aztec" } +custom_notes = { path = "../../libs/custom-notes" } token_utils = { path = "../../libs/token-utils"} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/zk_token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/zk_token_contract/src/main.nr index 97e778949ff..6f43d845e61 100644 --- a/yarn-project/noir-contracts/src/contracts/zk_token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/zk_token_contract/src/main.nr @@ -4,13 +4,9 @@ contract ZkToken { // Libs use dep::token_utils::{ balance_utils, - value_note::{ - value_note::ValueNote, - utils::spend_notes, - } + value_note::utils::{send_note, spend_notes}, }; - - use crate::storage::Storage; + use dep::custom_notes::claim_note::ClaimNote; use dep::aztec::abi; use dep::aztec::abi::PrivateContextInputs; @@ -22,6 +18,8 @@ contract ZkToken { use dep::aztec::log::emit_encrypted_log; use dep::aztec::log::emit_unencrypted_log; + use crate::storage::Storage; + // Constructs the contract and sets `initial_supply` which is fully owned by `owner`. fn constructor( @@ -35,13 +33,9 @@ contract ZkToken { let storage = Storage::init(); let mut context = Context::new(inputs, abi::hash_args([initial_supply, owner.x, owner.y])); - let owner_balance = storage.balances.at(owner.x); - let note = ValueNote::new(initial_supply, owner); - // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. - context = owner_balance.insert(context, note); - let preimage = note.serialise(); - context = emit_encrypted_log(context, inputs.call_context.storage_contract_address, owner_balance.storage_slot, note.owner, preimage); + let owner_balance = storage.balances.at(owner.x); + context = send_note(context, inputs, owner_balance, initial_supply, owner); context = emit_unencrypted_log(context, "Balance set in constructor"); // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel. @@ -60,13 +54,9 @@ contract ZkToken { let storage = Storage::init(); let mut context = Context::new(inputs, abi::hash_args([amount, owner.x, owner.y])); - let owner_balance = storage.balances.at(owner.x); - let note = ValueNote::new(amount, owner); - // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. - context = owner_balance.insert(context, note); - let preimage = note.serialise(); - context = emit_encrypted_log(context, inputs.call_context.storage_contract_address, owner_balance.storage_slot, note.owner, preimage); + let owner_balance = storage.balances.at(owner.x); + context = send_note(context, inputs, owner_balance, amount, owner); context = emit_unencrypted_log(context, "Coins minted"); // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel.. @@ -91,17 +81,65 @@ contract ZkToken { context = spend_notes(context, inputs, sender_balance, amount, sender); // Creates new note for the recipient. - let recipient_note = ValueNote::new(amount, recipient); - - // Get the recipient's set of notes. let recipient_balance = storage.balances.at(recipient.x); + context = send_note(context, inputs, recipient_balance, amount, recipient); + + context = emit_unencrypted_log(context, "Coins transferred"); - // Insert the new note to the recipient's set of notes. - context = recipient_balance.insert(context, recipient_note); + // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel.. + context.finish() + } - // Emit the newly created encrypted note preimages via oracle calls. - context = emit_encrypted_log(context, inputs.call_context.storage_contract_address, recipient_balance.storage_slot, recipient_note.owner, recipient_note.serialise()); - context = emit_unencrypted_log(context, "Coins transferred"); + fn createClaims( + //*********************************/ + // Should eventually be hidden: + inputs: PrivateContextInputs, + //*********************************/ + amounts: [Field; 2], + secrets: [Field; 2], + sender: Point, + ) -> distinct pub abi::PrivateCircuitPublicInputs { + let storage = Storage::init(); + let mut context = Context::new(inputs, abi::hash_args([amounts[0], amounts[1], secrets[0], secrets[1], sender.x, sender.y])); + + // Pick from the set of sender's notes to spend amount. + let sender_balance = storage.balances.at(sender.x); + let total = amounts[0] + amounts[1]; + context = spend_notes(context, inputs, sender_balance, total, sender); + + // Create claim notes. + let claims = storage.claims; + let note0 = ClaimNote::new(amounts[0], secrets[0]); + let note1 = ClaimNote::new(amounts[1], secrets[1]); + + // Insert the new claim notes to the set. + context = claims.insert(context, note0); + context = claims.insert(context, note1); + + // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel.. + context.finish() + } + + fn claim( + //*********************************/ + // Should eventually be hidden: + inputs: PrivateContextInputs, + //*********************************/ + amount: Field, + secret: Field, + owner: Point, + ) -> distinct pub abi::PrivateCircuitPublicInputs { + let storage = Storage::init(); + let mut context = Context::new(inputs, abi::hash_args([amount, secret, owner.x, owner.y])); + + // Remove the claim note if it exists in the set. + let note = ClaimNote::new(amount, secret); + context = storage.claims.has(context, note); + context = storage.claims.remove(context, note); + + // Send the value note. + let balance = storage.balances.at(owner.x); + context = send_note(context, inputs, balance, amount, owner); // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel.. context.finish() diff --git a/yarn-project/noir-contracts/src/contracts/zk_token_contract/src/storage.nr b/yarn-project/noir-contracts/src/contracts/zk_token_contract/src/storage.nr index 97b2e00c0d1..0363d74cf1a 100644 --- a/yarn-project/noir-contracts/src/contracts/zk_token_contract/src/storage.nr +++ b/yarn-project/noir-contracts/src/contracts/zk_token_contract/src/storage.nr @@ -7,15 +7,18 @@ use dep::token_utils::value_note::{ value_note::ValueNoteInterface, value_note::VALUE_NOTE_LEN, }; +use dep::custom_notes::claim_note::{CLAIM_NOTE_LEN, ClaimNote, ClaimNoteInterface}; struct Storage { balances: Map>, + claims: Set, } impl Storage { fn init() -> Self { Storage { balances: Map::new(1, |s| Set::new(s, ValueNoteInterface)), + claims: Set::new(2, ClaimNoteInterface), } } } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json b/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json index 2b35eb6b11c..e6246dda751 100644 --- a/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json +++ b/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json @@ -91,7 +91,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d077455d5b6cd39c9a54b2f767a6f090924f4deab8080a252034420600855050248b142000b2aa2020202a2200a22ddbeb7bda1d84544aad2fb5f67f3feffcf3cdf4265e6bd39ee8863ece5f0cdc762ad79d65e77dfbde7dd678ecd366e67d47b69ab9a0ce9d36f709361635a8c4ceed7b4cf9021698b3a37eed0b2f9acf4284f01431a984d032fcfa1805768e0951a7895065ead81d768e0b51a585c034b6860490d2ca581a535b08c0696d5c0721a585e032b6860450daca4819535b08a0656d5c06a1a585d03a3353046036b6860ac06c669604d0daca581f11a98a081b535b08e06d6d5c07a1a585f031b6860430d6ca4818d35b0890636d5c0661ad85c035b68604b0d6ca581ad35b08d06b6d5c0761ad85e033b6860470deca481d76960670deca2815d35f07a0deca681ddff085cd229b17f62ca88c4e4d93b234aa41730e7d20bca2824a3b08c22328aca2826e3721957c8b852c65532ae96718d8c6b6514975142464919a56494965146465919e56494975141464519956454965145465519d5645497116dce5549bfe9e68bc61823ffdf1a326265c4c9a829a3968c781909326acba823a3ae8c7a32eacb6820a3a18c46321acb6822a3a98c66329acb6821a3a58c56325acb6823a3ad8c7632dacbe820a3a38c4e418cb7f44a5bd638252975d0d0c4d4a47eb367ce4adfd12836ba565c5c627c8dc498d8983ed1356af74da8191d57b36fad849884989a0935fbd748888d4d4c884b88afddb7767c74ed98b8d8c49801356bc70e88bef04fef1d8da22ff11f7c507d1883eacb18543fc6a0fa330695c818d400c6a0063206358831a824c6a06e650c6a3063504318831aca1854326350c318831ace18d46d8c41a53006358231a854405017fb72739d7cc9e82ca38b8cae32ae97d14d4677193d64dc20e346193d65f496d147465f19fd64f497912863808c813206c9489271ab8cc13286c8182a2359c63019c365dc262345c60819a9c1979b91a3f0c48d667c9a6318831acb18d438c6a06e670cea0ec6a0ee640c6a3c6350131883321329a34aa38c6a12655493337de1903ffd26f900bf45c64819a3658c913156c63819b7cbb843c69d32c6cb9820c34c0c4c5a6026056672f0e16fa698bb940d643355db5e36d35474ba8ace50d1bb55f41e15bd5745ef53d1fb55f401159da9a2b354345d4567abe81c159daba20faae8432afab08a3ea2a2f354f451157d4c451f57d1f92afa848a2e50d12755f429157d5a4517aae8a21cbfef5fb32ff4afd84be85f3166a138a931e0929a608c5904e8a43612be9899fdff61c5fceddc9efa5f27fd2f81a0a721048dcf448282b0a2ff566e0bfed949f4df24e8490841133299a020ac84bf9cdbfc0c4e6a0ff81b043d012168e27f8020092b6ec05fcaedb13f7212ff17097a1c4250da7f86201756cd3f9ddbbc7fe724ee2f10f42884a049ff418282b0a2ff546e0f6b4ea2ff24418f40089afc1f262808abdf45737bf0624ee2ff04410f41089af25f202808ab869adb9c3fe324fe2204cd851074d77f89a020acf87f9b5bfa9f7512af10341b42d0d4ff22414158097f98dbccbfe224e1df10340b42d0b4ff32414158d1ff92dbfd7fd149ad017f40d0031082a61310148415fdbbdceefd3b4e6a6420e83e08413348080ac2aaf17fb9ddfd779dc4fd1341f74008ba9b88a0d8c4010306b8dca65f92937f10340342d03d9941d0253a8c91e706f182a9a17b39299a0ef182a9a2fb38299a0af1320d42d1fd9c144d8178b90b42d1039c144d8278990ca16826274513215ed22014cde2a4683cc4cb040845e96cab225917c598691086ee8430349bb388d2215e305fefe770523413e205f3057f2e2745f743bc60bee23fc849d1bd102f982ff90f7152f420c40b66b3fa614e8ae640bc60b6ab1f61a4a80742db85f996378fb3841e8678c19c9921285ada2c2925b15f6ad2a8c4b4a55d87b54becdca77fd298d917547e975c4d971edfce881266aa9966a69b19e66e738fb9d7dc67ee370f989966964937b3cd1c33d73c681e320f9b47cc3cf3a879cc3c6ee69b27cc02f3a479ca3c6d169a45d68bd0e4418b55f1d0332aba444597aae832157d564597abe80a155da9a2cfa9e82a157d5e455f50d1d52aba46455f54d1b52afa928abeaca2eb5474bd8abea2a21b54f45515dda8a29b5474b38a6e51d1ad2aba4d45b7abe86b9921e0db8e10f0bd0669e3eb28057c5b1102be6d1082d6530af83623047c5b2004bd4229e0db8810f06d8210b48152c0b70121e07b1542d0ab9402bef50801df2b108236520af85e4608f8d64108da4429e05b8b10f0bd04216833a5806f0d42c0f72284a02d9402be171002bed51082b6520af85621047ccf4308da4629e05b8910f03d0721683ba5806f3942c0b70242d06b9402be650801dfb310825ea714f02d4108f89642087a8373dffa758897372014bdc949d1768817cc9ed05b9c146d8578c1ec0abdcd49d1668817ccbed03b9c146d8478c1ec0c194e8a3640bc60f6862c2745eb215e30bb43ef520af89e813084d91e7a8fb388de8578790f42d1fb9c141988170ba1e8034e8ade8678790742d1879c14bd09f1f21684a28f3829fa10e2e52308451f7352f43ec4cb07108a3e61a4e80684806f3184e54f394be86388974f2025f429b980ef068c806fb179c62c314bcd32f3ac596e569895e639b3ca3c6f5e30abcd1af3a2596b5e322f9b7566bd79c56c30af9a8d6693d96cb698ad669bd96e5ebb8880ef75553cf4868abea9a26fa9e8db2afa8e8a1a15b52afaae8abea7a2efabe8072afaa18a7ea4a21fabe8272afaa98a7ea6a29fabe80e15fd4245bf54d19d2afa958a7eada2dfa8e8b72afa9d8a7eafa23fa8e88f2aba2b33047c3f22047cbb206dfc28a580ef7b8480ef070841c728057cdf22047cdf41083a4e29e0fb1a21e0fb0642d0094a01df4e8480ef2b08412729057c5f20047c5f42083a4529e0fb1c21e0db0121e834a580ef538480ef3308416728057c1f23047c98afb36729057c1f22047c985db5739402bef711023ecc9eda794a01dfbb08011fe48c282a8252c06710023ec80951944729e07b1b21e0839c0f45f99402be3711023ec8e9505424e5be75940ff11209a1288a93a20888170f425188f3f4e31cc4cb790845d938293a03f172164251764e8a4e41bc9c8650948393a213102f272114e5e4a4e818c4cb710845b928057c6f40183a0a612837e7677e2e8897dc108af270529403e2252784a2cb3829ca06f1921d42515e4e8aa2205e42108af271529417e2251f84a2fc9c14e58178b90c425101468a6e4408f8203ff68b2ac85942f9215e0a404aa820b980ef468c80ef75f38679d3bc65de36ef1863ac79d7bc67de371f980fcd47e663f389f9d47c663e373bcc17e64bb3d37c65be36df986fcd77e67bf383f9d1ecba8880ef27553cb45b457f56d13d2afa8b8aee55d17d2aba5f450fa8e841153da4a2bfaae86f2a7a58458fa8e851153da6a2c755f4848a9e54d1532a7a5a45cfa8e859153da7a2e73554668a0e7b3aeceb70a40e47e9702813647cf29702747c121ba49dc7300af9e4a902947cf2f02114d56094f2c9b40168f9647641288aa514f39d4388f9301bff719462be3308311f66dbbf26a598ef1442cc87d9f4af4529e63b8110f361b6fce329c57cc710623ecc867f02a598ef0842cc87d9efaf4d29e6fb0d21e63b0c21a80ea598ef1042ccf72b84a0ba9462be030831df410841f528c57cfb1062befd1082ea538af97e4188f9f642086a4029e6fb1921e6db0321a821e71e7603889786108a1a7152540fe2a53e84a2c69c14d58178a90ba1a809274509102fb5211435e5a4a816c44b3c84a2669c14c541bcd48450d49c93a21a102fb1108a5a508af97643188a8130d492b3885a40bcb48450d48a93a266102fcd2114b5e6a4a809c44b5308456d38296a04f1d21842515b4e8ada40bcb48550d48e93a256102fad2114b567a4082132333f4158eec05942ed205eda434aa803b998af0046ccf793d96d7e367bcc2f66afd967f69b03e6a039647e35bf99c3e688396a8e99e3e68439694e99d3e68c396bce99f3d68bb09e673ddf7a91d68bb25e4897f4592f9b2e25caaec3397438a70ee7d2e1dc3a9c47872fd3e1bc3a9c4f87f3eb70011d2ea8c38574b8b00e17d1e1a23a5c4c872fd7e12b74f84a1dbe4a87afd6e16b74f85a1d2eaec32574b8a40e97d2e1d23a5c4687cb668ad8af0c44ec5716d2ee87728afd4a41c47ea5211425738afd4a40c47e2521140d6314fb495f02a8fda47d41281ace28f793c60fd0fbc9e70384a2db18057ff2c90a50fcc9073084a21446c99f2c5d009a3f59e140281ac128fa93b52140f5274b480845a98cb23f597c03747fb2468750349251f827df6e00ca3ff91204a16814a3f44fbe3e02b47ff22d1342d16846f19f7c3f07a8ffe46b3c84a2318cf23fd90001e8ff649f0442d1584601a0ec30011480b21105a1681ca30450b6f0001a40d9e98350743be7def7388897db2114ddc149d1188897b1108aeee4a46814c4cb680845e339294a85781909a16802274529102f2320144de4a46838c4cb6d108ad238294a86781906a16812a308504e3e21140d85503499b38a2641bc4c8650348593a289102f69108aeee2a4683cc4cb040845533929ba03e2e54e0845d338299a0af1320d42d1744e8aa640bcdc05a1680623450511a979982b4aefe6aca1e9102f3320357437b90cb02044062805258b51d9a7934d36d9d094dd48d9f9956d5bd92297fd6d394b9083003974911313399d92a32539c693333839ef94c34a391896535d394197e36feb5d6bbde2d6138725ad57ca7aa5ad57c67a652f26102ca7cb8fcaeb70051daea8c39574b8b20e57d1e1aa3a5c4d87abeb70b40ec7e8700d1d8ed5e1381daea9c3b574385e871374b8b60ed7d1e1ba3a5c4f87ebeb70031d6ea8c38d74b8b10e37d1e1a63adc4c879b678a40b019442088f979d3524e816013884010f3f3a6659c02c146108120e6e74dcf720a041b400482981b2896730a04eb410482981b2856700a04eb400482981b2856720a0413200241cc0d14cf710a046b410482981b2856710a04e3200241cc0d14cf730a046b400482981b285ee0140846430482982b2856730a04ab410482d52114ade1140856810804ab42287a91532058092210ac0ca1682da740b0024420581142d14b9cbbe26b215e5e8250f43227456b205e5e8450b48e93a217205e5643285acf49d12a8897e72114bdc249d14a8897e720146de0a46839c4cb0a0845af7252b40ce2e55908451b390582e521142d8550b489b38a3642bc6c8250b49993a20d102faf4228dac249d17a88975720146de5a4e865889775108ab67152b415e2651b84a2ed9c146d8678d902a1e835468a203f4af7ca41687e9db386b643bcbc06a9a1d7c90582854002c172b218957d3ad964930d4dd98d949d5fd9b6952d72d9df96b3043908904317393191d329395a92633c398393f34e39ac94836139d595137439feb65e03eb35b45e23eb35b65e13eb35b55e33eb35bf9840b0852e3f6aa9c3ad74b8b50eb7d1e1b63adc4e87dbeb70071deea8c39d74f83a1deeacc35d74b8ab0e5fafc3dd74b8bb0ef7d0e11b74f8461deea9c337e9f0cd3a7c8b0ef7d2e1de3adc4787fbea703f1deeafc389992210ec0f110826423e0876710a04fb420482fd2014fdc42910ec0d1108f68150b49b5320780b4420d80b42d1cf9c02c19b2002c19b2114ede11408de081108f68450f40ba740b0074420780384a2bd9c02c16e108160770845fb3805825d2102c1eb2114ede7140876860804bb40283ac02910ec0411085e07a1e820a740b0034420d81142d1214e81603b884010f3528f5f3905826d200241ccdb857ee31408b6820804316f173accb92bfe1bc4cb6108454738293a04f1f22b84a2a39c141d80783908a1e8182745fb205ef643283ace49d12f102f7b21149de0a4e86788973d108a4e72528479d9dd6e0845a73805822d2114ed8250749ab38a4e41bc9c8650748693a213102f2721149de5a4e818c4cb710845e738293a02f1721442d1794e8ace41bc9c4750148ae0a4e80cc4cb5908451e2345852102c116089a433e650d8522205e3c480df9e402c1c22081600b598cca3e9d6cb2c986a6ec46caceaf6cdbca16b9ec6fcb59821c04c8a18b9c98c8e9941c2dc9319e9cc1c979a71c56cac1b09ceaca09ba1c7f5bef16ebf5b25e6febf5b15e5febf5b35e7feb255e4c203840971f0dd4e1413a9ca4c3b7eaf0601d1ea2c3437538598787e9f0701dbe4d87537478840ea7eaf0481d1ea5c3a375788c0e8fd5e1713a7cbb0edfa1c377eaf0781d9ea0c31375384d8727e9f0641d9ea2c377658a40700a442008b98e385492532038092210845cb01f2ac529109c081108422ed80f95e614088e8708042117ec87ca700a04ef8008042117ec87ca720a04c74104829097a085ca710a04c74004829097a085ca730a04474104829097a0852a700a0453210241c84bd0421539058229108120e42568a14a9c02c1e1108120e42568a1ca9c02c164884010f212b450154e81e010884010f212b450554e81e0ad1081e0600845d5380582832002c1240845d53977c5ab41bc406e330d4573525405e205729b69288693a24a102f90db4c43353829aa00f102b9cd3414cb4911e47e9250790845719c14958178290ba1a8262745a5205e4a4328aac529101c08a1a82484a278ce2aaa05f10279e344288193a2388817c81b2742b53929aa01f10279e344a80e2745d1102f90374e84ea72525407e205f20ea5503d4e8a12205e20ef500ad567a4a80844203800427303ce1aaa07f102799b1b84a2cc14081601090407c86254f6e964934d3634653752767e65db56b6c8657f5bce12e420400e5de4c4444ea7e468498ef1e40c4ece3be5b0520e86e554574ed0e5f8db7ae3ad37c17a13ad9766bd49d69b6cbd29d6bbeb6202c1a9bafc689a0e4fd7e1193a7cb70edfa3c3f7eaf07d3a7cbf0e3fa0c3337578960ea7ebf06c1d9ea3c37375f8411d7e48871fd6e14774789e0e3faac38fe9f0e33a3c5f879fd0e1053afca40e3fa5c34febf0421d5e942902c1851081e022c807c1cd9c02c1a72002c1a72114ddc229105c0011083e09a1a817a740703e4420f80484a2de9c02c1c72002c1c72114f5e11408ce8308041f8550d4975320f8304420f80884a27e9c02c1072102c1872014f5e71408ce810804e742284ae41408a6430482b321140de01408ce8408046741281ac82910bc1f22107c0042d1204e81e0bd1081e07d108a9238058277430482f74028ba955320381d22109c01a16830e7aef8ad102f1899e9104e8a0641bc6064a6433929c21c1c0d845094cc49517f8817c87b4b42c33829ea0bf102796f4968382745bd215e20ef2d09ddc649d12d102f90f7968452380582d3201441de5b121ac1594529102f989f02a67252341ce205f353c0919c142543bc607e0a388a93a221102f989f028ee6a46814c40be6c7ed6338294a8578c1fcb87d2c2345452102c1a9109ac771d6d0188817cc351be3c80582454102c1a9b218957d3ad964930d4dd98d949d5fd9b6952d72d9df96b3043908904317393191d329395a92633c398393f34e39ac94836139d595137439feb6de7ceb3d61bd05d67bd27a4f59ef69eb2db4dea28b090417ebf2a3677478890e2fd5e1653afcac0e2fd7e1153abc52879fd3e1553afcbc0ebfa0c3ab75788d0ebfa8c36b75f8251d7e5987d7e9f07a1d7e458737e8f0ab3abc518737e9f0661ddea2c35b75789b0e6fd7e1d7324520b81d221084bc6b3ef408a740702b4420b80d42d13c4e81e0668840700b84a2473905821b2102c14d108a1ee314086e8008045f8550f438a740703d4420f80a84a2f99c02c1972102c175108a9ee01408ae8508045f8250b4805320b80622107c1142d1939c02c1172002c1d5108a9ee21408ae8208049f8750f434a74070254420f81c84a2859c02c1e51081e00a08458b380582cb2002c16721142de614082e8108049742287a8673577c31c4cb33108a967052b410e205f383d2a59c143d05f182f941e9324e8a1640bc607e50fa2c2745f3215e303f285dce49d163102f981f94aee0a4681ec40be607a52b390582cf4028c2fca0f439ce2a5a09f182f98eb68a93a2e5102f98ef68cf7352b40ce205f31ded054e8a9640bc60bea3ade6a4e8058817ccaee31a4e8a5641bc60761d5f64a4a818442088d92d58cb59436b205e30e71f6bc90582c54002c1c5b218957d3ad964930d4dd98d949d5fd9b6952d72d9df96b3043908904317393191d329395a92633c398393f34e39ac94836139d595137439feb6de46eb6db2de66eb6db1de56eb6db3de76ebbdf6c702c1c55d5a35ae51b356face886fd3ad17ca21262a309181f103e305262247ba392fe39c8cb332cec8382de3948c93324ec8382ee3988ca3328ec8382ce33719bfca3824e3a08c0332f6cbd82763af8c5f64ec91f1b38cdd327e0afeb2b281291398d2812915989281291198e281b93630d704e6eac05c15982b037345602e0f4cb1c0140d4c91c0140e4ca1c0140c4c81c0e40f4cbec0e40dcc6581c91398dc81c915989c81c91198ec81c91698e681691698a681691298c6816914988681691098fa81a91798ba81a91398da8149084c7c606a05a66660e202131b981a8189094c7460aa07a65a60aa06a64a602a07a652602a06a64260ca07a65c601203d33f30fd02d337307d02d33b30bd02734b606e0ecc4d81e919981b037343607a04a67b60ba05e6fac0740d4c97c0740ecc7581e914988e81e91098f681691798b681691398d68169159896816991c3bd0bd7bd2fd7bd53d7bd77d7bd9bd7bdbfd7bde3d7bd07d8bd2bd8bd4fd8bd73d8bd97d8bdbbd8bddfd8bd03d9bd27d9bd4bd9bd6fd9bd93d9bdb7d9bddbd9bdffd9bd23dabd47dabd6bdabd8fdabdb3dabdd7dabdfbdabd1fdbbd43dbbd67db5dc5e7aeeb7357fab96bffdcd580eefa4077c5a0bb86d05d55e8ae3374571eba6b11ddd589ee7a457705a3bba6d15de5e8ae7b745742ba6b23ddd592eefa497745a5bbc6d25d75e9aec3745766ba6b35ddd59bee7a4e7785a7bbe6d329019d5ad0290a9dead029139d7ad1291c9d0ad229259d9ad2292e9d2ad329379dbad329409d4ad429499ddad429529d6ad5295b9dfad529649d8ad6296d9d1ad729769daad7297f9d3ad829889dcad875b2d7adf786f5deb4de5bd67bdb7aef58cf58cf5aef5debbd67bdf7adf781f53eb4de47d6fbd87a9f58ef53eb7d66bdcfadb7c37a5f58ef4bebedb4de57d6fbda7adf58ef5beb7d67bdefadf783f57eb4deae3f68632b9bf7eb3fa24f97c47ec3a5990d8e992b51a44b17906e205d41ba837409e916d235a47b4817916e225d45ba8b7419e936326b64f6c82c92d924b34a6697cc32996d32eb64f6c92c94d928b35266a7cc5299ad326be38344d36522cb8496892d135c26ba4c7899f8d200a411484390c6200d421a85340c297c990032116442c8c49009221345268c4c1c994032916442c9c4920926134d269c4cbceef257344a37528846ead048191aa942234568a4068d94a0910a34528046eacf48f919a93e23c567a4f68c949e91ca33527846eace48d919a93a234567a4e68c949c918a33527046eacd48b919a93623c566a4d68c949a9122335263464acc488519293023f565a4bc8c549791e232525b464acb486519292c237565a4ac8c549591a2325253464aca484519292823f564a49c8c5493916232524b464ac9482519292423756416cbf851c60f8e65a9a7a0b6de08cc9b81792b306f07e69dc098c0d8c0bc1b98f702f37e603e08cc8781f928301f07e693c07c1a98cf02f379607604e68bc07c19989d81f92a305f07e69bc07c1b98ef02f37d607e08cc8f81d995c37a3ffd7e05968e583b793f4116a9bb2fdd49da334d5292860c491a3877962c179292070e49c4ac9b5c7497ba7272310d1d3e24d17a3fcf9c93b6b4cdc8a1c35b0fe8302c353d22326d51d361c92352d3bd59971e6cda8a2649c97d52c6b6484a1cd2bfe3f039114f374b1ae5452cec923a6cf8ec9933017fc13fd7d0acd9107a8513cc83da0328a34cc96fcf4cf4f7271ec2326bde1581ceba5fb266ddefc815463025b49770ce49767b1133eeff4a7b365d6963032ac4165001c4e45fd43825a5cfd89d11b5acb7cf7afbad77c07a07ad77c87abf5aef37eb1db6de11eb1db5de31eb1db7de09eb9db4de29eb9db6de19eb9db5de39eb9db77e84f53debfbd68fb47e94f543d6cf66fdecd6cf61fd9cd6cf65fddcd6cf63fdcbac9fd7faf9ac9fdffa05ac5fd0fa85ac5fd8fa45ac5fd4fac5ac7fb9f5afb0fe95d6bfcafa575bff1aeb5f6bfde2d62f61fd9233e7a53ddd7ed8a8f448ffc2bf7defc2bf6537e41f7d2a6216e0193ddb62584a62d2c0e4e0dbc8ecd5fdc4764a491ad5273531f88a929a342c7956dad256897d863be2d2a36acd4e5bd1397160d288d4c494d6c9fd13c77819fedbcff0df9117a20e45fd23fa50dac2a0e7ceca71e1bf23bc7fb444c8659241ebb9d43afbe71db725d78d1c969a94989c3a17f5f17ae0d21f19e2e3a386f54b5bbfd466ed877b7e294f854b9bb3b863edff7f8407103cfb803710061c613770f1e57490a69cca5abf8c5e4e65f4722a9b39e57410524e6520e55496bd9c0ed3945379eb97d3cba99c5e4ee533a79c0e43caa91ca49ccab397d3119a72aa68fd0a7a3955d0cba962e694d31148395580945345f6723a4a534e95ad5f492fa74a7a3955ce9c723a0a29a74a9072aa4c5e4e7e499a72aa6afd2a7a3955d1cba96aa694935f12c273154839550ddf377aee833cac6ac8dd2df4810922baffdfbaf5ab676ddd66a05738c13ca868c6039320bf68f881493a66cb09327b6328cb2a080cf396974f28d582a0878779c5fc27cc27de7e0d68038fcd6ae019e8154e300f2a8eb2814b7e719c27de70c220ada910e4b3693fa4bdd5a45e59d68436a65a598d2903bdc209e641c5533626c92f3eac5796099465152f816156969f85f3cab2366465f919f5cab236b481d7c96ae019e8154e300faa2e650397fcea92ae2ceb32ae2c0b403e9b8e41da5b3dea95653d6863aa9fd59832d02b9c601e5403cac624f93508eb956543cab26a20816156963bc27965d908b2b2dc41bdb26c046de08db31a78067a8513cc836a42d9c025bf26a42bcb26d4f3ae0a74de35cd9a7719e8154e300faa19e5bc93fc9a85f5c2a93965593593c0300ba72fc379e1d402b270fa92ba81b78036f096590d3c03bdc209e641b5a26ce0925f2bd285532bea79570e3aef5a67cdbb0cf40a279807d58672de497e6dc27ae1d496b2acda48609885d357e1bc706a0759387d45ddc0db411b78fbac069e815ee104f3a03a503670c9af03e9c2a903f5bcab009d771db3e65d067a8513cc83ea4439ef24bf4e61bd70ba8eb2ac3a49609885d337e1bc70ea0c59387d43ddc03b431b7897ac069e815ee104f3a0ba523670c9af2be9c2a92bf5bcab049d77d767cdbb0cf40a279807d58d72de497eddc27ae1d49db2acba49609885d377e1bc70ea0159387d47ddc07b401bf80d590d3c03bdc209e641dd48d9c025bf1b49174e08c2fef5d294259d12fb27a68c484c9e3d3bdd7afbcdb9e0a24367cb987311f2af9ed6bf49fd733b2362e44f1e0afe8cf7abb3bfb93f5fced90ace5672fffb31678f3b7bc2d993ce9e72f6b4b3679c3debec3967cf3b0f11ce7aceface463a1be56cc8d96cce66773687b3399dcde56c6e67f3387b99b3799dcde76c7e670b385bd0d942ce1676b688b3459d2de6ece5ce5ee1ec95ce5ee5ecd5ce5ee3ecb5ce1677b6c405366fb6fe2d177d0afbdc9fe8e9eccd17fe5c2febf7e65d15f401f72aaae4fa867372fdc239b9fee19c5c62382737209c931b18cec90d0ae7e492c239b95bc339b9c1e19cdc90704e6e683827971ccec90d0be7e486877372b78573722980e4326bffb22874f77244d6eee5efc81546305b71a9847b97925d2af31b9d00a58d0da8305b4005716f747ad4fa23ad3fcafaa3ad3fc6fa63ad3fcefab75bff0eebdf69fdf1d69ff0df789dd2bac4e4db46268e4cec34b2ef90a47efffb42a500fafd4b957253bf542998fd97faa833f726f7d13437b9a7597fa27e93fb44fd26f7b4ccb9c97d3484e789909bdcd3d85f0c3086a69c265b7f925e4e93f4729a9c39e53406c2f32448394d662fa73b68cae92eeb4fd1cb698a5e4e77654e39dd01e1790aa49cee622fa73b69ca699af5a7eae534552fa76999534e7742789e0a29a769ece5349ea69c66587fba5e4ed3f5729a9139e5341ec2f3744839cd6094eb1585d03c12e2e56eea1b25ef866e77dd93b5dd95815ee104f3a0eea514eb497ef772aaadfd548897fb28cbea5e090ca3b6fe81526d0d7a78f743d4d63f50abadef8736f007b21a78067a8513cc839a49d9c025bf99a46aeb998c7795178634a651102fb3a85796b3a08d293dab3165a05738c13ca8d9948d49f29b1dd62bcb399465355b02c3ac2c7785f3ca722e6465b98b7a653917dac01fcc6ae019e8154e300fea21ca062ef93d44bab27c8871655910d2982640bc3c4cbdb27c18da981ec96a4c19e8154e300f6a1e656392fce685f5caf251cab29a2781615696bbc37965f9186465b99b7a65f918b4813f9ed5c033d02b9c601ed47cca062ef9cd275d59cea79e7753a0f3ee89ac7997815ee104f3a01650ce3bc96f41582f9c9ea42cab05121866e1b4279c174e4f41164e7ba81bf853d006fe745603cf40af708279500b291bb8e4b79074e1b4907ade4d85cebb4559f32e03bdc209e6412da69c7792dfe2b05e383d4359568b2530ccc2696f382f9c9640164e7ba91bf81268035f9ad5c033d02b9c601ed432ca062ef92d235d382da39e77d3a1f3eed9ac7997815ee104f3a09653ce3bc96f79582f9c565096d572090cb370da1fce0ba7959085d37eea06be12dac09fcb6ae019e8154e300f6a15650397fc56912e9c5665fe65eefe287781f84467275db846fc79ebbff0afe95c7a335a9d192c5f7a586b38c37a9133acb59c61bdc419d6cb9c61ade30c6b3d6758af7086b58133ac5739c3dac819d626ceb0367386b58533acad9c616de30c6b3b6758af7186f53a67586f7086f52667586f7186f5366758ef70866538c3b29c61bdcb19d67b9c61bdcf19d6079c617dc819d6479c617dcc19d6279c617dca19d6679c617dce19d60eceb0bee00ceb4bceb0767286f51567585f03c2d25fe01b2b474363dd39d138676f77768ab3539d9deeec0467573bbbc6d9179d5debec4bcebeecec3a67d73bfb8ab31b9c7dd5d98dce6e7276b3b35b9cddeaec3667b73bfb9ab3af3bfb86b36f3afb96b36f3bfb8eb3c659ebecbbcebee7ecfbce7ee0ec87ce7ee4ecc7ce7ee2eca7ce7ee6ece7ceee70f60b67bf7476a7b35f39fbf585d3b46facffed454fe146ba3ff1bcb3df5cf873df59ff7b5e55c80f8467d597596f2f461372103cc731d9f9c331d91dca0cc5cba597d48f10adca418817528a768533454ceded27c2f6961bd6de0e13b6b7dcd61f8ac9ee08e7dcdd0d997587215e4829fa399c29626a6f7b08db5b7e587b3b4ed8def25bbf0f26bb139c73f717c8ac3b0ef1424ad1de70a688a9bded236c6fb960eded34617bcb65fd4198ecce70ceddfd9059771ae28594a203e14c11537b3b48d8def2c2dadb79c2f696d7fab741b2cb16c139770f4166dd798417568a7e0d678a98dadb6f84edcd47b5b76c9184edcdb77e3226bb28ceb90bd912ca1609f1424ad19170a688a9bd1d05b737aae48e11f66e0fd6bbb313f66ecffa8998ec72703626c87e57b6ec102fa4149d08678a98dadb49c2f6961dd6de7213b6b7ecd64fc164978773ee9e82ccbadc102fa4149d0e678a98dadb19c2f6960fd6def211b6b77cd61f82c92e3fe7dc3d0b9975f9205e48293a17ce1431b5b7f384ed2d1bacbd15226c6fd9ac3f10935d61cab91b1901997585205e4829f2c29922a2f616e913b6b79cb0f6568cb0bde5b4fead98ec2ee79cbb98edfc62102fa414458533454ced2d44793b6a2febf783b480c86c840d0e995ff6702ece1c84c59903f6d97b156169e6b07e1226bbab393f5872423e12ae827821a528573853c4d4de7213b6b710acbd15276c6f21eb0fc364578273eee681ccbae2102fa4145d16ce1431b5b7bc84edcd4c81f5b7d284fd4dd2f3fb63d22bc3397b310732a5215e4829ca1fce143135b802840d2e12d6dfca13f6b748eb0fc664578173ee1684ccbaf2102fa414150a678a98da5b61c2f69607d6de2a13b6b73cd6ef8bc9ae0ae7dc2d02997595215e48292a1ace1431b5b76284ed2d0ad6deaa13b6b728eb0fc06417cd39772f87ccbaea102fa4145d11c61461ce8653ad7f02334b6229f33b66fde398fce2384bfc4a4871c642bcc4b196f8114c09c453e6f79bf50f63f24be02c71cce16e3cc44b0269894716c294405dc6fc220bc85e1526bf7a9c257e35a438eb42bcd4632df12b3025d090b2c48bc9821e935f23ce12bf06529c0d215e1ab196f8659812684a59e2b96d641e4c7ecd384bfc5a487136857869c65ae21ea6045a52e677de464660f26bc559e21825524b889756ac259e1f53026d29bb785e1b990f935f3bce122f0129ceb6102f708a30bf0329c9195629ceb04a7386558633acb29c6195e30cab3c67581538c3aac8195625ceb02a7386558533acaa9c6155e30cab3a6758ac87b491d9314bee8e945f294236321b26bf4e9c5f2962205f063a42bc74e29c793538c38ae50c8bf3a4fd3beb1fc5e4579393f65a9c61c5738695c019566dceb0ea7086559733ac7a9c61d5e70cab0167580d39c3623d1df64f6316c95d28f33b69fd5398fcba727e09680c59be778178e9cafa3d3717a604ba537ecfcd61237362f2ebc159e24d20c5d91de2a5076b8947614aa0276589fb36321293df4d9c258e51e7f48478b98975a172005302bd28f3db67fdfd98fc7a739678334871f68278e9cd5ae23f634aa01f657e3f597f3726bffe9c25de1c529cfd205efab32e548a624a6020e542a5b08d2c82c96f106789b78014e740889741ac5d7c17a6040653e6f783f57fc4e43784b3c43132e2c1102f43584bfc574c090ca3ccefa0f50f61f21bce59e2ad20c5390ce265386b899fc394c008cafcce58ff2c26bf54ce126f0d29ce11102fa9ac250ebaa86734657e7bacff0b26bf319c25de06529ca3215ec664c6355b971c96bbc7e4d2896ecb99dc5590e4da7126773524b9f69cc95d0349ae036772d74292ebc8995c7148729d38932b0149ee3acee44a4292ebcc995c2948725d38932b0d49ae2b67726520c95dcf995c594872dd38932b0749ae3b6772e521c9f5e04cae0224b91b3893ab0849ee46cee42a4192ebc9995c654872377126570592dccd9cc9558524770b6772d520c9f5e24cae3a24b9de9cc9454392ebc3995c0c24b9be9cc9d58024d78f33b9584872fd39938b832497c8995c4d4872033893ab05496e206772f190e40671269700492e8933b9da90e46ee54cae0e24b9c19cc9d58524378433b97a90e4867226571f925c3267720d20c90de34cae2124b9e19cc9358224771b67728d21c9a57026d70492dc08cee49a42924be54cae1924b9919cc9358724378a33b91690e4467326d712921ca96aaf1524b9b19cc9b58624378e33b93690e46ebff4e47646f4f4fcc8a850b6ec3972e6ca9de7b2bcf9f2172858a87091a2c52ebfe2caabaebee6dae2254a962a5da66cb9f2152a56aa5ca56ab5ead1313562e36ad68a4fa85da76ebdfa0d1a366adca469b3e62d5ab66adda66dbbf61d3a76baae7397aed777ebdee3861b7bee8c905cdbdac87636b2bd8dec60233bdac84e36f23a1bd9d94676b1915d6de4f536b29b9ceecb19b89c14cb79aa9c3acad99c9c60c9398f9c86c89981ecaccbfeb3ecd2ca5ea6ecf8c9be98ec1ec91e8bec44c8f775f9562bdffde41b927c8f90d5b6ac4965e526eb1b5905c867a57ca248df95ee2473582a5dea4158fb1f", + "bytecode": "ed5d077455d5b6cd39c9a5231decf4de121248e8bd57010145a5068840c010aa0a049062850016544405040444411444ba7d6f7b43b18b8854a5f7bfcee6fdff9f79be85cacc7b73dc11c7d8cbe19b8fc55af3acbdeebe7bcf7bf61c9b6ddccea8f7d2563519d2a7dfe026c3c6b41899dcaf699f2143d216756edca165f359e9519e028634309b065e9e4301afd0c02b35f02a0dbc5a03afd1c06b35b0b80696d0c0921a584a034b6b60190d2cab81e534b0bc0656d0c08a1a5849032b6b60150dacaa81d534b0ba06466b608c06d6d0c0580d8cd3c09a1a584b03e3353041036b6b601d0dacab81f534b0be0636d0c0861ad848031b6b60130d6caa81cd34b0b906b6d0c0961ad84a035b6b601b0d6cab81ed34b0bd0676d0c08e1ad84903afd3c0ce1ad84503bb6ae0f51ad84d03bbff11b8a45362ffc4941189c9b3774694482f60cea51794514846611945641495514cc6e532ae9071a58cab645c2de31a19d7ca282ea3848c92324ac9282da38c8cb232cac9282fa3828c8a322ac9a82ca38a8caa32aac9a82e23da9cab927ed3cd178d3146febf3564c4ca88935153462d19f1321264d4965147465d19f564d497d1404643198d643496d144465319cd643497d142464b19ad64b496d146465b19ed64b497d1414647199d82186fe995b6ac714a52eaa0a189a949fd66cf9c95bea3516c74adb8b8c4f81a8931b1317da26bd4ee9b50333aae66df5a0931093135136af6af91101b9b981097105fbb6fedf8e8da3171b18931036ad68e1d107de19fde3b1a455fe23ff8a0fa3006d59731a87e8c41f5670c2a9131a8018c410d640c6a106350498c41ddca18d460c6a0863006359431a864c6a0863106359c31a8db18834a610c6a046350a980a02ef6e5e63af992d1594617195d655c2fa39b8cee327ac8b841c68d327acae82da38f8cbe32fac9e82f2351c6001903650c929124e3561983650c91315446b28c613286cbb84d468a8c113252832f372347e1891bcdf834c73006359631a8718c41ddce18d41d8c41ddc918d478c6a026300665265246954619d524caa82667fac2217ffa4df2017e8b8c913246cb182363ac8c71326e9771878c3b658c97314186991898b4c04c0acce4e0c3df4c3177291bc866aab6bd6ca6a9e874159da1a277abe83d2a7aaf8adea7a2f7abe8032a3a534567a968ba8ace56d1392a3a57451f54d18754f461157d4445e7a9e8a32afa988a3eaea2f355f409155da0a24faae8532afab48a2e54d145397edfbf665fe85fb197d0bf62cc42715263c02535c118b308d0496d247c3133fbffc38af9dbb93df5bf4efa5f02414f43081a9f8904056145ffaddc16fcb393e8bf49d0931082266432414158097f39b7f9199cd41ef037087a0242d0c4ff00411256dc80bf94db637fe424fe2f12f43884a0b4ff0c412eac9a7f3ab779ffce49dc5f20e851084193fe8304056145ffa9dc1ed69c44ff49821e811034f93f4c501056bf8be6f6e0c59cc4ff09821e821034e5bf405010560d35b7397fc649fc45089a0b21e8aeff12414158f1ff36b7f43feb245e21683684a0a9ff458282b012fe30b7997fc549c2bf21681684a069ff658282b0a2ff25b7fbffa2935a03fe80a00720044d272028082bfa77b9ddfb779cd4c840d07d1082669010148455e3ff72bbfbef3a89fb2782ee811074371141b18903060c70b94dbf2427ff20680684a07b3283a04b741823cf0de2055343f77252341de2055345f771523415e2651a84a2fb39299a02f1721784a20738299a04f1321942d14c4e8a2642bca441289ac549d178889709108ad2d95645b22e8a31d3200cdd096168366711a543bc60bedecfe1a46826c40be60bfe5c4e8aee8778c17cc57f9093a27b215e305ff21fe2a4e8418817cc66f5c39c14cd8178c16c573fc248510f84b60bf32d6f1e67093d0cf18239334350b4b459524a62bfd4a45189694bbb0e6b97d8b94fffa431b32fa8fc2eb99a2e3dbe9d1125cc5433cd4c3733ccdde61e73afb9cfdc6f1e3033cd2c936e669b3966ae79d03c641e368f9879e651f39879dccc374f9805e649f39479da2c348bac17a1c98316abe2a1675474898a2e55d1652afaac8a2e57d1152aba52459f53d1552afabc8abea0a2ab55748d8abea8a26b55f425157d5945d7a9e87a157d454537a8e8ab2aba514537a9e86615dda2a25b55749b8a6e57d1d73243c0b71d21e07b0dd2c6d7510af8b622047cdb2004ada714f06d4608f8b640087a8552c0b71121e0db04216803a5806f0342c0f72a84a05729057ceb1102be5720046da414f0bd8c10f0ad8310b48952c0b71621e07b0942d0664a01df1a8480ef4508415b28057c2f20047cab21046da514f0ad4208f89e8710b48d52c0b71221e07b0e42d0764a01df7284806f0584a0d728057ccb1002be672104bd4e29e05b8210f02d8510f406e7bef5eb102f6f40287a9393a2ed102f983da1b73829da0af182d9157a9b93a2cd102f987da1773829da08f182d919329c146d8078c1ec0d594e8ad643bc607687dea514f03d036108b33df41e6711bd0bf1f21e84a2f7392932102f1642d1079c14bd0df1f20e84a20f39297a13e2e52d08451f7152f421c4cb47108a3ee6a4e87d88970f20147dc248d10d0801df6208cb9f7296d0c7102f9f404ae8537201df0d1801df62f38c5962969a65e659b3dcac302bcd73669579debc60569b35e645b3d6bc645e36ebcc7af38ad9605e351bcd26b3d96c315bcd36b3ddbc761101dfebaa78e80d157d5345df52d1b755f41d15352a6a55f45d157d4f45df57d10f54f44315fd48453f56d14f54f45315fd4c453f57d11d2afa858a7ea9a23b55f42b15fd5a45bf51d16f55f43b15fd5e457f50d11f5574576608f87e4408f87641daf8514a01dff70801df0f10828e510af8be4508f8be8310749c52c0f73542c0f70d84a0139402be9d0801df5710824e520af8be4008f8be8410748a52c0f73942c0b70342d0694a01dfa70801df671082ce500af83e4608f8305f67cf520af83e4408f830bb6ae728057cef23047c983db5f39402be7711023ec819515404a580cf20047c9013a2288f52c0f73642c007391f8af229057c6f22047c90d3a1a848ca7deb281fe22512425114274511102f1e84a210e7e9c7398897f3108ab271527406e2e52c84a2ec9c149d8278390da12807274527205e4e4228cac949d1318897e3108a72510af8de80307414c2506ececffc5c102fb92114e5e1a42807c44b4e0845793929ca06f1921d42d1659c144541bc842014e5e3a4e83288977c108af273529407e2252f84a2028c14dd8810f0417eec175590b384f243bc14809450417201df8d1801dfebe60df3a679cbbc6dde31c658f3ae79cfbc6f3e301f9a8fccc7e613f3a9f9cc7c6e76982fcc9766a7f9ca7c6dbe31df9aefccf7e607f3a3d9751101df4faa7868b78afeaca27b54f41715ddaba2fb5474bf8a1e50d1832a7a48457f55d1df54f4b08a1e51d1a32a7a4c458fabe809153da9a2a754f4b48a9e51d1b32a7a4e45cf6ba8cc141df674d8d7e1481d8ed2e15026c8f8e42f05e8f82436483b8f6114f2c9530528f9e4e14328aac128e5936903d0f2c9ec8250144b29e63b8710f36136fee328c57c6710623eccb67f4d4a31df2984980fb3e95f8b52cc770221e6c36cf9c7538af98e21c47c980dff044a31df1184980fb3df5f9b52ccf71b42cc771842501d4a31df218498ef5708417529c57c071062be831082ea518af9f621c47cfb2104d5a714f3fd8210f3ed8510d48052ccf73342ccb707425043ce3dec06102f0d211435e2a4a81ec44b7d08458d3929aa03f152174251134e8a12205e6a43286aca49512d8897780845cd38298a8378a909a1a839274535205e622114b5a014f3ed8630140361a8256711b580786909a1a8152745cd205e9a43286acd4951138897a6108ada7052d408e2a53184a2b69c14b58178690ba1a81d2745ad205e5a43286acf48114264667e82b0dc81b384da41bcb48794500772315f018c98ef27b3dbfc6cf6985fcc5eb3cfec3707cc4173c8fc6a7e3387cd1173d41c33c7cd0973d29c32a7cd1973d69c33e7ad17613dcf7abef522ad1765bd902ee9b35e365d4a945d8773e8704e1dcea5c3b975388f0ee7d5e1cb74389f0ee7d7e1023a5c50870be970611d2ea2c34575b8980e5faec357e8f0953a7c950e5fadc3d7e8f0b53a5c5c874be870491d2ea5c3a575b88c0e97cd14b15f1988d8af2ca4dd0fe514fb958288fd4a43284ae614fb958088fd4a42281ac628f693be0450fb49fb8250349c51ee278d1fa0f793cf070845b7310afee49315a0f8930f600845298c923f59ba00347fb2c28150348251f4276b4380ea4f9690108a5219657fb2f806e8fe648d0ea16824a3f04fbedd00947ff2250842d12846e99f7c7d0468ffe45b2684a2d18ce23ff97e0e50ffc9d77808456318e57fb20102d0ffc93e0984a2b18c0240d96102280065230a42d1384609a06ce1013480b2d307a1e876cebdef71102fb74328ba8393a231102f632114ddc949d1288897d1108ac67352940af1321242d1044e8a52205e4640289ac849d1708897db2014a57152940cf1320c42d1244611a09c7c42281a0aa1683267154d8278990ca1680a274513215ed22014ddc549d178889709108aa672527407c4cb9d108aa671523415e2651a84a2e99c144d8178b90b42d10c468a0a2252f330af28bd9bb386a643bccc80d4d0dde432c0821019a014942c46659f4e36d9644353762365e757b66d658b5cf6b7e52c410e02e4d0454e4ce4744a8e96e4184fcee0e4bc530e2be560584e75e5045d8ebfad77adf58a5b4f1c96b45e29eb95b65e19eb95bd9840b09c2e3f2aafc31574b8a20e57d2e1ca3a5c4587abea70351daeaec3d13a1ca3c33574385687e374b8a60ed7d2e1781d4ed0e1da3a5c4787ebea703d1daeafc30d74b8a10e37d2e1c63adc44879bea70331d6e9e2902c166108120e6e74d4b3905824d200241cccf9b96710a041b410482989f373dcb29106c00110862de40b19c5320580f2210c4bc816205a740b00e4420887903c54a4e8160024420887903c5739c02c15a108120e60d14ab38058271108120e60d14cf730a046b400482983750bcc029108c86080431afa058cd2910ac061108568750b486532058052210ac0aa1e8454e8160258840b03284a2b59c02c10a1081604508452f71ee8aaf8578790942d1cb9c14ad8178791142d13a4e8a5e8078590da1683d2745ab205e9e8750f40a27452b215e9e8350b48193a2e5102f2b2014bdca49d13288976721146de41408968750b41442d126ce2ada08f1b20942d1664e8a3640bcbc0aa1680b2745eb215e5e8150b49593a297215ed64128dac649d15688976d108ab67352b419e2650b84a2d7182982fc28dd2b07a1f975ce1ada0ef1f21aa4865e27170816020904cbc96254f6e964934d3634653752767e65db56b6c8657f5bce12e420400e5de4c4444ea7e468498ef1e40c4ece3be5b0520e86e554574ed0e5f8db7a0dacd7d07a8dacd7d87a4dacd7d47acdacd7fc6202c116bafca8a50eb7d2e1d63adc4687dbea703b1d6eafc31d74b8a30e77d2e1eb74b8b30e77d1e1ae3a7cbd0e77d3e1ee3adc43876fd0e11b75b8a70edfa4c337ebf02d3adc4b877beb701f1deeabc3fd74b8bf0e27668a40b03f44209808f920d8c52910ec0b1108f68350f413a740b0374420d80742d16e4e81e02d1081602f08453f730a046f8208046f8650b487532078234420d81342d12f9c02c11e1081e00d108af6720a04bb410482dd2114ede3140876850804af8750b49f5320d8192210ec02a1e800a740b0134420781d84a2839c02c10e10816047084587380582ed200241cca51ebf720a04db40048298db857ee31408b682080431b70b1de6dc15ff0de2e53084a2239c141d8278f91542d1514e8a0e40bc1c8450748c93a27d102ffb21141de7a4e8178897bd108a4e7052f433c4cb1e0845273929c25c76b71b42d1294e81604b0845bb20149de6aca253102fa721149de1a4e804c4cb4908456739293a06f1721c42d1394e8a8e40bc1c8550749e93a273102fe71114852238293a03f172164291c74851618840b00582e6904f5943a10888170f52433eb940b0304820d84216a3b24f279b6cb2a129bb91b2f32bdbb6b2452efbdb729620070172e8222726723a25474b728c27677072de29879572302ca7ba72822ec7dfd6bbc57abdacd7db7a7dacd7d77afdacd7df7a891713080ed0e547037578900e27e9f0ad3a3c588787e8f0501d4ed6e1613a3c5c876fd3e1141d1ea1c3a93a3c528747e9f0681d1ea3c36375789c0edfaec377e8f09d3a3c5e8727e8f0441d4ed3e1493a3c5987a7e8f05d9922109c021108425e471c2ac929109c041108425eb01f2ac529109c081108425eb01f2acd29101c0f1108425eb01f2ac32910bc03221084bc603f54965320380e2210845c82162ac729101c031108422e410b95e714088e8208042197a0852a700a0453210241c82568a18a9c02c11488401072095aa812a7407038442008b9042d54995320980c1108422e410b55e114080e8108042197a085aa720a046f850804074328aac629101c041108264128aaceb92b5e0de205f236d35034274555205e206f330dc570525409e205f236d3500d4e8a2a40bc40de661a8ae5a408f27e9250790845719c14958178290ba1a8262745a5205e4a4328aac529101c08a1a82484a278ce2aaa05f102b9712294c049511cc40be4c689506d4e8a6a40bc406e9c08d5e1a4281ae20572e344a82e274575205e20772885ea71529400f102b94329549f91a2221081e00008cd0d386ba81ec40be4363708459929102c0212080e90c5a8ecd3c9269b6c68ca6ea4ecfccab6ad6c91cbfeb69c25c841801cbac889899c4ec9d1921ce3c9199c9c77ca61a51c0ccba9ae9ca0cbf1b7f5c65b6f82f5265a2fcd7a93ac37d97a53ac77d7c504825375f9d1341d9eaec33374f86e1dbe4787efd5e1fb74f87e1d7e408767eaf02c1d4ed7e1d93a3c4787e7eaf0833afc900e3facc38fe8f03c1d7e54871fd3e1c77578be0e3fa1c30b74f8491d7e4a879fd6e1853abc285304820b2102c145900f829b3905824f4104824f4328ba855320b80022107c1242512f4e81e07c8840f0090845bd3905828f4104828f4328eac329109c0711083e0aa1a82fa740f0618840f0110845fd3805820f4204820f4128eacf29109c031108ce855094c829104c8708046743281ac029109c091108ce825034905320783f4420f80084a2419c02c17b2102c1fb201425710a04ef860804ef8150742ba740703a4420380342d160ce5df15b215e3032d3219c140d8278c1c84c8772528439381a08a1289993a2fe102f907b4b42c33829ea0bf102b9b724349c93a2de102f907b4b42b77152740bc40be4de92500aa740701a8422c8bd25a1119c559402f182f929602a2745c3215e303f051cc9495132c40be6a780a338291a02f182f929e0684e8a4641bc607edc3e8693a2548817cc8fdbc73252541422109c0aa1791c670d8d8178c1bc66631cb940b0284820385516a3b24f279b6cb2a129bb91b2f32bdbb6b2452efbdb729620070172e8222726723a25474b728c27677072de29879572302ca7ba72822ec7dfd69b6fbd27acb7c07a4f5aef29eb3d6dbd85d65b743181e0625d7ef48c0e2fd1e1a53abc4c879fd5e1e53abc428757eaf0733abc4a879fd7e1177478b50eafd1e1177578ad0ebfa4c32febf03a1d5eafc3afe8f0061d7e558737eaf0261ddeacc35b7478ab0e6fd3e1ed3afc5aa60804b743048290bbe6438f700a04b7420482db2014cde314086e860804b740287a945320b8112210dc04a1e8314e81e0068840f05508458f730a04d7430482af40289acf29107c1922105c07a1e8094e81e05a8840f02508450b3805826b2002c11721143dc929107c0122105c0da1e8294e81e02a8840f07908454f730a0457420482cf41285ac829105c0e1108ae8050b4885320b80c22107c1642d1624e81e0128840702984a2673877c51743bc3c03a1680927450b215e303f285dca49d153102f981f942ee3a46801c40be607a5cf7252341fe205f383d2e59c143d06f182f941e90a4e8ae641bc607e50ba925320f80c8422cc0f4a9fe3aca295102f98ef68ab38295a0ef182f98ef63c2745cb205e30dfd15ee0a46809c40be63bda6a4e8a5e8078c1ec3aaee1a46815c40b66d7f145468a8a41048298dd82b59c35b406e20573feb1965c20580c24105c2c8b51d9a7934d36d9d094dd48d9f9956d5bd92297fd6d394b9083003974911313399d92a32539c693333839ef94c34a391896535d394197e36feb6db4de26eb6db6de16eb6db5de36eb6db7de6b7f2c105cdca555e31a356ba5ef8cf836dd7aa11c62a2021319183f305e602272a49bf332cec9382be38c8cd3324ec93829e3848ce3328ec9382ae3888cc3327e93f1ab8c43320eca382063bf8c7d32f6caf845c61e193fcbd82de3a7e02f2b1b983281291d9852812919981281291e986b03734d60ae0ecc5581b932305704e6f2c0140b4cd1c014094ce1c0140a4cc1c014084cfec0e40bcc6581c91b983c81c91d985c81c919981c81c91e986c81691e986681691a982681691c9846816918980681a91f987a81a91b983a81a91d9884c0c407a656606a06262e30b181a9119898c04407a67a60aa05a66a60aa04a672602a05a662602a04a67c60ca05263130fd03d32f307d03d32730bd03d32b30b704e6e6c0dc14989e81b931303704a64760ba07a65b60ae0f4cd7c074094ce7c05c17984e81e918980e81691f987681691b983681691d9856816919981639dc5db8eebe5c77a7aebb77d7ddcdebeeef7577fcba7b80dd5dc1ee3e6177e7b0bb97d8dd5decee37767720bb7b92dd5dcaeebe657727b3bbb7d9ddedecee7f767744bb7ba4dd5dd3ee3e6a7767b5bbd7dadd7dedeec7767768bb7bb6ddabf8dcebfadc2bfddc6bffdcab01ddeb03dd2b06dd6b08ddab0addeb0cdd2b0fdd6b11ddab13ddeb15dd2b18dd6b1addab1cddeb1edd2b21dd6b23ddab25ddeb27dd2b2add6b2cddab2eddeb30dd2b33dd6b35ddab37ddeb39dd2b3cdd6b3e9d12d0a9059da2d0a90e9d32d1a9179dc2d1a9209d52d2a9299de2d2a9329d72d3a93b9d02d4a9449d92d4a94d9d22d5a9569db2d5a95f9d42d6a9689dd2d6a9719d62d7a97a9df2d7a9839d82d8a98c5d277bdd7a6f58ef4debbd65bdb7adf78ef58cf5acf5deb5de7bd67bdf7a1f58ef43eb7d64bd8fadf789f53eb5de67d6fbdc7a3bacf785f5beb4de4eeb7d65bdafadf78df5beb5de77d6fbde7a3f58ef47ebedfa8336b6b279bffe23fa7449ec375c9ad9e098b91245ba7401e906d215a43b4897906e215d43ba877411e926d255a4bb4897916e23b346668fcc22994d32ab6476c92c93d926b34e669fcc42998d322b6576ca2c95d92ab3363e48345d26b24c6899d832c165a2cb8497892f0d401a813404690cd220a45148c390c2970920134126844c0c9920325164c2c8c4910924134926944c2c996032d164c2c9c4eb2e7f45a374238568a40e8d94a1912a345284466ad048091aa940230568a4fe8c949f91ea33527c466acf48e919a93c238567a4ee8c949d91aa335274466ace48c919a938230567a4de8c949b916a33526c466acd48a9192932233566a4c48c5498910233525f46cacb487519292e23b565a4b48c549691c232525746caca485519292a233565a4a48c5494918232524f46cac9483519292623b564a4948c5492914232524766b18c1f65fce058967a0a6aeb8dc0bc1998b702f37660de098c098c0dccbb81792f30ef07e683c07c18988f02f371603e09cca781f92c309f07664760be08cc9781d91998af02f37560be09ccb781f92e30df07e687c0fc18985d39acf7d3ef5760e988b593f7136491bafbd29da43dd3242569c890a4817367c972212979e09044ccbac94577a92b2717d3d0e14312adf7f3cc39694bdb8c1c3abcf5800ec352d32322d316351d963c2235dd9b75e9c1a6ad689294dc27656c8ba4c421fd3b0e9f13f174b3a4515ec4c22ea9c386cf9e3913f017fc730dcd9a0da15738c13ca83d8032ca94fcf6cc447f7fe2212cb3e65d11e8acfb256bd6fd8e5c610453427b09e79c64b71731e3feafb467d3953636a0426c0115404cfe458d5352fa8cdd1951cb7afbacb7df7a07ac77d07a87acf7abf57eb3de61eb1db1de51eb1db3de71eb9db0de49eb9db2de69eb9db1de59eb9db3de79eb4758dfb3be6ffd48eb47593f64fd6cd6cf6efd1cd6cf69fd5cd6cf6dfd3cd6cf6bfdcbac9fcffaf9ad5fc0fa05ad5fc8fa85ad5fc4fa45ad5fccfa975bff0aeb5f69fdabac7fb5f5afb1feb5d62f6efd12d62f39735edad3ed878d4a8ff42ffcdbf72efc5b7643fed1a72266019ed1b32d86a524260d4c0ebe8dcc5edd4f6ca794a4517d521383af28a949c39267a52d6d95d867b8232e3daad6ecb4159d1307268d484d4c699ddc3f718c97e1bffd0cff1d7921ea50d43fa20fa52d0c7aeeac1c17fe3bc2fb474b84bc4c32683d975a67ffbce3b6e4ba91c35293129353e7a23e5e0f5cfa23437c7cd4b07e69eb97daacfd70cf2fe5a97069731677acfdff8ff00082671f700361c0117603175f4e0769caa9acf5cbe8e554462fa7b299534e0721e55406524e65d9cbe9304d3995b77e39bd9ccae9e5543e73cae930a49cca41caa93c7b391da129a78ad6afa0975305bd9c2a664e391d81945305483955642fa7a334e554d9fa95f472aaa49753e5cc29a7a39072aa0429a7cae4e5e497a429a7aad6afa2975315bd9caa664a39f925213c57819453d5f0bdd1731fe4615543ee6ea10f4c10d1fdffd6ad5f3d6beb3603bdc209e64145331e9804f945c30f4cd2315b4e90d91b4359564160985b5e3ea1540b821e1ee68af94f984fbcfd1ad0061e9bd5c033d02b9c601e541c650397fce2384fbce184415a5321c867d37e487bab49bdb2ac096d4cb5b21a53067a8513cc838aa76c4c925f7c58af2c1328cb2a5e02c3ac2c3f0be795656dc8caf233ea95656d6803af93d5c033d02b9c601e545dca062ef9d5255d59d6655c5916807c361d83b4b77ad42bcb7ad0c6543fab3165a05738c13ca806948d49f26b10d62bcb869465d54002c3ac2c7784f3cab2116465b9837a65d908dac01b6735f00cf40a279807d584b2814b7e4d4857964da8e75d15e8bc6b9a35ef32d02b9c601e5433ca7927f9350beb855373cab26a268161164e5f86f3c2a90564e1f42575036f016de02db31a78067a8513cc836a45d9c025bf56a40ba756d4f3ae1c74deb5ce9a7719e8154e300faa0de5bc93fcda84f5c2a92d6559b591c0300ba7afc279e1d40eb270fa8aba81b78336f0f6590d3c03bdc209e64175a06ce0925f07d2855307ea7957013aef3a66cdbb0cf40a279807d58972de497e9dc27ae1741d65597592c0300ba76fc279e1d419b270fa86ba81778636f02e590d3c03bdc209e64175a56ce0925f57d2855357ea7957093aefaecf9a7719e8154e300faa1be5bc93fcba85f5c2a93b65597593c0300ba7efc279e1d403b270fa8eba81f78036f01bb21a78067a8513cc83ba91b2814b7e37922e9c1084fdeb4b5396744aec9f9832223179f6ec74ebed37e782171d3a5bc69c8b907ff5b4fe4dea9fdb1911237ff250f067bc5f9dfdcdfdf972ce5670b692fbdf8f397bdcd913ce9e74f694b3a79d3de3ec5967cf397bde798870d673d67736d2d9286743ce667336bbb3399ccde96c2e67733b9bc7d9bcce5ee66c3e67f33b5bc0d982ce1672b6b0b3459c2dea6c31672f77f60a67af74f62a67af76f61a67af75b6b8b3252eb079b3f56fb9e853d8e7fe444f676fbef0e77a59bf37efaaa00fb8575125d7379c93eb17cec9f50fe7e412c339b901e19cdcc0704e6e5038279714cec9dd1acec90d0ee7e48684737243c339b9e4704e6e583827373c9c93bb2d9c934b01249759fb9745a1bb9723b2762f7f47ae3082d98a4b25dcbb94ec52996f7402943636a0c26c0115c4dde8f4a8f5475a7f94f5475b7f8cf5c75a7f9cf56fb7fe1dd6bfd3fae3ad3fe1bf719dd2bac4e4db46268e4cec34b2ef90a47eff7ba15200fdfe52a5dcd4972a05b3ff521f75e6bec97d34cd9bdcd3ac3f517f93fb44fd4dee6999f326f7d1109e2742dee49ec67e31c0189a729a6cfd497a394dd2cb6972e694d31808cf9320e53499bd9ceea029a7bbac3f452fa7297a39dd9539e5740784e7299072ba8bbd9ceea429a769d69faa97d354bd9ca6654e39dd09e1792aa49ca6b197d3789a729a61fde97a394dd7cb6946e694d37808cfd321e5348351ae571442f3488897bba9df28793774bbeb9eacedae0cf40a279807752fa5584ff2bb97536deda742bcdc475956f74a6018b5f50f946a6bd0c3bb1fa2b6fe815a6d7d3fb4813f90d5c033d02b9c601ed44cca062ef9cd24555bcf647c57796148631a05f1328b7a65390bda98d2b31a53067a8513cc839a4dd99824bfd961bdb29c435956b32530ccca725738af2ce7425696bba8579673a10dfcc1ac069e815ee104f3a01ea26ce092df43a42bcb8718579605218d6902c4cbc3d42bcb87a18de991acc694815ee104f3a0e6513626c96f5e58af2c1fa52cab7912186665b93b9c57968f415696bba957968f411bf8e3590d3c03bdc209e641cda76ce092df7cd295e57cea7937053aef9ec89a7719e8154e300f6a01e5bc93fc1684f5c2e949cab25a208161164e7bc279e1f41464e1b487ba813f056de04f6735f00cf40a279807b590b2814b7e0b49174e0ba9e7dd54e8bc5b9435ef32d02b9c601ed462ca7927f92d0eeb85d3339465b55802c32c9cf686f3c2690964e1b497ba812f8136f0a5590d3c03bdc209e6412da36ce092df32d285d332ea79371d3aef9ecd9a7719e8154e300f6a39e5bc93fc9687f5c2690565592d97c0300ba7fde1bc705a095938eda76ee02ba10dfcb9ac069e815ee104f3a056513670c96f15e9c26955e6bfccdd1fe55e203ed1d949175e23febcf55ff8d7742ebd19adce0c962f3dac359c61bdc819d65aceb05ee20ceb65ceb0d67186b59e33ac5738c3dac019d6ab9c616de40c6b1367589b39c3dac219d656ceb0b67186b59d33acd738c37a9d33ac3738c37a9333acb738c37a9b33ac7738c3329c6159ceb0dee50ceb3dceb0dee70ceb03ceb03ee40ceb23ceb03ee60ceb13ceb03ee50ceb33ceb03ee70c6b0767585f7086f52567583b39c3fa8a33acaf0161e917f8c6cad1d058774e34ced9db9d9de2ec5467a73b3bc1d9d5ceae71f64567d73afb92b32f3bbbced9f5cebee2ec06675f7576a3b39b9cddecec1667b73abbcdd9edcebee6ecebcebee1ec9bcebee5ecdbcebee3ac71d63afbaeb3ef39fbbeb31f38fba1b31f39fbb1b39f38fba9b39f39fbb9b33b9cfdc2d92f9ddde9ec57ce7e7de134ed1beb7f7bd153b891ee4f3cefec3717fedc77d6ff9e5715f203e159b567bdbd184dc841f01cc764e70fc164772833142f975e523f42b42a07215e4829da15ce1431b5b79f08db5b4e587b3b4cd8de725a3f1193dd11ceb9bb1b32eb0e43bc9052f4733853c4d4def610b6373305d6df8e13f63749cf1f8849ef04e7ecfd0532ef8e43bc9052b4379c29626a70fb081b5c76587f3b4dd8dfb25b7f0026bb339c73773f64d69d867821a5e8403853c4d4de0e12b6b76cb0f6769eb0bd65b3fe6d90ecb24570cedd439059771ee18595a25fc39922a6f6f61b617bcb8f6a6fd92209db5b7eeb0fc26417c53977219b42d922215e48293a12ce1431b5b7a384ed2d046b6fd909db5bc8fac330d9e5e09cbbc720b32e3bc40b2945c7c39922a6f67682b0bde586b5b7dc84ed2db7f55330d9e5e19cbb2721b32e37c40b2945a7c29922a6f6769ab0bdf9b0f6968fb0bdf9d64fc264979f73ee9e81ccba7c102fa4149d0d678a98dadb39c2f616056b6f8508db5b94f59331d915e69cbb981def42102f9c14454684334544ed2dd2236c6ff960edad18617bcb67fda198ec2ee79cbb3e64d615837821a528329c29626a6f5194af10ed65fde190161019226c70c8fcb285737166272cce3cb0cfdeab084b338ff5fb61b2bb9af3832507e423e12a8817528a728633454ced2d17617bbb0cd6de8a13b6b7cbac7f2b26bb129c7317731c531ce28594a23ce14c11537bcb4bd8de2261edad34617b8bb4fe604c766538e7ee659059571ae28594a27ce14c11537bcb0f6e6f54c91520ecdd7961bdbb3c61efce6bfdbe98ec2a7036a6829096521ee28594a242e14c11537b2b4cd8de72c1da5b65c2f696cbfa7d30d955e19cbb4520b3ae32c40b294545c39922a6f6568cb0bde580b5b7ea84ed2d87f5fb63b28be69cbb9743665d758817528aae08638a30c7dea9d6df859925b194f9fd60fd1f31f9c57196f89590e28c857889632df1b3981288a7ccefb4f5cf60f24be02c71ccb9753cc44b02698947e6c394405dc6fc22f3ca390326bf7a9c257e35a438eb42bcd4632df1084c0934a4ccef9cf5cf63f26bc459e2d7408ab321c44b23d685ca714c0934a5ccefa8f58f61f26bc659e2d7428ab329c44b33d612ff1553022d29f33b68fd4398fc5a7196384664d512e2a5156b89837655db52e6b7c7fabf60f26bc759e22520c5d916e2054e11e6272e2539c32ac5195669ceb0ca7086559633ac729c6195e70cab0267581539c3aac4195665ceb0aa7086559533ac6a9c6155e70c8bf59036321b66c9dd91727b3fca468630f975e2fc4a1103f932d011e2a513e7ccabc119562c67589c27eddfd9c8fc98fc6a72d25e8b33ac78ceb01238c3aacd19561dceb0ea7286558f33acfa9c6135e00cab216758b4a7c307308be42e94f9edb3fe7e4c7e5d39bf0434862cdfbb40bc7465fd9e7b05a604ba537ecf2d66232fc7e4d783b3c49b408ab33bc44b0fd62efe33a6047a52e6f793f57763f2bb89b3c431ea9c9e102f37b176f1a29812e845d9c50bdbc82298fc7a739678334871f68278e9cddac54f614aa01f657e27ac7f12935f7fce126f0e29ce7e102ffd59bb784e4c090ca4ece2d96d640e4c7e83384bbc05a4380742bc0c622df1429812184c59e2056c64414c7e43384b1c23231e0cf13284b5c4f3604a60186589e7b291b931f90de72cf15690e21c06f1329cb5c42331253082b2c43d1be963f24be52cf1d690e21c01f192cafa75f308a6044653e6f79bf50f63f21bc359e26d20c5391ae2654c66bc66eb92c372ef31b974a2db7226771524b9769cc95d0d49ae3d6772d74092ebc099dcb590e43a7226571c925c27cee44a4092bb8e33b99290e43a7326570a925c17cee44a4392ebca995c194872d773265716925c37cee4ca4192ebce995c7948723d3893ab0049ee06cee42a4292bb9133b94a90e47a7226571992dc4d9cc9558124773367725521c9ddc2995c354872bd3893ab0e49ae376772d190e4fa7026170349ae2f67723520c9f5e34c2e16925c7fcee4e220c9257226571392dc00cee46a41921bc8995c3c24b9419cc92540924be24cae3624b95b3993ab03496e3067727521c90de14cae1e24b9a19cc9d5872497cc995c034872c338936b08496e3867728d20c9ddc6995c634872299cc9358124378233b9a690e45239936b06496e246772cd21c98de24cae0524b9d19cc9b5842447aada6b05496e2c6772ad21c98de34cae0d24b9db2f3db99d113d3d3f322a942d7b8e9cb972e7c97b59befc050a162a5ca468b1cbafb8f2aaabafb9b6788992a54a97295bae7c858a952a57a95aad7a744c8dd8b89ab5e2136ad7a95baf7e83868d1a3769daac798b96ad5ab769dbae7d878e9daeebdca5ebf5ddbaf7b8e1c69e3b2324d7b636b29d8d6c6f233bd8c88e36b2938dbcce4676b6915d6c64571b79bd8dec26a7fb72062e27c5729e2aa78e723627275872ce23a7217266203bebb2ff2cbbb4b297293b7eb22f26bb47b2c7223b11f27d5dbed5ca773ff98624df2364b52d6b5259b9c9fa465601f259299f28d277a53bc91c964a977a10d6fe07", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/gullible_account_contract.json b/yarn-project/noir-contracts/src/examples/gullible_account_contract.json index 447e3cc47c7..8f8c6459986 100644 --- a/yarn-project/noir-contracts/src/examples/gullible_account_contract.json +++ b/yarn-project/noir-contracts/src/examples/gullible_account_contract.json @@ -71,7 +71,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d6774545517cd0b458af4a2f4de5b420a09480b10082584d03b291318482324a1978400d29309bdf7de04fd142bf6761fcd8240e822222282828212bf332feafa06d71a7f64cffaf67a6b58eb1c162be6baf7b9fbec3973dfe46699ee392dc7b368daa1a0d888a8714109938253e2a33a45c4c6a66d0fef18dab54b96ada0e6e48b859c7db1b096b6a7639235794c9c25d91a959d99653bdbc1c7cbdfd7d7d2aaa5c5dbc73bc2ab656064809f97af5fa47f807780b75f805f74cb001f1f4b806f40abc0c8c0565e81debe3e16ef18bf409f18afbc3f55ce76f0cae71f3ca8aa8ca0aa3182aace08aa0623a89a8ca06a3182aacd08aa0e23a8ba8ca0ea3182aacf08aa0123a8868ca01a31826acc08aa0923a8a68ca09a31826ace08aa0523282f00a87fbed5d9156689b6244db0c467e778d4b49551b9b6b212e524ca4b5490a828f18cc4b31295242a4b5491a82a514da2ba440d899a12b5246a4bd491a82b514fa2be44038986128d241a4b3491682ad14ca2b9440b092f95dbd4e6dd125f381fc6ddf46504e5c708ca9f11542b4650018ca0021941b56604d58611d4738ca0da32826ac708aa3d23a80e8ca03aba7cbc2a6df39631c747c257c24fc25fa295448044a0446b893612cf49b4956827d15ea2834447fb7814d4296d6750923536d63a7a7956da8ebed6f8d1b1963cfef9c4ee5d21fffc0d447189b196ce99cbd276774f894b0c89094d48b6791448dbde29217e42b24dcbca3fd0b4fd41d6f888a4c9c1564b6c74efc4651e5b3b5b53358f6d7d931312b3333301ff83ffd5565636a0b49d111bd425ff1ac733eb9209689bbf259d4d27692ca0726c80ca209a7e7bc7a4a488c9391efec15dbb8574efd1b35768efb03ee17dfbf51f3070d0e02143870d1f317254446454b42566f418ebd871b171f10989e3932624a7a44e9c3479cad4cc35695b7b25a4da0a78e6fdeda9e5fdad79fce51a1e5980baed0d4e48b25847c7db6d39fb4894e4b0246b6a44b2c5eed5c9d684f8acb4dddd2c118906195b41ffecb4fde196d1d609c996a490f868cb24ed897f7b3ef1ef0279a80b15fc137da1b46d7607cc2a92f76f0fed4f8342bc56750198dceeced6248b104fb5a4edea9392906cb5c4272fc7a8aa5bfeb70b61e42da74f3be6e4e1ee34674f7ea7abc78e23463660dbba016a3bcd06a80ba09d5c289f1012f9cc9ce14c3e339cc967a62be41302a8ed0c807c6672cba717897c549a9ae54c406a963305c977bb4042bd00f555b36c88e2708b28944544b355ba5311a53b15d16c5788281421a274848866738ba8378b88e6a80ca722ca702aa239ae10516f84883210229ac32da2a92c229aa7e63a15d15ca7229ae70a114d4588682e4244f3d0479ad988f30f408983016ba8e7918744e0734f04b8bf0f3ed57cf7c9a76371d57cc8262d203cfc14720b32d17d6f431c0f217a7621a39c16a88588f3335d3bc3e8d7907d5b040062d427dffde632c75e8474ecc56ec7762cae5a0cd9a4258c8ebd482dc974c5c367ba6a41fca81cc08fba223c6d29f3fcb814e946996e37722caec26c5216a31b2d5559e69d1f6d8c72ca5236ccfc78d6b4f36336647e3ccb3c3f66231d7b99dbb11d8bab9641366939a36367abe59cf3e372c6f9b10cc08fc2109eb682797e5c8174a3956e37722cae5a09d9a4558c6eb442ad32effcb89a514eabd46accfc78deb4f3e31ac8fc789e797e5c8374ecb56ec7762cae5a0bd9a4758c8ebd46ade39c1fd731f7db5c64bfad77f79b6371d57ac8266d60ecb7b96a837927a48d8c72daa0366226a40ba69d90364126a40bcc8ebd09e9d89bdd8eed585cb519b2495b181d7b93dac239216d61eeb759c87edbeaee37c7e2aaad904ddac6d86fb3d436f34e48db19e5b44d6dc74c48974c3b21ed804c4897981d7b07d2b177ba1ddbb1b86a27649376313af60eb58b7342dac5dc6fe9c87edbedee37c7e2aadd904ddac3d86fe96a8f7927a4bd8c72daa3f66226a42ba69d90f64126a42bcc8ebd0fe9d8fbdd8eed585cb51fb24907181d7b9f3ac039211d60eeb70c64bf1d74f79b6371d541c8261d62ecb70c75c8bc13d20b8c723aa45ec04c48d74c3b211d864c48d7981dfb30d2b18fb81ddbb1b8ea0864935e6474ecc3ea45ce0909512d67b7f066dbbaaa5cdb3489192ad7c3a65e52fff9975b7bbd6ddde5bfee21d153429e97484ab7a70c4961127d24c225fa4af493e82f314062a0c42089c1124324864a0c93182e314262a4c4288908894889288968098b448cc4688931125689b112e3246225e224e22512241225c64b24494c904896489148959828314962b2c41483eccbea957f294eb09dd84bf6f4b2f11d47d5aba42fcbaf813d8387d9eba665f6866999bd695a666f9996d931d3327bdbb4ccde312db3774dcbec3dd3327bdfb4cc3e302db30f4dcbec23d332fbd8b4cc3e312db34f4dcb4c0198b9ea48b022f24450779f083ad456e99023aee384078215d571e65fe403903516507936406571bfc867ad3aa14eaa53eab4fa4c7daebe505faa33ea2b75f6fff16b7a8e5ae2c7a758522c612991b1d6a8bf7e518ffd4b8ebfaca738f32febb1377c7eb7d795178cab532c378c9f57e79cde307ecee90de3e75d71c3b83a85a8f039c415e3882b235c29a3d32c32baa0729cca28c7a98c2eb84446a71115ce41c8e802b98cbe6491d12575d1a98c2e3a95d12597c8e84b44852f226474895c4667586474455d762aa3cb4e6574c525323a83a8f065848cae90cbe82b16195d53579dcae8aa53195d73898cbe4254f82a4246941f63ab88a8f109c4225f33df7ff835f2cceabafbcccab1b8ea3a6493be61fc14dbd7ea1bcacf1dabe388456e30eae91b7503f3c1e3eb8c8e8dd9b86f219f3cbecefcc9e36f919e7dd3edd98ec55537219bf41da3677fabbee3fce4f1778c37689747f8d149c422b79847c85b483bfade6d478ec555df4336e936a31ddd52b74d3c42fec0a8a7dbea07cc0879c3bc23e41dc80879837984bc83f4ec1fdd9eed585cf5236493ee327af61d75977384bccb38429645f8d159c422f79847c87b483bfac96d478ec5553f4136e967463bbaa77e36f108799f514f3fabfb9811f2a67947c8079011f226f308f900e9d9bfb83ddbb1b8ea17c826fdcae8d90fd4af9c23e4afccfd7611d96f0fddfde6585cf510b2498f18fbeda27a64e219e937463d3d52bf6166a45be69d917e87cc48b7983dfb77a4673f767bb66371d563c826e5327af6ef2a977346ca65eeb7cbc87efbc3dd6f8ec5557f64412cdb83b1e12e0b2ef34e49baa6114a4a4a2ec03083d26dd30e4abae60969bbdbc4ce2d1c81d6ad6b05dcdefd4479a526988d2a48e8de06bf82940313a6602e9b98ae42dbae90bbed1cab2b25c188a830e3cc24f40a9b79667a8ad2ca0b0b30cccc74c7c433531148dbdda19e998a40cdbba8dbbc9f28afd404b351c5286726e1578c74662ae6f29bc8d549fb45dbe7ec29c77edbb6ae15d7b5a7ffc925ff4e54c21525ce3fac929cb04a71c22acd09ab0c27acb29cb0ca71c22acf09ab0227ac8a9cb09ee184f52c27ac4a9cb02a73c2aac209ab2a27ac6a9cb0aa73c2aac109ab2627ac5a9cb06a73c2aac309ab2e27ac7a9cb0ea73c26ac009ab2127ac469cb01a73c26ac209ab2927ac669cb09a73c26ac109cb8b13963727ac969cb07c3861f972c2f2e384e5cf09ab1527ac00002ce7bf82d6c7a63eb33f25fadc9ebeb0a78bf674d99eaedad35949f294c7c8258d5ccac8a58d5cc6c8658d5ccec8e58d5cc1c8158dfc8c919f35722523573672152357357235235737720d23d734722d23d736721d23d735723d23d7377203233734722323373672132337357233233737720b237b19d9dbc82d8dec63645f23fb19d9dfc8ad8c1c90f7182d50d75affdbb3b713c63714377260deb7b5d1b5e7683f08d296f0f974a12e980eba0b6e6c0837f52186dc3d577cc225ffb0da411e92df85ac425aa2f6662e1191b57520b4b682206bbb4f686d05d5eb18720f38fbb623a4e3ee4356212d5190994b44646d9d08adad38c8da1e125a5b71f51186dc23cebeed0ce9b8879055484bd4c5cc2522b2b660426b2b01b2b6c784d65642bd872197cbd9b75d211df718b20a6989ba99b94444d61642686da531d6e6a9115a5b69f50e869c2767df7647749ca7065985b4443dcc5c22226beb49686d4540d65688d0da8aa86318728539fbb617a4e30a4156212d51a8994b44646dbd09adad18c8da8a125a5b31f536865c31cebe0d83745c51c82aa425ea63e61211595b38e3cd3247d5bb9803a9be84e68663d7cfc4baec4fa8cba7402fb9250855f994fa0043ae24e7ebc900c82b4109c82aa4251a68e6121159db20426b2b05b2b63284d6564abd86215796b36f07433aae0c6415d2120d31738988ac6d28d8da98b80d23b4ed20906d5720b4ed20f509865c454e4f1a0e71930a9055484b34c2cc2522b2b69184d65614646d9508adada87a0b43ae3267df8e82745c25c82aa4258a30738988ac2d92d0da0a83acad1aa1b515566f60c855e7ecdb2848c75583ac425aa268339788c8da2c84d6a681acad16a1b569ea630cb9da9c7d1b03e9b85a9055484b34dacc2522b2b63184d65612646df508adada47a1f43ae3e67df5a211d570fb20a6989c69ab94444d6368ed0da9e06595b23426b7b5a7d8a21d798b36f63211dd708b20a6989e2cc5c22226b8b27b4b602206b6b46686d0594c2906bced9b709908e6b065985b44489662e1191b58d27b4364f90b579135a9ba77a1343ae2567df26413ace1bb20a69892698b844909f23392ee7919826f123a427cf37e4481ac3cf9f53e1c9106dfa4156f12755f8048c020229153e5e5e0830fc5a732a3c05a2cd40c82aad49159e8851405b4a85c7cbbb380cbf769c0a4f8568b32d649576a40a0fc228a023a5c23be85a470cbf204e854f846813727332bc442885b7c728a00ba5c2dbea5a3b0cbf604e854f826813723b2cbc4428854763141042a9f0485d8bc2f0ebcea9f0c9106d864056e94eaaf0111805f4a254f8305d1b8ee117caa9f029106d62ee9c839708735dcc544e58d338614de784358313d64c4e58b33861a571c24ae784359b13560627ac399cb0e672c29ac709eb794e58f339612d207d47d10f3371f7a17c4711ae6b7d31fcc239df512c84bc17c0dc631aced9788b38612de684b584b28fdbe8da500cbfa59c65cfe48495c509cbc6092b9b13d6324e58cb3961ade084b59213d62a4e58ab3961ad217d0f30103323f7a79c1dfaebda000cbf019cef01d642a6f7fe905506902a3c14a380c1940aefa96bbd30fc86702a7c1d449b982b8887902a3c02a380e1940a1fa96ba330fc46702a7c3d449b98db5a47902abc0f460111940aefad6b61187e919c0adf00d126e646ca485285837e56d242a9f04ebad619c32f8653e11b21dab44056892155781c4601564a858fd3b5580cbfb19c0adf04d126e69eabb1a40aef8651401ca5c28375ad2b865f3ca7c23743b489b9cb279e54e163310a184fa9f031ba66c5f04be254f8168836c74356492255f8108c025228153e48d70663f8a5722a7c2b449b989f0a4f2555780f8c0226532a3c44d7ba63f84de154f8368836313f6f35c515176ae55f03c990426fe724970221b783935c2a84dc4e4e721321e47671929b0421b79b93dc6408b93d9ce4a640c8ede5243715426e1f27b9691072fb39c94d87903bc0496e0684dc414e723321e40e71929b0521f70227b93408b9c39ce4d221e48e70929b0d21f72227b90c08b99738c9cd8190fb0f27b9b910722f73929b0721f70a27b9e721e48e72929b0f21f72a27b9051072af71925b0821f73a27b94510726f70925b0c21f72627b92510726f71925b0a21778c935c2684dcdb9ce4303fb9f60e27391b84dcbb9ce430cf0adfe324b70c42ee7d4e72cb21e43ee024b70242ee434e722b21e43ee224b70a42ee634e72ab21e43ee124b70642ee534e726b21e41427b97510723a27b9f51072c739c96d80903bc1496e2384dc494e729b20e44e7192db0c21779a93dc1608b9cf38c96d8590fb9c93dc3608b92ff24f2e33c743e06cd7b51dbab653d776e9da6e5ddba36b7b756d9faeedd7b503ba7650d70ec90378794c2d0f73e591a73c1894c767f290491ec5c8030b39d697c36f3922968354396e94433939ba92031e390691c302794b2d6f3ce5ed99bc8991515f0662191b65b89211445ea8e5e54c4c5fac510c44da4cc4285b26c4fe0b", + "bytecode": "ed5d6774545517cd0b458af4a2f4de5b420a09480b10083584de499984813442127a4908203d99d07bef4dd04fb1626ff7d12c08842e222222282828f13bf3a2ae6f70adf147f6ac6fafb786b5ce61b162ae7b9fbbcfce99fb267796e99ed3723c8ba61d0a8a0d8f1c1794302938253eb253786c6cdaf6b08ebdbb76c9b215d49c7cb190b32f16d6d2f6744cb2268f89b3245b23b333b36c673bf878f9fbfa5a5ab5b478fb78877bb50c8c08f0f3f2f58bf00ff00ef0f60bf08b6a19e0e36309f00d68151811d8ca2bd0dbd7c7e21ded17e813ed95f7a7cad90e5ef9fc830755951154354650d51941d56004559311542d4650b51941d56104559711543d4650f51941356004d59011542346508d1941356104d5941154334650cd1941b56004e50500f5cf973abb422d5196a40996f8ec1c8f9ab6322ad75656a29c4479890a1215259e917856a2924465892a125525aa495497a8215153a296446d893a127525ea49d4976820d150a29144638926124d259a4934976821e1a5729bdabc5be20be7c3b89bbe8ca0fc1841f933826ac5082a8011542023a8d68ca0da30827a8e11545b4650ed1841b56704d581115447978f57a56dde32e6f848f84af849f84bb49208900894682dd146e23989b612ed24da4b7490e8681f8f823aa5ed0c4ab2c6c65a639667a5ede8678d8f89b5e4f1cf2776ef0af9e76f208a4b8cb574ce5c96b6bb7b4a5c624874ef84649b4781b4ed9d12e22724dbb4acfc034ddb1f648d0f4f9a1c6cb5c446f5495ce6b1b5b33555f3d8d62f3921313b3313f03ff85f6d6565034adb19b1415df2af713cb32e9980b6f95bd2d97492c6022ac706a80ca2e9b7774c4a0a9f9ce3e11fdcb55b48f71e3d7bf5ee13da37ac5fff0103070d1e3274d8f01123478d0e8f888cb244c78cb18e1d171b179f90383e6942724aeac44993a74ccd5c93b6b55742aaad8067dedf9e5adedf9ac75faee19105a8dbdee084248b3526de6ecbd947222587265953c3932d76af4eb626c467a5edee66094f34c8d80afa67a7ed0fb3c45827245b9242e2a32c93b427feedf9c4bf0be4a12e54f04ff485d2b6d91d30ab48debf3db43f0d0af1b3aa0bc0e47677b626598478aa256d57df948464ab253e79394655ddf2bf5d08236f397dda31270f77a7397bf23b5d3d761c31b201dbd60d50db6936405d00ede442f98490c867e60c67f299e14c3e335d219f10406d6700e433935b3ebd48e4a3d2d42c670252b39c2948bedb0512ea05a8af9a654314875b44bd5944345ba53b1551ba5311cd7685887a2344948e10d16c6e11f56111d11c95e15444194e4534c71522ea83105106424473b84534954544f3d45ca7229aeb5444f35c21a2a90811cd4588681efa48331b71fe01287130600df53cf290087cee8900f7f7c1a79aef3ef9742cae9a0fd9a40584879f426e4126baef6d88e32144cf2e6494d302b510717ea66b6718fd1ab26f8b00408cfae4bbdf5ce6d88b908ebdd8edd88ec5558b219bb484d1b117a92599ae78f84c572d881f9503f8515784a72d659e1f9722dd28d3ed468ec555984dca6274a3a52acbbcf3a38d514e59ca86991fcf9a767ecc86cc8f6799e7c76ca4632f733bb66371d532c8262d6774ec6cb59c737e5cce383f9601f85128c2d35630cf8f2b906eb4d2ed468ec5552b219bb48ad18d56a855e69d1f5733ca69955a8d991fcf9b767e5c03991fcf33cf8f6b908ebdd6edd88ec5556b219bb48ed1b1d7a8759cf3e33ae67e9b8becb7f5ee7e732cae5a0fd9a40d8cfd36576d30ef84b491514e1bd446cc8474c1b413d226c8847481d9b137211d7bb3dbb11d8bab364336690ba3636f525b3827a42dccfd360bd96f5bddfde6585cb515b249db18fb6d96da66de09693ba39cb6a9ed9809e9926927a41d9009e912b363ef403af64eb7633b1657ed846cd22e46c7dea176714e48bb98fb2d1dd96fbbddfde6585cb51bb2497b18fb2d5ded31ef84b497514e7bd45ecc8474c5b413d23ec8847485d9b1f7211d7bbfdbb11d8babf64336e900a363ef53073827a403ccfd9681ecb783ee7e732cae3a08d9a4438cfd96a10e9977427a81514e87d40b9809e99a6927a4c39009e91ab3631f463af611b7633b16571d816cd28b8c8e7d58bdc8392121aae5ec16de6c5b57956b9b263143e57ad8d44bea3fff726bafb7adbbfcd73d247a4ac8f31249e9f694212954a2af4498443f89fe120324064a0c92182c314462a8c43089e1122324464a8c92182d112e11211129112561918896889118236195182b314e2256224e225e2241225162bc4492c4048964891489548989129324264b4c31c8beac5ef997e204db89bd644f2f1bdf7154bd4afa63f935b067f0307bddb4ccde302db3374dcbec2dd3323b665a666f9b96d93ba665f6ae6999bd675a66ef9b96d907a665f6a169997d645a661f9b96d927a665f6a96999290033571d0956449e08eaee134187da2a1d72c4759cf040b0a23acefc413e005963019567035416f7413e6bd50975529d52a7d567ea73f585fa529d515fa9b3ff8f8fe9396a891f9f6249b184a644c45a23fffaa01efb971c3faca738f387f5d81b3ebfdbebca0bc6d529961bc6cfab734e6f183fe7f486f1f3aeb8615c9d4254f81ce28a71c49511ae94d16916195d50394e6594e35446175c22a3d3880ae7206474815c465fb2c8e892bae85446179dcae8924b64f425a2c2171132ba442ea3332c32baa22e3b95d165a732bae212199d4154f832424657c865f4158b8caea9ab4e6574d5a98caeb944465f212a7c152123cab7b15544d4f8046291af99ef3ffc1a796675dd7d66e5585c751db249df30be8bed6bf50de5fb8ed571c4223718f5f48dba8179e3f17546c7c66cdcb790771e5f677ee7f1b748cfbee9f66cc7e2aa9b904dfa8ed1b3bf55df71bef3f83bc61bb4cb23fce82462915bcc23e42da41d7defb623c7e2aaef219b749bd18e6ea9db261e217f60d4d36df5036684bc61de11f20e6484bcc13c42de417af68f6ecf762caefa11b24977193dfb8ebacb3942de651c21cb22fce82c62917bcc23e43da41dfde4b623c7e2aa9f209bf433a31ddd533f9b7884bccfa8a79fd57dcc0879d3bc23e403c808799379847c80f4ec5fdc9eed585cf50b64937e65f4ec07ea57ce11f257e67ebb88ecb787ee7e732cae7a08d9a4478cfd76513d32f18cf41ba39e1ea9df3033d22df3ce48bf4366a45bcc9efd3bd2b31fbb3ddbb1b8ea31649372193dfb7795cb3923e532f7db6564bffde1ee37c7e2aa3fb22096edc1d87097059779a7245dd30825252517609841e9b66907255df384b4dd6d62e7168e40ebd6b5026eef7ea2bc5213cc461524746f835f41ca81095330974d4c57a16d57c8dd768ed59592604454987166127a85cd3c333d4569e58505186666ba63e299a908a4edee50cf4c45a0e65dd46dde4f94576a82d9a862943393f02b463a331573f94de4eaa4fda2ed73f69463bf6d5bd78aebdad3ffe4927f272ae18a12e71f56494e58a5386195e68455861356594e58e5386195e78455811356454e58cf70c27a961356254e5895396155e18455951356354e58d53961d5e084559313562d4e58b53961d5e184559713563d4e58f5396135e084d5901356234e588d396135e184d5941356334e58cd3961b5e084e5c509cb9b13564b4e583e9cb07c3961f971c2f2e784d58a1356000096f38fa0f5b1a9cfec4f893eb7a72fece9a23d5db6a7abf67456923ce53172492397327269239731725923973372792357307245233f63e4678d5cc9c8958d5cc5c8558d5ccdc8d58d5cc3c8358d5ccbc8b58d5cc7c8758d5ccfc8f58ddcc0c80d8ddcc8c88d8ddcc4c84d8ddcccc8cd8ddcc2c85e46f636724b23fb18d9d7c87e46f637722b2307e43d460bd4b5d6fff6eced84f10dc58d1c98f76d6d74ed39da3782b4257c3e5db00ba683ee821b1bc24dbd832177cf15ef70c93fac769087e47721ab9096a8bd994b44646d1d08ad4d0359db7d426bd3d4bb18720f38fbb623a4e3ee4356212d5190994b44646d9d08adad38c8da1e125a5b71a530e41e71f66d6748c73d84ac425aa22e662e1191b505135a5b5190b53d26b4b6a2ea130cb95ccebeed0ae9b8c79055484bd4cdcc2522b2b610426b2b8cb1364f8dd0da0aab8f30e43c39fbb63ba2e33c35c82aa425ea61e61211595b4f426b2b02b2b64284d65644bd8e215798b36f7b413aae106415d212f536738988acad0fe3f50b47d531ccabb6504273c3b1eb6b625d8611ead213f423b728a12a3dd51b1872c5387f9ef483fc24280a5985b444fdcd5c22226b1b40686d0540d65682d0da0aa8f730e44a72f6ed4048c79580ac425aa241662e1191b50d26b4b612206b2b43686d25d49b18726539fb7608a4e3ca4056212dd150339788c8da86115a5b10c8da2a105a5b90fa1043ae2267df0e87745c05c82aa4251a61e6121159db48426b2b04b2b64a84d65648bd8d215799b36f47413aae126415d2128d36738988ac2d9cd0da9e02595b35426b7b4a7d8c21579db36f23201d570db20a698922cd5c22226b8b22b4b6a741d6568bd0da9e56ef63c8d5e6ec5b0ba4e36a4156212d51b4994b44646d31606b63e23686d0b64b836cbb1ea16d9756af61c8d5e7f4242bc44dea4156212dd158339788c8dac6115a5b3190b53522b4b662ea530cb9c69c7d1b0be9b8469055484b1467e61211595b3ca1b59504595b33426b2ba93ec0906bced9b709908e6b065985b44489662e1191b58d27b4b652206bf326b4b652ea2d0cb9969c7d9b04e9386fc82aa4259a60e212417e45eeb8ae05619ac48f909eae75d0b58e187efe9c0a4f8668d30fb28a3fa9c2fb63141048a9f0305deb87e1d79a53e129106d064256694daaf0411805b4a554f8005d1b88e1d78e53e1a9106db685acd28e54e1ed310ae848a9f0b6bad60ec32f8853e11321da84dc9c0c2f114ae1a3310ae842a9f091ba360ac32f9853e19320da84dc0e0b2f114ae13d300a08a1547888ae75c7f0ebcea9f0c9106d864056e94eaaf0111805f4a254f8305d1b8ee1d79b53e15320dac4dc39072f11e626aca99cb0a671c29ace096b0627ac999cb06671c24ae38495ce096b3627ac0c4e58733861cde584358f13d6f39cb0e673c25a40fa8aa22f66e2ee4bf98aa28fae8562f88571bea25808792dd017b24a1867e32de284b59813d612ca3e6ea36b31187e4b39cb9ec9092b8b13968d13563627ac659cb09673c25ac1096b2527ac559cb05673c25a43fa1a201233230fa09c1dc2752d02c36f20e76b80b590e97d00649581a40aef8d51c0104a85f7d4b55e187e433915be0ea24dcc15c4434915de0da38011940a0fd6b5ae187e233915be1ea24dcc35ab2349151e87514038a5c2c7e95a2c865f04a7c23740b4190e59258254e1a0df95b4502abc93ae75c6f08be654f84688363197b745932a3c1aa3002ba5c2a374cd82e1379653e19b20dac4dc73359654e143310a88a354f8605d1b82e117cfa9f0cd106d62eef289275578224601e329151eaf6b09187e499c0adf02d1e678c82a49a40a9f8051400aa5c2c7eb5a12865f2aa7c2b742b489f9adf05452858fc5286032a5c2c7e89a15c36f0aa7c2b741b489f97dab29aeb8502bff1a4886147a3b27b91408b91d9ce45221e47672929b0821b78b93dc2408b9dd9ce42643c8ede1243705426e2f27b9a91072fb38c94d8390dbcf496e3a84dc014e723320e40e72929b0921778893dc2c08b91738c9a541c81de624970e21778493dc6c08b91739c96540c8bdc4496e0e84dc7f38c9cd85907b9993dc3c08b95738c93d0f21779493dc7c08b95739c92d80907b8d93dc4208b9d739c92d82907b8393dc6208b93739c92d81907b8b93dc5208b9639ce43221e4dee62487f9cdb57738c9d920e4dee524877956f81e27b9651072ef73925b0e21f70127b91510721f72925b0921f71127b95510721f73925b0d21f70927b93510729f72925b0b21a738c9ad8390d339c9ad87903bce496e0384dc094e721b21e44e7292db0421778a93dc6608b9d39ce4b640c87dc6496e2b84dce79ce4b641c87d917f7299391e0267bbaeedd0b59dbab64bd776ebda1e5ddbab6bfb746dbfae1dd0b583ba76481ec0cb636a79982b8f3ce5c1a03c3e93874cf228461e58c8b1be1c7ecb11b11ca4ca71a31ccac9d1951cf0c831881c16c84b6a79e1292fcfe4458c8cfa3210cbd828c3958c20f2835a7e9c89e98b358a81489b891865cb84d87f01", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/index.ts b/yarn-project/noir-contracts/src/examples/index.ts index bfd85e4e1e4..1305e79acc7 100644 --- a/yarn-project/noir-contracts/src/examples/index.ts +++ b/yarn-project/noir-contracts/src/examples/index.ts @@ -6,7 +6,6 @@ import ZkTokenContractJson from './zk_token_contract.json' assert { type: 'json' import ParentJson from './parent_contract.json' assert { type: 'json' }; import ChildJson from './child_contract.json' assert { type: 'json' }; import PublicTokenContractJson from './public_token_contract.json' assert { type: 'json' }; -import PublicToPrivateContractJson from './public_private_contract.json' assert { type: 'json' }; import NonNativeTokenContractJson from './non_native_token_contract.json' assert { type: 'json' }; import EcdsaAccountContractJson from './ecdsa_account_contract.json' assert { type: 'json' }; import SchnorrAccountContractJson from './schnorr_account_contract.json' assert { type: 'json' }; @@ -18,7 +17,6 @@ export const ZkTokenContractAbi = ZkTokenContractJson as ContractAbi; export const ParentAbi = ParentJson as ContractAbi; export const ChildAbi = ChildJson as ContractAbi; export const PublicTokenContractAbi = PublicTokenContractJson as ContractAbi; -export const PublicToPrivateContractAbi = PublicToPrivateContractJson as ContractAbi; export const NonNativeTokenContractAbi = NonNativeTokenContractJson as ContractAbi; export const EcdsaAccountContractAbi = EcdsaAccountContractJson as ContractAbi; export const SchnorrAccountContractAbi = SchnorrAccountContractJson as ContractAbi; diff --git a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json index a532df2d08f..87ad4eee741 100644 --- a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json +++ b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json @@ -1,52 +1,6 @@ { "name": "NonNativeToken", "functions": [ - { - "name": "_get_mint_content_hash", - "functionType": "secret", - "parameters": [ - { - "name": "owner_address", - "type": { - "kind": "field" - }, - "visibility": "private" - }, - { - "name": "canceller", - "type": { - "kind": "field" - }, - "visibility": "private" - } - ], - "returnTypes": [], - "bytecode": "cdda675794f716057051caa1f75eed5de799c2cc58e8bdf76aa3cc44226a62d0683ae92b150ea6f7a277e5beba9f2275486f26a4df0f1246e30a217098b2070eaf94bdd65effff8fc711867d7936ecd2dcbaff4ffeaf627c68e454c5d98b35e7cf8c540e8d8f4f5ee9286fa9ad9ee67012c208298c94c2282924298c96c218298c95c238298c97c204294c94c224294c96c214294c95c234294c97c20c29cc94c22c29cc96c21c29cc95c23c29cc97c202292c94c22229dc28859ba470334dfeb7fcdcd8c4c9d3ae89b19199a919be566631155bac2ebbd965588c2193d939ecb099acb6e16287e1306c0edba8d961b1b81c5687dd39ecb49b9c86d5e232dc36a7c56dbafe616c9aef30bb8badc1746cbe718e603a4c9e27ae959982fc5852c77b2a23d09b15ddec180d5c672342e7c910ea784f650ae466050b3b4c81e91422749e0ab18ef7540e7f6f96b7a8c3e9f65f271fa1f3f42ae8cc9fcaeaf6e766394b75d8fdd3c945e83cb33a3ad74f65f3f56659cb75587dd7c946e83cbb8a3ade53997cb95986d461f24d2713a133b5ca3ade538dac74b3b4953aec2beba42374a6d740c77b2ab374b3145f3aecb24e2a4287d748c77b2afb72374bf2b5c3bebc4e324267660d75bca7722c75b3047f3a1c4beb2422742eafb18ef754a6c5378bf3b3a3d8fd6f9d7884ce730a74bca7322dbc594c201de67feac422749e57a2e33d95f9e6cd28d00eebdf3ad1089d1714e9585c6eb7f7604664501d3774a2103a2f864227c842c3f302a2e44584cf4b2a7d9e43943c8ff07959a50fa4e432c2e715953ed3881246f8bcaad2e75944c914c2e735953e4f234a9e41f8bcaed2e74944c953089f37b47df733fffd8f1181e07902c1f3a6cac7e70d44c99b089fb754fabc8628791de1f3b64a9f571025af227cde51e9f312a2e46584cfbb2a7dde4194bc8bf0b9a2d2e72d44c9db089fab1a7dc200370b4710ff47e5d37305517215f1f4207cdeab1a3be71a9918bbe09a7cafeb6c93ab636874ece2cccc14e247ccb0e0cf37b7ae283c22328aa26362e3e2131293925352d3d23332b3b27372f3f20b0a8b366eda3c1bb64e58e86c91e63b5ba5709b146e97c21d52b8530a7749e16e29dc23857ba5709f14ee974293141a526896428b145aa5d02685c55268974287143aa5f080141e94c2435278580a4ba4b0540acba4b05c0a2ba4b0320423b90ac048ae12f11afcbec6915c196024578ed0f940e348ae0430922b45e87ca87124770830923b8cd0f948e348ee0060247710a1f3b1c6919c0330927322743ed138922b068ce4ec081d8fc6919c153092b3217466358ee4cc80919c05a1f3a9c6919c09309233103a9f691cc9ed038ce4f623743ed73892db0318c9ed45e87ca17124b70b3092db8dd0f952e3486e076024b713a1f395c691dc36c0486e3b42e76b95ef237f8528f91ae1f38d4a9f2f10255f227cbe55e9f319a2e47384cf772a7d6611259f227cbe57e9f309a2c483f0b9a6d2e72344c9c7089f1f54fa7c8028f910e1f3a3c691dc5604cffb089e39958fcf8f88923984cf4f2a7dae214a7e40f8fcacd2e73b44c9f7089f5f54fa7c8328f916e1f3ab4a9f5f1025bf227c7e53e9f313a2e46784cfef1a7dd6036eb60541fc87caa7e73744c9ef88a7e70fe523b9f59091dc96addbb6efd8b96bf79ebdfbf6cfffb6c862b515db1dce03070f1d2e292d2bafa894477255d27ca75a0a6ba4b0560aeba4b05e0a1ba4b0510a9ba4b0590a5ba4b0550adba4b05d0a3ba4b0530abba4b05b0a7ba4b0570afba4b05f0a07a470500a8f48e151293c2685c7a5f084140e49e1b0148e846024370c18c98d005e8367c3d66b5cc99d00ace486203c1b34cee48e016672c7213ce11a777247003bb9a3109e088d43b901c0506e10c213a97129d70758caf54378a2344ee57a0053b95e080f69dcca7501b672dd109e688d63b90ec058ae13c213a3712dd70658cbb543786235cee55a0073b956084f9cc6bd5c13602fd70ce189d738986b000ce61a213c091a17737580c55c3d842751e364ae063099ab85f024697c5b79feab066949821025eb248a87b4244088527412c5425ae22044a93a89a2212d3110a2349d445190168210a5eb248a80b44442883274126d80b484438832350ee9aa2140eb2140593a9fa14c484b1684285b27513aa425034294a3932815d2920621cad549940c69498110e5e924ca85b4e44188f2751265435a722044051a893600ae5605412ed4f904e5435a0a204f50a1f281dd06c8c0aeaabaa6b6aebea1b1a9b9a5b5adbda3b3abbba7b7af7f60f0c8d163c74f0c0d8f780776fff8424f037047833dbacb853f942bd8430ddbf18772077b288b097fa85b823d94dd58623176b5b3aedc6c2be6b975a33c4aec227613df42bc997813f146e222e242e202e27ce23ce25ce21ce26ce22ce24ce20ce274e234e254e214e264e224e244e204e278e238e258e218e26862228e228e248e200e27ae24ae202e272e232e252e213e4c7c88f820f1016227b183d84e5c4c6c23b6125b88cdc406b189783ff13ee2bdc47b887713ef22de49bc83783bf136e2adc45b884788878987884f101f273e467c94f808f120f100713f711f712f710f7137711771277107713b711b712b710b7133711371237103713d711d712d710d71357115cdff1b3e3976eba9f1d367cede76fbb93b26ce5fb8f3e2a5bbeebee7defbeef73ce099f43ce879c8f3b0e711cfa39ec742b0877e0c31657e1cf27a5da2ecbf34e3fadd1e095679bec6f32804a854119071f30f9e878201faabc6f33004a84c0990b1f02f9ec9408116d4781e8400952b0032167fe2fe407c16b5781e80f854acb18fb1d427eff5d7678996fb203c956bc8632c17dced0fcf322df74078aad688c790c24bbef2082d774178aad780c758a9f14e5f785668b908e1a959651ec397c6f32bf1f8d07201c253bb8a3c86af8d77483c3eb64c4078ea5689c7f0a7f1f6e578fc683907e1a95f051ec3dfc6b34bf1f8d9721b84a721c43c46208da717f304d07206c2d318421e23d0c6530b79026c1987f034e97c2fba11d2d204216ad649540f69698010b5e824aa85b4d441885a75126186303510a2369d449590962a0851bb4ea272484b0584a843275129a4a50c42d419322223f0c65b21402510a02e9dcf5027a4a50b42d4ad93a81dd2d20121ead149d40a69698310f5ea246a86b4b44088fa7412f5425afa2044fd3a89ba212d3d10a281901019c1359ebc011454cb18047950e713d40f6919803c4100a2a969cfe37f02", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - }, - { - "name": "_get_withdraw_content_hash", - "functionType": "secret", - "parameters": [ - { - "name": "recipient", - "type": { - "kind": "field" - }, - "visibility": "private" - }, - { - "name": "callerOnL1", - "type": { - "kind": "field" - }, - "visibility": "private" - } - ], - "returnTypes": [], - "bytecode": "cdda657794f71605702472e2ee8a3bcc333e48dcdd158bcc9494002d0d14eaa9af6a7242dd05eeea7d753f45755237dad4ef07b919b8ac9be62627237b92935790bdd65effff2f0f4332d95766d75f9e5bf7efc97f558c0f8d9cae3877a9e6c2d991caa1f1f1c9ab1de52db5d5d31c41421829855152182d8524853152182b857152182f8509529828854952982c852952982a856952982e8519529829855952982d853952982b857952982f8505525828854552582c859ba470b3146ea1c97f969f1f9b3875c63d3136323335c3d7cb2c26bbc5ea7698dd86c51832995dc34e9bc96a1bb63b0da76173da46cd4e8bc5edb43a1dae6197c3e432ac16b7e1b1b92c1ed38d0f63f37c87d963b786d2b1e5e63942e930799fba5e660af163491ddfa98c606f567cab6334789d4d089da7c3a8e33b9529989b152eec3005a75384d07926cc3abe533903bd59fea20e9727709d0284ceb3aba0337f2aab27909be52ed5e1084c270fa1f3dceae8dc3895cddf9b652fd761f55f2707a1f3fc2aeaf84e65f2e766995287c93f9d2c84ced42aebf84e35b2d2cdd257ea70acac9381d0995e031ddfa9ccd2cd52fde970c83a69081d5e231ddfa91ccbdd2cd9df0ec7f23a29089d9935d4f19dcab9d4cd1203e9702ead9384d0b9b2c63abe539916df2c3ec00ebbe7ff7512103a2f28d0f19dcab4f066b1c17498ffae1387d07951898eef54e65b37a3603bacffd38941e8bca448c7e2f6787c0733a242eab8a9138dd079391c3a21161ade9710252f237c5e51e9f302a2e44584cfab2a7d202557103eafa9f499469430c2e775953ecf234aa6103e6fa8f4791651f21cc2e74d953e4f234a9e41f8bca5edbb9ff9ef7f8c4804cf53089eb7553e3e6f214ade46f8bca3d2e70d44c99b089f7755fabc8628791de1f39e4a9f571025af227cde57e9f31ea2e47d84cf55953eef204ade45f85cd3e8b31e70b30804f13f543e3d571125d7104f0fc2e783aab1f3ee9189b18beec90fbace35b93b8646c72ecdcc4c217ec45c1ffaf9e6d61547444645534c6c5c7c426252724a6a5a7a466656764e6e5e7e416151f1a6cd5b66d7af13163a5ba5f9ce3629dc2e853ba470a714ee92c2dd52b8470af74ae13e29dc2f8507a4d0248586149aa5d022855629b449a15d0a1d52e8944297141e94c2435278580a8f48618914964a619914964b61851456866124570118c955225e833fd438922b038ce4ca113a1f691cc995004672a5089d8f358ee40e03467247103a9f681cc91d048ce40e21743ed53892730246722e84ce671a477276c048ce81d0f16a1cc9590123391b426756e348ce0c18c959103a9f6b1cc99900233903a1f385c691dc7ec048ee0042e74b8d23b9bd8091dc3e84ce571a4772bb0123b93d089daf358ee476024672bb103adf681cc96d078ce4762074be55f93ef23788926f113edfa9f4f90a51f235c2e77b953e5f204abe44f8fca0d2671651f239c2e747953e9f214abc089feb2a7d3e41947c8af0f949a5cf4788928f113e3f6b1cc96d43f07c88e09953f9f8fc8c289943f8fca2d2e73aa2e42784cfaf2a7d7e4094fc88f0f94da5cf778892ef113ebfabf4f90d51f23bc2e70f953ebf204a7e45f8fca9d16703e0665b11c47fa97c7afe4094fc89787afe523e92db0019c96dddb67dc7ce5dbbf7ecddb7ffc0fc6f8b2c569bdde1741d3c74f8484969597945a53c92ab92e63bd552582385b552582785f552d820858d52d82485cd52d82285ad52d82685ed52d821859d52d82585dd52d82385bd52d82785fd52382085835278540a8f49e171293c218527a570480a87a570240c23b961c0486e04f01a3cbb7e83c695dc49c04a6e08c2b351e34cee3860267702c213a171277714b0933b06e189d438941b000ce506213c511a97727d80a55c3f84275ae354ae073095eb85f090c6ad5c17602bd70de189d13896eb008ce53a213cb11ad7726d80b55c3b84274ee35cae0530976b85f0c46bdccb3501f672cd109e048d83b906c060ae11c293a87131570758ccd5437892344ee66a0093b95a084fb2c6b795e7bf6a90966408518a4ea204484b2284285527511ca4251e4294a6932806d2120b214ad749140d69210851864ea248484b1484285327d146484b0484284be390ae1a02b4010294adf319ca82b464438872741265405a322144b93a89d2202de910a23c9d44299096540851be4ea23c484b3e84a84027510ea425174254a8916823e06a5510e4229d4f5001a4a510f20415291fd86d840cecaaaa6b6aebea1b1a9b9a5b5adbda3b3abbba7b7afbfa07068f1e3b7ee2e4d0f0886f60f7b72ff434007734d4a30f5bf18772877a28bb097f284fa8871af2e00f755ba887725997588c5debac2b37dbec3cb76e944789ddc41ee2db88b7106f26de445c4c5c445c485c409c4f9c479c4b9c439c4d9c459c499c419c4e9c469c4a9c429c4c9c449c489c401c4f1c471c4b1c434cc4d1c451c491c411c495c415c4e5c465c4a5c425c447880f131f223e48ec2276123b88edc436622bb185d84c6c109b880f10ef27de47bc97780ff16ee25dc43b8977106f27de46bc95788478987888f824f109e2e3c4c7888f120f120f10f713f711f712f7107713771177127710b713b711b712b7103713371137123710d713d711d712d710571357d1fcbfe15363b79f1e3f73f6dc1d779ebf6be2c2c5bb2f5dbee7defbee7fe041ef43de49efc3de47bc8f7a1ff33eee7d220c7be8271053e62721afd725cafe4b336edcedb15095e76bbc8f43804a150119b7fee07d2414a0ffd6781f85009529013216fec53b192cd0821aefc310a0720540c6e24f3c188ccfa216ef43109f8a35f63196fae4fd81fa2cd1f20084a7720d798ce5827b03e159a6e53e084fd51af1185278d95f1ea1e51e084ff51af0182b35deed0fcf0a2d97203c35abcc63f8d37861251e3f5a2e42786a5791c7f0b7f12e89c7cf9609084fdd2af1188134deb91c4f002de7213cf5abc06304da786e299e005bee80f0348499c708a6f1cc629e205ace42781ac3c86304db787a214f902de3109e269def4537425a9a2044cd3a89ea212d0d10a2169d44b590963a0851ab4e22cc10a60642d4a693a812d25205216ad749540e69a9801075e8242a85b49441883ac3466404df783b04a80402d4a5f319ea84b4744188ba7512b5435a3a20443d3a895a212d6d10a25e9d44cd90961608519f4ea25e484b1f84a85f275137a4a507423410162223b4c6533781426a1983200fea7c82fa212d03902708403435ed7df23f", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - }, { "name": "addUnshieldedBalance", "functionType": "open", @@ -376,7 +330,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d077854c516ceb9297495a662c18e22a02c094d05094d40084d788a8206b2c4d5b089cbd22ce85a5029bad9d04401912e8220f68abdcdb13714b1f7de1f167c27bb81072b2e7c6fffeb3b5e279f7363be847fcf7fe6cc3f6766cece4ee7cca91b9c3a91d59d4b0a479cddb9747cf731c1115d0a4b4a228b07e4179cd0ad3c9645297e999dea973914b9313f14089f39ca1f0e8ca88896c7d677ca6dd9262fcfdfb695df97eb2b6cd9aafdf076ad5be6b51edea69daf9daf75bbd645addae5e6fadbe5b56bdb7e78fbb62ddbfbf272fdbe91addbe78e6c99f8da737da796697ee18dda4ba3517b6b34aa9146a3f6d168d4be1a8dda4fa351fb6b34aab146a30ed068d4811a8d3a48a351076b34ea108d461daad1a8c3341ad544a351876b34ea088d4635d568d4911a8d6aa6d1a8e61a8d6aa1d1a8a3341a75b446a35a028cfae39a7e593f7f913f34da1facd8907160acaed91cab27adbeb406d21a4adb53da5ed2f696d648da3ed2f695b69fb4fda535967680b403a51d24ed606987483b54da61d29a483b5cda11d29a4a3b525a3369cda5b5907694b4a3a5b5349b9bc77cadf08ecbd5d89b791a8d6aadd1a8361a8d6aabd1a8761a8d6aafd1a863341a75ac46a38ed36854078d4675d468d4f11a8deaa4d1a87cd7d3ab3d623e497372a5e5496b2dad8db4b6d2da496b2fed1869c74a3b4e5a07691da51d2fad93b4fccaf4a873173cf1ae6913cfc31bd52d6da37c297ba322d6557cda2d91ee66c4ba9f1059da391428290914cf9819593230102c2ef12798a46b4677405c2dce0f850a27ccac8846d307b3202e81d85efa5bf4d2d6c11d05e81e106c4bfc6ca07cdb6f16c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100be26190f2ffde47dba367af137bf729e8dbafff8081270d1afcaf934f1972ea6943879d7e46e1f01145fe91c56706ce3abb6454b0b4ec9cd0e8f098b1e3c64f38f7bcf32f9878a1b9c844ccc5e61273a9b9cc4c32979b2bcc9566b29962a69a69e62a73b5899a7213331566ba9961669a5966b6b9c6cc31d79aebcc5c33cfcc37d79b05e606b3d02c328bcd12b3d42c33cbcd8d6685b9c9ac34abcccd66b559636e316bcdade63673bbb9c3dc69ee32779b7bccbde63e73bf79c0ac330f9a87ccc3e611f3a879cc3c6e9e304f9aa7ccd3c61836cf9867cd73e679f38279d1bc645e36af9857cd6b66bd79ddbc61369837cd46f39679dbbc63de35ef99f7cd07e643f391f9d87c623e359f99cfcd17e64bf395f9da7c63be35df99efcd0fe647f393f9b7d9647e36bf985fcd6f66b3f99d298389981ca64ca62ca66ca61ca66a4cd5996a30d564aac5549ba90ed36e4cbb33edc15497a91e537da6064c0d99f664da8b696fa6464cfb30edcbb41fd3fe4c8d990e603a90e920a683990e613a94e930a6264c87331dc1d494e948a6664ccd995a301dc57434534b261f532ba65ca63ca6d64c6d98da32b5636acf740cd3b14cc7317560eac8743c5327a67ca6ce4c5d98ba327563eace7402530fa69e4cbd984e64eacdd487a980a92f533fa6fe4c039806329dc434886930d3bf984e663a856908d3a94ca7310d651ac6743ad3194c854cc39946301531f999463215339dc914603a8be96ca612a6514c41a652a632a67398424ca399c24c6398c6328d631acf3481e95ca6f398ce67ba806922d3854c173145982e66ba84e952a6cb9826315dce7445744346ddc8c23ea5636339d989efd95989ef599989ef994ee2bb4389ef941159dca534383a1ccb284f7374f9f28a1298d57212dfab57db825da33ced91db660b56cdf4edf44556742f0df903c5c1cafbf32b9615fbc305a561ffe8f2c8f21efec2b2b840c42486f36747560ef017074687fda19ec122ff784afab9c6b6ffc0c9d9f6a7cc9ca4bfcd4afa393be9e79adbfe6b1949f90927d6ae55d551b5238b7a8d195556be7be2e70c5a34305c5ab62eb2bc6b20e41f110e8cf54796f51f531a0ef883e119984bfe7bfc7f45dbb7e57f9826335db92ec56777cbaf0f4cf9ebc966e3f61fe75001f838871e001f8be5318887d09f3e82705082dcff88d26ae456174d81d832357d3fa71a6d0067a56f2068bc4d116fa51e6f53538fb729e4a63015e8c82625e3b88a695a6a474da394bfbecafc861f770510619a168378082d4c31c858c348cad5800ff4514b2eea6572e55e2617f332b90a2f939b8e26a7298d9b01b16566da098e4f7b1ae703a57133c45b8844c797328599993a159ce16a2a78929a547036d3acd4a9e0acd4a9e06c3752c19320a9e02c482a385b672a8891a56bc0ca5d0e98e7641f733a46d3e680bb4e17bb6bbd1c98d7e9cc9730e4e62a1c75728000ca24e6291c753876f3bd3ceaaef7f2a85ba070d4c9c9ddd598b8bc41e1a8c3b15be8e551b7c8cba36eb1c25127bbc4b2dd8489cc250ac71d92df522f8fbc655e1e79cb158ebc3eb2878d89cb1b158e3b1cbb155e1e75377979d4ad5438ea7acbf903262e57291c753876377b79d4adf6f221cd1a882db7a47d7cd14afb214d2bd021cd1af196fb8734b7a43ea459436e0c374c2cad55b9ee91b3b5859050747e50b9ee59201b21187e3fea2c4dbc157132e6fc004151eaa2dbbcec224d1277bb4289eb2bdb6998b9f60e8502876377a79703f32ead73ef0accdcb449e5dcbb5c366530fc7ed639b1dc0d991236415094bae81e2fbb4893c4ddab50e206cad61e6676ba4fa1c0e1d8ddefe5c07c40ebdc3b1f3337fda672ee9dcb340fc36fb3ce89651d644af80d82a2d4450f7ad9459a24ee218512d78fe97accecf4b04281c3b17bc4cb81f9a8d6b9f75a48e76592cab9f71aa639187e8ece89e531c49490491014a52e7adccb2ed224714f2894b8fe4cd76166a727150a1c8edd535e0ecca7b5cebd3763e6a66c9573ef4aa655187e393a2716039912b221284a5dc45e769126897b46a1c40d605a8d999d9e5528703876cf7939309fd73af72ec5cc4d3554cebd8b999660f8d5d439b1bc0099126a405094bae8452fbb4893c4bda452e266312dc3cc4f2fab94381cbf57bc7cd3e5ab105b5e4bbb2e3d577bf57d2ea8fafe55f196fbd5f7afa5aebe7fd595ea7b4c2cad5729976be490169331d55129970fc8393d86df6e3ae5f27548a2520782a2d4456f78d9459a246e8356897b04230175554adc434c0f63f8d5d3397edf848cbcba1014a52edae865176992b8b7b44adc6d180968a852e2d632dd8ae1b7a7cef1fb3664e43584a02875d13b5e769126897b57abc4dd899180462a25ee76a63b30fcf6d1397edf838cbc461014a52e7adfcb2ed224711f6895b87b3012b0bf4a89bb8be96e0cbfc63ac7ef879091b73f0445a98b3ef2b28b3449dcc75a25ee7e8c041ca452e2ee65ba0fc3ef609de3f713c8c83b0882a2d4459f7ad9459a24ee33ad12f72246020e532971cf33bd80e1d744e7f8fd1c32f20e83a02875d1175e76912689fb52abc4bd829180a62a25ee25a69731fc8ed4397ebf828cbca61014a52efadacb2ed22471df689538c648400b9512f73493c1f03b4ae7f8fd1632f25a405094bae83b2fbb4893c47daf55e29ec348804fa5c43dc3f42c865f2b9de317721f74a60f82a2d4453f7ad9459a24ee27ad12f73846025aab94b847991ec3f06ba373fcfe1b32f25a435094ba6893975da449e27ed62a714f6124a0bd4a897b82e9490cbf63748edf5f2023af3d0445a98b7ef5b08b2a470940e1e44c06334a3aa8e4f7991ccb61f875d419e2903b8e333b40503a0226baa59d4381929240f18cf2c89281816071893ff196f7b4ad23c06de7719b469595f8993647a74796f71a33aaace7c882d2702c2333b2b84b6970743846e5002facec1c08168626740ff84b8afa964dcf58d835309632160d0c979661de2b8f9f6f7f139f603aeaf7f4c7853bfc7e8fa2350073cf7d46da66b572c16132b5bc8391de7c9509e65b4c6f63f8755639b538982b7cf321289d55868084f81b9810e8a692df7aa6d731fcbaeb0c7107129cdd2028ddb586f8264c08f454c9ef27d92bc4f0eba533c43321c1d91382d24b6b887f8709813e2af97dc3f42d865f81ce10cf8204671f084a81d610ff081302fd55f2fb80e9430cbf013a431c73a5777f088a5217e560b631d56c16fef1bec265fdfc45fed0687fb062564c56fd66b33c29fe74e2cfccf8332bfecc8e3f73cce60cf9568d9dea29f162b1eef1bfaf96f8fb1aecd47467b3f96bcc281da472b3f94ba6af30fc06eb1c62b520fa3108823258f366b3530bb9d9ecd4b69bcd49ee159f603aaa8ec6cde64a7e75946e36efa675b3f97d8cf49ea232c17d97e93d0cbf213aa796dd2193c2291094215ad7701b3121305425bf0d4c6f62f80dd319e27b40827328046598d610ff151302852af9fdccf40b86df709d218eb908b61082325c6b88ff880901bf4a7edf33fd80e137526788d78304a71f8232526b887f8a0981804a7e1f337d82e17796ce10af0f09ce000445a98b1a60b631d56c16ee6cb379b7f8f6f0eef1e71ef167ddf8b35efc593ffe6c90d83c6ec8ce9ebbb4d9dc30f1f77bb1b3f71fbb28ddc8a907e966cc95a8a354c670bc6c0550d9034141b8c8bddddc46d0dddc7dec6e6e927bc527988eda57e56eaef0db37ea8606a46b5a7d8848ee0711c9529d22d913531b064129552d92fb4145727f2b9249ee159f603aaab14a91147e8da3ae64b20bf30bba5648a2b92fc9a331b173801b2b82033df6462c78798473803809b36e3e47e3642a0415854048a58b323b4250ce8144914a1761d6ad984ba0c7e84cc986620e0921286354a764074153b2836d4a96e45ef109a6a30e51999209bf433cbc6e3d142292e3748a6421e6981982324eb5481e0a15c9c3ac4826b9577c82e9a8262a4552f8357177dd7a48e5bab589ac5b0f7763dd7a84c76abaf1ebd6c3c5499875eb049debd6c31585c0b93ad7ad8321281320518470d1f2ae81907f443830d61f59d67f4c6938e00f8667544c875dfc012bea865dd5012bc30688fdaecdd5bed4bf66e748769aaedbc1c4b178407ec109ddca65d6683a3ee5af8f3493dcc83d3b630ad5212817e84ccff331ef5580a04cd4392bedd24760ec7c8c4084fb429db3d2051094899028bad0b55909b2ceabab46b59bb3d32cb56a374baddacddd506d48e5b6d30c32669beb15a4f45713cd2063f692f4fdfc3fc450db94e4c4452d202e3a0a224897b82748314df1947e248084ad85f41c66172a95fa1d955a1c5bd01fdff49a7e57b5006f3d81f66e8eb697bfee62071e0ddde46d69377993dc2b3ec174944fe526aff0f3297d3f7e2bf0fbf141d294ebe1cb43412ecaf3f0e5932017b5f6f0e5852017b5f1f0e5772017b5b597a7edcc45edfe6197a7b58abf032d37fecc8b3f5bc79f6de2cfb6f167bbc4fbd3dab373cc2ebd9fad7de2ef8f65e73837baa883c792fd3f3ff0f6551e78779003ef8e6ef8f178cf87fa767e3c5efcd8e9bf2babd8d695550c76053aecae71448a0da7b70976cf7414ba08cd8f5e1759d8a7746ccca1c477cad8b20ccd2807387245f7d2903f501cac0ca98a9b8afde181fe11217ff844ff84f2c8f21efec2b2fc50a870422c9362919503fcc581d1617fa867b0c83f9e927e76b698958d302b69759cb330bfa828333bb2a8776961512c2b27e18a9cac2a97e4441655aed3cb6b267ecea0aa653466b1dac9e5992a56399dc4e796fcc4dcd2999d2e6e6862578f69e256b9abc06e2475070a1466674222a22b423617c747f34c9c6cbe03abdc40145c7873b2f3e82487a3f51dec027d55b43e825d9aae8ad61710a0ca8ffcc3665adda27313e943a6e362c6d566fb8c6b6d508e1b474e281823f3d8c880bf480e1afcdb255e5954b1d3c46bdb3c2d678bad392ea461d52ad330c9be12695876b5847faa6557f9a95a551a56cb9534cca7fafd05dda0b1d8dd1e3d25b9577c82e9a813541e3d09bf13a21aef41732a5d86a98bbf4ce7a6a80f82d203b2e376996a8deb01d5b89e56e392dc2b3ec174542f951a27fc7ab972bcee558755aefa31e50327ea94dedef693467631147a43a5b78f95de24f78a4f301d55a05249845f81d2caa6be3a2b9bfa79f8932a402eeaefe14f3a00b96880876fca07b968a0876f5a07b9e8247b53f7ce5c34e81f765377dff87971bff8b37ffc3920fe1c187f9e147f0e4a9c260f66e75fbb54d93438f1f727b3738a1b5d34c463c9fe9f57e4145456e40c21764e75c38fa7793ed4b7f3e369e2c7a1ae56366d847db095cacaa65f611f6a843d6f1b662b9bfedf954d43ff82caa693e373cbb0c4dc723a3b67b8a189851ed3c47f4e65934444a1cacaa6f7555d25e3cdc9cea3931c8ed68fb04f6b5345eb53d82774a9a2f53504a8f2f3e5b199d6705bd994fca5aab2a940f5a9ff70682c8eb0474f49ee159f603aaa48e5d193f02bd259d9542096612a9b2ed7b9295a0041c16cad5fae5ae3fc508d1b69352ec9bde2134c4715abd438e157acb4b249a7c32a57fd98f2813391ba12dd661007a273dcdb8e5c25db91030a8345a5a3e2c378bbbc9828bae585335dc874b32a335dcaacca749daa8dc6acaa9501655565bad593325db4b0c0ae334c3f84ce527333a67b13dc59d009ee6c3bc125b9577c82e9a812957a2dfc4aa2aa03bc041ae0a36c8027b9577c82e9a8a0ca00177e41a50592a51a0b2431336f999a99d7857e4bffe32b73b7372b0631ab04821272a58066fb1aa7d2f8c971993ceb49ab1fff29107f9e137f861267caa3d909ef527dd3e8c4df8f6167ec8eea49d41cb06e39cab49fd3b113a0cac355c45885dc1a8f889e7a5a0ca9afc51019f17fd595fea9bf7251d342fa89aa6f9b44759cab455449477a6b12477a5d42fec2f00e0ef4765449b5cdaf9d1ccfd65105552f8dc6419746e3edd228c9bde2134c474d50b934127e13741ee005c532cc01de953a0ff08210947321077857aad6b873a11a779ed5b824f78a4f301d75be4a8d137ee72b3dc04338ecefb2ed7a811d7749ee159f603a6aa2d66dd789518d732f667ff3429dfb9b9a36122f425ebb31032b6f0ef0dd12eadebea165c30a6b507de0fe2b46e2268a0c20aad441d6d453644b7d45b65416fc28d9f4cc8dcfd67a1c7311e4dd08895125e72f11762e8e6ec86894d889cbde528094f9d7bf4561b57f5420dc2d382234a14cf6337b97166fb79d99433376fafe84ed7fce4cfa396b5bb8ecaddb9fd55dd8feac51b9fd9953bd6afbb35a8d2daf55b31c707a1cef881a19911589d7ec190cf72d9b9151f98a9d32aa36546b6d7dc5da88547db124e5217fac56b5ed5fb356fc356bd5867a72cb6b55ff93d78af3ab53a32a1ceb546d24efe5427d9c7bcbb408749976895da625b9577c82e9a84b552ed384dfa5bacbbf2e8606f86536c093dc2b3ec174d42495012efc26455dbdcbe4d2cabb4c26113b97efb8dcfc0a5b6efe77994eeb42b5e64aab35db39573c82519ac90a9546d84d565a663a256db3f2dc306baacb858695da3c255e1e38559e0d122582d3d8b9cac56465325440aeb60292e45ef109a6a3a22a9315e117552a22e5e85a758c59319da5d8932128157f412976b96863dd843ec61ac6d5f28af833167f562454733a3b33767a1dd8b4f8bf989ef81733d999e55a29b6bc16f030404be68831a48116431aea2934bec26385c693a185c6b36da1b1824263dd9b70b3a179ed3536af4d72aff804d3517354e6b5c26f8ece42e3a8588629349ea2b3d0380a41b91652683c45b5c65d0bd5b8ebacc625b9577c82e9a8b92a354ef8cd555a683c175968ecf54a3ccce2126a52036d0635b4cb6ff7baca2ebf77648ad796df5b8be6e6b133df16cda5ab26b668ce16cdedba22cd83a6fad7db547f5bc0b8a45d8fe9a8052a537de1b740f77edd7c6880df60033cc9bde2134c472d5419e0c26fa1bb45730b2a8be616123b8bdc38155eacf30c7d894eb396ea346b99c60d63fa9d9d1a187ecb556e88d761672f0cbf1b7586d50a9d66dda4f51e9631187e2bb51effccc4f05ba533ac6ed669d66a95d120ff9d88e1b746ebc7a29c89e1778bceb05aabd3ac5b759a759b4eb36ed769d61d3acdba53a75977e934eb6e9d66dda3d3ac7b759a759f4eb3eed769d6033acd5aa7e9ea23ffc8f8d770d98e82907b107034e782cf1f72c3e76902fa0842ed618dd41c08b5473452cb84507b5423b52c08b5c73452cb86507b5c23b51c08b5273452eb0ca1f6a4466a72540321f7944e724b20e49ed6496e29849cd1496e19841ceb24b71c42ee199de46e84907b5627b9151072cfe924771384dcf33ac9ad84907b4127b95510722fea24773384dc4b3ac9ad86907b5927b9351072afe824770b84dcab3ac9ad85907b4d27b95b21e4d6eb24771b84dceb3ac9dd0e21f7864e727740c86dd049ee4e08b9377592bb0b426ea34e727743c8bda593dc3d10726feb24772f84dc3b3ac9dd0721f7ae4e72f743c8bda793dc3c08b9f775929b0f21f7814e720f40c87da893dc3a08b98f74927b1042ee639de41e8290fb4423b96a106a9f6aa4561d42ed338dd46a40a87dae915a4d08b52f3452ab05a1f6a5466ab521d4bed248ad0e84dad71aa9ed06a1f68d466abb43a87dab91da1e106adfa54f2dba214392a387d979849d47d9798c9dc7d979829d27d9798a9da7d931ec303bcfc861bb1c49cbc1ad1c6fca21a01c95c981921cbbc8e1846ce1cb46b76c07cba6a96c2dca069c6c53c9668e6c79c8c6802c9f6591294b3159b0485a2fc9afa488924849c22113b34c6022f42288221c32c02410a5c384d87f00", + "bytecode": "ed5d077854c516ceb9297495a662c18e22a02c094d05094d40094d788a8206b2c4d5b089cbd22ce85a500471b3a15900915e05b157ec6d8ebda188bdf7feb0e03bd90d3c5871e17bfb5fdff13af99c1bf325fc7bfe3367fe39337376761a674ed9e0d489acee5c5238fc9ccea5e3ba8f0e0eef5258521259d83fbfe0846ee5b12c4af1cbec54bfcca1c8b2fc50207cd6487f3830bc225a1e5bdf29b7659bbc3c7fdb567e5faeafb065abf6c3dab56e99d77a589b76be76bed6ed5a17b56a979beb6f97d7ae6dfb61eddbb66cefcbcbf5fb46b46e9f3ba265e26bcff59d5aa6f985376a2f8d46edadd1a8461a8dda47a351fb6a346a3f8d46edafd1a8c61a8d3a40a351076a34ea208d461dacd1a843341a75a846a30ed36854138d461daed1a823341ad554a351476a34aa9946a39a6b34aa8546a38ed268d4d11a8d6a0930ea8f6bfa257dfd45fed0287fb06243c681b1ba6673ac9eb4fad21a486b286d4f697b49db5b5a2369fb48db57da7ed2f697d658da01d20e947690b483a51d22ed506987496b22ed706947486b2aed4869cda43597d642da51d28e96d6d26c6e1ef3b5c23b2e57636fe66934aab546a3da6834aaad46a3da6934aabd46a38ed168d4b11a8d3a4ea3511d341ad551a351c76b34aa9346a3f25d4faff688f924cdc9959627adb5b436d2da4a6b27adbdb463a41d2bed38691da4759476bcb44ed2f22bd3a3ce5df0c4bba64d3c0f6f54b7b48df2a5ec8d8a5857f169b744ba9b11eb7e426471e750a0a424503c7d4664d18040b0b8c49f6092ae19dd0171b5303f142a1c3fa3221a4d1fcc82b804627be96fd14b5b077714a07b40b02df1b381f26dbf59100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c888741caff7b1f6d8f9ebd4e3ca977419fbefdfa0f3879e0a07f9d72eae0d34e1f32f48c330b870d2ff28f283e2b70f639252383a565e7864685478f193b6efc79e75f70e1848bccc526622e31979acbcce566a2b9c25c692699abcc6433c55c6da69a6b4cd4949b98a930d3cc7433c3cc34b3ccb5e63a73bdb9c1cc3673cc5c73a399676e32f3cd02b3d02c328bcd12b3d42c33cbcd0ab3d2ac32379bd5668db9c5ac35b79adbccede60e73a7b9cbdc6dee31f79afbccfde601b3ce3c681e320f9b47cca3e631f3b879c23c699e324f1b63d83c639e35cf99e7cd0be645f39279d9bc625e35af99f5e675f386d960de341bcd5be66df38e79d7bc67de371f980fcd47e663f389f9d47c663e375f982fcd57e66bf38df9d67c67be373f981fcd4fe6df6693f9d9fc627e35bf99cde677a60c266272983299b298b2997298aa315567aac15493a916536da63a4cbb31edceb407535da67a4cf5991a303564da93692fa6bd991a31edc3b42fd37e4cfb3335663a80e940a683980e663a84e950a6c3989a301dce74045353a623999a3135676ac17414d3d14c2d997c4cad987299f2985a33b5616acbd48ea93dd3314cc7321dc7d481a923d3f14c9d98f2993a337561eacad48da93bd3094c3d987a32f5623a91e924a6de4c054c7d98fa32f563eacf3480e964a6814c8398fec5740ad3a94c83994e633a9d6908d350a63398ce642a641ac6349ca988c9cf3482a998e92ca600d3d94ce73095308d640a32953295319dcb14621ac514661acd3486692cd338a6f14ce7319dcf7401d3854c13982e62ba9829c27409d3a54c97315dce3491e90aa62ba31b32ea46e6f72e1d13cbc94e7ccfce4a7ccfca4c7ccf7412df1d4a7ca78cc8c22ea5c151e15846799aa3cb975794c0ac9693f85ebdda16ec1ae5698fdc365bb06aa66fa72fb2bc7b69c81f280e56de9f5fb1a4d81f2e280dfb47954796f6f01796c5052226319c3f2bb2b2bfbf38302aec0ff50c16f9c751d2cf35b6fd074eceb63f65e624fd6d56d2cfd9493fd7dcf65fcb48ca4f38b176adaa8eaa1d59d06bf4c8b2f2dd133f67d08201e1d2b27591a55d0321fff070608c3fb2a4dfe8d270c01f0c4fc75cf2dfe3ff2bdabe2dffc37415d3a475293ebb5b7e7d60ca5f5f65366eff710e15808f73e801f0b1581e837808fde923080725c8fd8f28ad466c75d164882d53d2f773aad1067056fa0682c6db64f156eaf13625f5789b4c6e0a53818e6c52328ea94c57a776d4d594f2d753cd6ff871570011a6ab63100fa1852906196b1849b906f0813e6ac945bd4caedccbe4625e2657e16572d3d0e434a571d321b6cc483bc1f1694fe37ca0346eba780b91e8f852a6303352a782d35d4d054f56930ace629a993a159c993a159ce5462a783224159c09490567e94c0531b2742d58b9cb2b2039bccc971855bb0edc79daf85defe5e0bc4167ce8421375be1c89373846b30713947e1b8c3b19bebe55177a39747dd3c85a34e8eeea661e2f22685a30ec76ebe9747dd022f8fba850a479d1c95c73071b948e1a8c3b15bece551b7c4cba36ea9c25177a26cd063e27299c2518763b7dccba36e859747dd4a85a3aeb79c1c61e27295c251876377b39747dd6a2f1fd2ac81d8724bdac717adb41fd2b4021dd2ac116fb97f48734bea439a35e4c670c3c4d25a953beb72b6361f128ace0f2a77d6e7c9260886df8f3a4b136f459c8c393f405094bae8362fbb4893c4ddae50e2faca561a66aebd43a1c0e1d8dde9e5c0bc4bebdc7b3d666edaa472eebd568edb31fc7ed639b1dc0d991236415094bae81e2fbb4893c4ddab52e26632dd80999fee532971387ef77b39381fd03affcec5cc4fbfa90cced94c7330fc36eb9c5cd641a685df20284a5df4a0975da449e21e5228717d986ec4cc4e0f2b14381cbb47bc1c988f6a9d7b97433a2f9354cebd4b999661f8393a2796c710534226415094bae8712fbb4893c43da150e2fa31adc0cc4e4f2a14381cbba7bc1c984f6b9d7b6fc6cc4dd92ae7de954cab30fc72744e2c06322564435094ba88bdec224d12f78c42891bc0b41a333b3dab50e070ec9ef372603eaf75ee5d8c999b6aa89c7b17322dc2f0aba9736279013225d480a02875d18b5e769126897b49a1c4f5675a82999d5e5628703876af78f9a6cb5721b6bc96765d7aaef6eafb5c50f5fdabe22df7abef5f4b5d7dffaa2bd5f798585aaf321b5c230b554cb654476536f8b4ec5560f8eda6532e5f8724297520284a5df486975da449e2366895b8e730125057a5c43d239b44187ef5748edf372123af2e0445a98b367ad9459a24ee2dad12771b46021aaa94b8b54cb762f8eda973fcbe0d19790d21284a5df48e975da449e2ded52a71776224a0914a89bb9de90e0cbf7d748edff72023af110445a98bdef7b28b3449dc075a25ee418c04ecaf52e21e605a87e1d758e7f8fd1032f2f687a02875d1475e76912689fb58abc43d82918083544adc434c0f63f81dac73fc7e02197907415094bae8532fbb4893c47da655e21ec748c0612a25ee51a6c730fc9ae81cbf9f4346de611014a52efac2cb2ed224715f6a95b8a73012d054a5c43dc1f42486df913ac7ef579091d71482a2d4455f7bd9459a24ee1bad12770f46025aa894b8bb98eec6f03b4ae7f8fd1632f25a405094bae83b2fbb4893c47daf55e2eec748804fa5c4ddcb741f865f2b9de317721f74a60f82a2d4453f7ad9459a24ee27ad12f72246025aab94b8e7995ec0f06ba373fcfe1b32f25a435094ba6893975da449e27ed62a71af6024a0bd4a897b89e9650cbf63748edf5f2023af3d0445a98b7ef5b08b2a470940e164358f19251d54f2fb46367430fc3aea0c71c8fdc6991d20281d0113dde2cea1404949a0787a7964d18040b0b8c49f78cb7bdad611e0a6f3b84d23cb4afc4c9ba3d3224b7b8d1e59d6734441693896911959d8a534382a1ca372801756760e040b43e3bb07fc25457dcaa665ccef1a1843190b06844bcb30ef95c7cfb7bf894f301df57bfae3c21d7ebf47d11a80b9e33e236db35ab9e030995a3ec2486fbeca04f303a60f31fc3aab9c5a1cccf5bdf91094ce2a434042fc1d4c087453c9ef2da6b731fcbaeb0c7107129cdd2028ddb586f8179810e8a992df674c9f63f8f5d219e29990e0ec0941e9a535c4376142a0b74a7e3fc97638865f81ce10cf8204676f084a81d6107f031302fd54f25bcff43a865f7f9d218eb9cebb1f0445a98b7230db986a360bff785fe192befe227f68943f58313326ab7eb3599e147f3af16766fc99157f66c79f396673867cabc64ef59478b158f7f8df574bfc7d0d766abab3d9fc2366940e54b9d9fc3dd30f187e83740eb15a10fd18084119a479b3d9a985dc6c766adbcde624f78a4f301d5547e3667325bf3a4a379b77d3bad9fc29467a4f5599e07eccf40986df609d53cbee9049e15408ca60ad6bb8f73121304425bf7799dec3f01baa33c4f78004e71008ca50ad21fe3526040a55f2fb92e92b0cbf613a431c73116c21046598d610ff1513027e95fc7e66fa05c36f84ce10af07094e3f046584d610df880981804a7e1b98dec4f03b5b6788d78704670082a2d4450d30db986a360b77b6d9bc5b7c7b78f7f8738ff8b36efc592ffeac1f7f36486c1e376467cf5dda6c6e98f8fbbdd8d9fb8f5d946ee4d4837433e64ad4912a63385eb602a8ec81a0205ce4de6e6e23e86eee3e763737c9bde2134c47edab723757f8ed1b754303d235ad3e4424f7838864a94e91ec89a90d83a094aa16c9fda022b9bf15c924f78a4f301dd558a5480abfc6515732d9f9f9055d2b24d1dc97e4d198d839c08d15c1811e7b2316bc3cc239409c8459379fab713215828a4220a4d245991d2128e742a248a58b30eb56cc25d0a375a664433087841094d1aa53b283a029d9c136254b72aff804d35187a84cc984df211e5eb71e0a11c9b13a45b21073cc0c4119ab5a240f858ae461562493dc2b3ec1745413952229fc9ab8bb6e3da472ddda44d6ad87bbb16e3dc26335ddf875ebe1e224ccba75bcce75ebe18a42e03c9debd6411094f1902842b86869d740c83f3c1c18e38f2ce937ba341cf007c3d32ba6c12efe801575c3aeea80956103c47ed7e66a5fea5fb373243b4dd7ed60e258d83fbfe0846ee5326b341d97f2d7479a896ee49e9d3185ea10940b75a6e7f998f72a405026e89c9576e92330763e4620c27d91ce59e94208ca0448145de4daac0459e7d555a3dacdd969965ab59ba556ede66ea836a472db690619b3cdf50a52faab896690317b69fa7efe1f62a86d4a72e2a21610171d0511a44bdd13a498a6784a3f1240c2d6427a0eb30b954afd8e4a2d8e2de88f6f7a4dbfab5a80b79e407b3747dbcb5f77b1038f866ef2b6b49bbc49ee159f603acaa7729357f8f994be1fbf15f8fdf82069caf5f0e5a12017e579f8f249908b5a7bf8f242908bda78f8f23b908bdadacbd376e6a276ffb0cbd35ac5df81961b7fe6c59fade3cf36f167dbf8b35de2fd69edd9396697decfd63ef1f7c7b2739c1b5dd4c163c9fe9f1f78fb2a0fbc3bc881774737fc78bce7437d3b3f1e2f7eecf4df95556cebca2a06bb021d76d73822c586d3fb0276cf7414ba08cd8fde1099dfbb744ccca1c477cad8b20ccd2807387279f7d2903f501cac0ca98a15c5fef000fff0903f7ca27f7c7964690f7f61597e2854383e9649b1c8cafefee2c0a8b03fd43358e41f47493f3b5bccca469895b43ace999f5f5494991d5970526961512c2b27e18a9cac2a97e4441654aed3cb6b267ecea0aa653466b1dac9e5992a56399dc4e796fcc4dcd2999d2e6e6862578f69e256b9abc06e2475070a1466674222a22b423617c647f30c9c6c7e04abdc40145c7873b2f3e82487a3b5097681be2a5a6fc02e4d5745eb3b0850e547fe6133ad6ed1d989f421d37131e36ab37dc6b53628c78d23c6178c96796c44c05f24070dfeed12af2caad869e2b56d9e96b3c5d61c17d2b06a956998645f89342cbb5ac23fd5b2abfc54ad2a0dabe54a1ae653fdfe826ed058ec6e8f9e92dc2b3ec174d4092a8f9e84df09518df7a039952ec3d4c55fae7353d40741e901d971bb5cb5c6f5806a5c4fab7149ee159f603aaa974a8d137ebd5c395ef7aac32a57fd98f28113754aef49f693467631144e824a6f6f2bbd49ee159f603aaa40a59208bf02a5954d7d745636f5f5f02755805cd4cfc39f740072517f0fdf940f72d1000fdfb40e72d1c9f6a6ee9db968e03feca6ee3ef1f3e2bef167bff8b37ffc3920fe3c39fe1c98384d1ec4cebf76a9b26950e2ef4f61e75437ba68b0c792fd3fafc829a8acc8194cec9ce6861f4ff77ca86fe7c7d3c58f435cad6c7a1ff6c1562a2b9bbe867da811f6bc6da8ad6cfa7f57360df90b2a9b4e89cf2d431373cb19ec9ce98626167a4c13ff39954d1211852a2b9b3e5575958c37273b8f4e72385abfc23ead4d15ad8db04fe85245eb470850e5e7cb6333ad61b6b229f94b55655381ea53ff61d0581c6e8f9e92dc2b3ec1745491caa327e157a4b3b2a9402cc354365da17353b4008282d95abf42b5c6f9a11a37c26a5c927bc527988e2a56a971c2af586965934e8755aefa31e50367217525bacd200e44af736f3b72956c47f62f0c16958e8c0fe3edf262a2e89617ce7421d3cdaacc7429b32ad375aa361ab3aa5606945595e9564fca74d1c202bbce30fd103a5bcdcd98ee4d70674327b873ec0497e45ef109a6a34a54eab5f02b89aa0ef01268808fb4019ee45ef109a6a3822a035cf805951648966a2c90c4ccbc656a665e17fa2dfd8fafccdddeac18c4ac12084ac895029aed6b9c4ae327c765f2ac27ad7efca740fc796efc194a9c298f6227bc4bf54da3127f3f9a9d313baa275173c0bae528d37e4ec74e802a0f57116315726b3c227aea6931a4be164364c4ff5557faa7feca454d0be927aabe6d12d5b1ae1651251de9ad491ce97509f90bc33b38d0db5125d536bf76723c5b471554bd341a0b5d1a8db34ba324f78a4f301d355ee5d248f88dd779801714cb30077893741ee0052128e7410ef026a9d6b8f3a01a77bed5b824f78a4f301d75814a8d137e17283dc04338ecefb2ed7aa11d7749ee159f603a6a82d66dd709518d732f667ff3229dfb9b9a36122f465ebb311d2b6f0ef0dd12eadebea165c30a6b507de0fe2b46e226880c20aad441d6d453644b7d45b65416fc28d9f4cc8dcfd67a1c7331e4dd08895125e72f11762e896ec86894d889cbde528094f9d7bf4561b57f6420dc2d383c34be4cf6334f2a2dde6e3b3387a6eff4fd09dbff9c99f473d6b670d95bb73fabbbb0fd59a372fb33a77ad5f667b51a5b5eab6639e0f438de11353222cb13afd93318ee53363da3f2153b65546da8d6dafa8ab511a9fa4249ca43fe58ad6adbbf66adf86bd6aa0df5e496d7aafe27af15e757a7465538d6a9da48decb85fa38f7966911e832ed52bb4c4b72aff804d35197a95ca609bfcb74977f5d020df0cb6d8027b9577c82e9a8892a035cf84d8cba7a97c9659577994c2476ae70a3d6e8cab46dcf73c3ac492e5709553af6ca786dcf24793648d4f75cc5cee41d97f44fb125fd7f9794a52e54cfafb67abe9d73c52318359faa50cd85dd54ddc9ca5468705f63833bc9bde2134c474555262bc22faab456bd1c5dab8e312ba6b3147b2a04a5e22f28c52e97f4aa6e22c58a358c275c53e2cf58fc599148bca6b1337da7d7815d15ff17d312ff62063b335d2bc596d7021e0668c96a308634d06248433d85c6533c56683c155a683ccb161a2b2834d69dd7ce82e6b5d7dabc36c9bde2134c475da732af157ed7e92c348e8a659842e3c93a0b8da31094eb2185c693556bdcf5508dbbc16a5c927bc527988e9aad52e384df6ca585c6b39185c65eafc4c32c2ea12635d0665043bbfc76afabecf27b47a6786df9bdb5686e0e3b736dd15cba6a628be66cd1dcae2bd21c68aa7fa34df5b7058c4bda8d988e9aa732d5177ef374efd7cd8506f84d36c093dc2b3ec174d47c95012efce6bb5b3437afb2686e3eb1b3c08d53e1853acfd017e9346bb14eb39668dc30a6dfd9a981e1b754e586781d76f6c2f05ba633ac96eb346b85d67b584663f8add47afc3303c36f95ceb0ba59a759ab554683fc772286df1aad1f8b721686df2d3ac36aad4eb36ed569d66d3acdba5da75977e834eb4e9d66dda5d3acbb759a758f4eb3eed569d67d3acdba5fa7590fe8346b9da6ab8ffc23e25fc3643b0a42ee41c0d19c0b3e7fc80d9fa709e82308b58735527320d41ed1482d1342ed518dd4b220d41ed3482d1b42ed718dd47220d49ed048ad3384da931aa9c9510d84dc533ac92d82907b5a27b9c510724627b9251072ac93dc5208b96774925b0621f7ac4e72cb21e49ed3496e0584dcf33ac9ad84907b4127b95510722fea24773384dc4b3ac9ad86907b5927b9351072afe824770b84dcab3ac9ad85907b4d27b95b21e4d6eb24771b84dceb3ac9dd0e21f7864e727740c86dd049ee4e08b9377592bb0b426ea34e727743c8bda593dc3d10726feb24772f84dc3b3ac9dd0721f7ae4e72f743c8bda793dc1c08b9f775929b0b21f7814e720f40c87da893dc3a08b98f74927b1042ee639de41e8290fb4423b96a106a9f6aa4561d42ed338dd46a40a87dae915a4d08b52f3452ab05a1f6a5466ab521d4bed248ad0e84dad71aa9ed06a1f68d466abb43a87dab91da1e106adfa54f2dba214392a387d979849d47d9798c9dc7d979829d27d9798a9da7d931ec303bcfc861bb1c49cbc1ad1c6fca21a01c95c981921cbbc8e1846ce1cb46b76c07cba6a96c2dca069c6c53c9668e6c79c8c6802c9f6591294b3159b0485a2fc9afa488924849c22113b34c6022f42288221c32c02410a5c384d87f00", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -420,7 +374,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d077c54c5f6cedc4d4257298a88228a82082849a856424731347b07b2c4d5b0892141519f1af561d7644351b0030a2222a2d8114545610e626f111bf6860d2bf89fcc061e597dabffb7dff57def3af93927e6b7e1e4fbce9c7366e6ccdcb95324f47db5777ef95d7d0b478f3dad6fd19903cba263fb8d2e2c2c9f3332376fd080ca58ba4af26146b20f3355f9edb92591d253c6874b2363ab2a2a63aff5c9e9daa35bb770cfec70564ed6e8aed9bdc7f4eadeb55bf7313d7a65f5caeadeab7b7e76af9c9c70af6ebd7af61ed3bb67d7de59dd72c259e3baf7ce19d735feb5fd6b7dbaa6f88507b50323a8968ca0766404d58a11d44e8ca05a3382da9911d42e8ca0da3082da9511545b4650bb3182da9d11543b46507b3082da9311547b46501d1841edc508aa2323a8bd1941756204d5991154174650fb3082da9711545700a8df161ae60e0fe7874b2684a355d5696d634df5a65833d39a9bd6c2b4ed4ddbc1b496a6ed685a2bd37632adb5693b9bb68b696d4cdbd5b4b6a6ed66daeea6b5336d0fd3f634adbd691d4cdbcbb48ea6ed6d5a27d33a9bd6c5b47d4cdbd7b4ae7a53e7585636de70398cbdd98d11547746503d1841f56404d58b11546f4650fb3182da9f11d4018ca00e6404751023a8831941f5610495ebfbf46abb589699e6e498d6cdb4eea6f530ada769bd4ceb6dda7ea6ed6fda01a61d68da41a61d6c5a1fd3726ba6477dfbe189f74f9978373ca8012983ca4ada1b55b1fec6a603e2d3ddb4d8c041e5b7f52d891416460aa64e2bbf7554245a50188e334915c640805fcdc92d29193d695a554545eaca9c129f94b85efa9fe8a52dc15d01c87b40659bfda75ae5ba7e734a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c429714a9c12a7c42909b092ca7fdd473b78c821870e3d2c6fd8f01123471d7ec491471d7dccb1c71d7fc289279d3c7accd8fcf0b8825322a79e56383e5a547c7ac984d2b289679c39e9acb3cff9c7b9e7e9f375b9be405fa82fd2ffd493f5c5fa127da9be4c5faeafd057eaabf4d5ba4257ea98aed253f4543d4d4fd7d7e86bf50c3d535fa7afd737e81bf54dfa667d8b9ea567eb39fa567d9b9eabe7e9dbf57c7d875ea0efd40bf55d7a91be5b2fd6f7e87bf5127d9fbe5f3fa01fd40fe987f5237aa97e542fd38fe9c7f572fd847e523fa557e8a7f5337aa55ea5b516bd5a3fabd7e8e7f4f3fa05fda27e49bfac5fd1afead7f4ebfa0d5daddfd46bf55bfa6dfd8e7e57bfa7d7e9f7f507fa43fd91fe587fa23fd59fe9cff517fa4bbd5e7fa5bfd6dfe86ff5777a83fe5effa07fd43fe99ff52f7aa3dea47f1595264a89f2448544a58bca109529aa9ea8faa21a886a28aa91a8c6a29a88da46d4b6a2b613d554543351cd45b510b5bda81d44b514b5a3a856a27612d55ad4cea27611d546d4aea2da8ada4dd4eea2da89da43d49ea2da8bea206a2f511d45ed2daa93a8cea2ba88da47d4bea2ba8aca12952d2a47543751dd45f510d553542f51bd45ed276a7f5107883a50d441a20e16d54754aea8bea2fa89ea2f6a80a881a206891a2c6a88a843441d2a6aa8a8c344e5891a266ab8a811a2468a1a25ea705147883a52d451a28e16758ca863451d27ea785127883a51d449a24e16355ad418516345e58b0a8b1a27aa40d429a222a24e15759aa84251e345454515892a1675baa812511344958a2a133551d419a2ce143549d459a2ce16758ea87f883a57d479a2ce17552eea0251178aba48d43f454d1675b1a84b2aaad39a96cf3aac68622c3323fe3d233dfe3d3d14ff1ef2e2df3d15ffaed2cae7f42b8a4e288da555a6185d59ddf2e33aeb65c6bfd7afb7597783ca9423b7c7665d0d53c799553e7f605149385210adb93fbf6a6e41b834afa8343ca1b27cdee0f0e8629b2062c68773af295f30325c1099501a2e1912cd0f9fa9127e6eb0f53ff032b7fe299499f0bbe9093f6724fcdc70eb7f6d2229376ec4c68d6a3baa71f9ec43cac617576e1bff394dcd1e555a54bcac7c5eff4849786c696462b87cee88b2a2d248385a3a1573c9ffe0ff6ed2cedafc3fa22e1375e9b2242f14371fb74dfaf1657a6dddd73954015ee730186063833c06b110faed230803c5c9fd875ab2c76d31d1e5102c57a46ee764d1063056ea0041f176b9b156f278bb2279bc5daefc4c4c791cb34933e3b84ad495c90d75a54afaf1557a233eeef22089e9ca18c442e8c41483c41a26a55c0d78a10f2db98a2093ab0c32b95890c9550599dc143439a669dc54089669294f70b2d8a77159a069dc54632dc444272be914665af2a9e0545fa78287d34c05af11353df954707af2a9e0357e4c050f874c05a743a682d7704e053169e95a70e6ae048c73a682390593d36680bb8e8bddcc203be6759cf3250cb9eb09a3ceac9ccdca10e3993710c61d92df8d418ebc9b821c793713469ed9b78b61fcf216c2b8c3b19b15e4a89b1de4a89b43187566c3bc0ae397b712461d8edd6d418ebab9418eba79845137d414e8317e793b61d4e1d8cd0f72d4dd11e4a85b40187543ccce11c62fef248c3a1cbb85418ebabb82bc49b30882e5ee94b72fb2d93769b2419b348b8cb5fcdfa4b93bf926cd22e547b8617c6931658dcfecadcd87b862680c658d6f9e991862f88de53c9a780f62672c3406a285d444f706d9444c296e09618a1b69961798b1f63ec2048763777f901df301d6b1f736ccd8348e72ec9d634aa1187e059c03cb839021611c440ba9891e0ab2899852dcc384296eb829a86346a74708131c8eddd2203be6a3ac63ef42ccd8742ae5d8bbc0946631fc4ee31c589641868453215a484df458904dc494e21e274c71c34c811f333a2d274c7038764f04d9319f641d7b6761c6a628e5d87bb3a85b30fc8a380796a720434214a285d4442b826c22a614f734618a1b216a3666747a8630c1e1d8ad0cb263ae621d7b6fc48c4d259463eff5a26ec0f09bc039b068c8905002d1426a2209b2899852dc6aca14375dd44d98f1e959ca1487e3b726c8cef91cebf83b13333e4da474ce6b45cdc0f03b837370791e322c4c84682135d10b413611538a7b9130c58d12751d66747a8930c1e1d8bd1ce49b2e5f81607935e573e939eca7ef7340a7ef5f31d6f2fff4fdabc94fdfbfe2cbe97b8c2fbd46391b5c24ea21cc6ce92ccad9e003a21ec4f03b9b335dbe0e99a49c05d1426aa237826c22a61457cd9ae2966252c0b99429ee61518f60f89dc719bf6f4222ef5c88165213ad0db2899852dc5bac29ee054c0ab88032c53d67aa5e187e1772c6efdb90c8bb00a285d444ef04d9444c29ee5dd614f73226054ca64c712f9a722386dfc59cf1fb1e24f22643b4909a685d904dc494e2de674d71f76252c06594296eb1a87b30fc2ee78cdf0f20917719440ba9893e0cb2899852dc47ac29ee7e4c0ab88a32c52d11751f86dfd59cf1fb3124f2ae82682135d127413611538afb9435c5adc0a48018658a7b52d453187e559cf1fb1924f262102da426fa3cc826624a715fb0a6b8959814308d32c53d2dea190cbfe99cf1fb2524f2a641b4909a687d904dc494e2be624d718249018c6f7c13b54a94c6f09bc919bf5f43226f06440ba989be09b2899852dcb7ac296e0d260570be5c6fb5a86731fc6ee48cdfef20917703440ba9893604d9444c29ee7bd614f718260530bec750d4a3a29661f8cde28cdf1f2091770b440ba9897e0cb2899852dc4fac29ee094c0a607c69a4a8c7452dc7f0bb8d337e7f8644dead102da426fa25c026aa8912408633ab794c94dc4ec9ef2b53d0c1f09bcfe9e21b21ce793b44cb7cc040775bdf92486161a4606a65f9ada322d182c270fc91f794d1a98da977a0c534beb8302c6a53c594f27987948d2f1e322eafa83496162a9fd3af283aa134a62a015658d037121d5d326960245c983fac784adaacfe91892a6df6a8d2a262ccb3f2f8f176a3b109a6a37e4d3d2efce1f76b053a07405293979632ac6c1f0c6686961f31a997f14dada672615699187e0b2987164f4106853b215a1652ba8071f137302e703725bfd744bd8ee1b798d3c53d8873de0dd1b298d5c53fc7b8c0124a7e9f8afa0cc3ef3e4e170f419c7309440be37b28ad8b7f8871810729f9bd2fea030cbf87385d3c1de29c9857223ec4eae2ef605c602925bfb744bd8de1f728a78b67409c7329440ba9893231654c9a62e16fef2b9c3b3c9c1f2e99108e564d8f9955bfde64a4b2d2b3326465ba95195666ea4d69e65b3df1ea27d5178b0db4bf5f2ffefb0dc46be84fb17903264a1fa72c367f2bea3b0cbfe59c21d608923f1e876859ce5c6cf61a218bcd5e63576c4e30afb109a6a39a30169b6bf835212d366fc35a6cfe05937a9fa29ce0fe64f6fb31fc56700e2ddb420605ccebfd56b0aee1d6625c602525bf6a516f62f8ade274f1ed20ceb912a26515ab8bafc7b8c06a4a7e5f88fa12c3ef594e176f0a71ced5102d9cafc0322efe09c6059ea7e4f791a88f31fc5ee074f16610e7c4bc8be90556175f8771819729f9bd2bea3d0cbf57385dbc39c4395f86682135510b4c1993a658f847c5e66d6c79785b2bb7b3b2a995cdac6c6e658b78f1787bf176f853c5e6ede3bfdf52bc1d7fdb45a97a4e334837b782f8f0eb943e6c8fad004ef640b4204ce45f35b715b49abb93abe62698d7d804d351ad29abb9865feb0a3f7240aad09a4392e4ce902459cd99249760ce8641b4545327c99da1497217972413cc6b6c82e9a8369449d2f06b53e1cb4c76566e5eff2a33d16cad8c68a3c4dbd58f1541db803d88053f1ee1ed6a8c845937af651c4c0d412217788bd244a1f9102d6b215e446922ccba75378899dfe59c92adc46c1242b4bc4b3d25db0d3a25dbdd4dc912cc6b6c82e9a876945332c3af5d80d7ad7b4092e43ace24b91ab3cd0cd1b28e3a49ee014d927bba2499605e63134c47b5a74c92865f7b7fd7aded6ad6adedcdbab5831febd6bd0276a61bbf6eed608c8459b77ec0b96eed40e4021f72ae5b9743b47c00f1228489e6f58f9484c796462686cbe78e282b2a8d84a3a553aba6c02efe801dea865dd5013b860d48f67f6eacce4afeb1787b8bd771d9ef0c1c7346e6e60d1a5069468d8e6726fd786f3dd98fb9e742cc417588964f38a7e777629e558068f9947354ea1883c40824717fc6392a61de18f729c48b3ef36d5482acf39ad264edcee2754a9eb53b25cfda9dfdc8da9093db5e2748cc76e64d48a9af263a4162767dea76fe0f7ca8675272c6445d2026da079290d6fb9790624cfe94ba2780125b17d373982a54b2ecb74ff2e4d845fdf6a1d7d4bbaa0bb8f404aaddeceb2e7ffd931db82fb4c8dbd5157913cc6b6c82e9a82cca22afe19745fa3c7e36f8797c506aca09f0e5a12013750bf0e5932013750ff0e5852013f508f0e5772013f57497a7fd91897afdcd2e4fcbb64fa0e558d9cdcaee56f6b0b2a795bde2cfa7f5166fbf3ff53c5beff8efef2fde017e74d181019becfffb0defac9a0def03cd86f7417ed8f1e0c0bb7a1d3b1e6cecd8e75f2babd89695550c76053aecae71c4141b4eef73d83dd315d045686ec575e5b30e2b9a18f354fcbb4adbbc0c4dab041872fec0a29270a4205ae352557714844b4785c796844b0f0d4faa2c9f37383cba38b7a464f4a45848c5ca178c0c17442694864b8644f3c367aa849fbdcdb03210b01256c799b372f3f34319e5b387168dce8fa567c64d91995e6b92ccf2d935ebf4ca86f19fd354ed321ab358ede3f34815ab194eecd8921b1f5bfa8ad7cf8f9cd83f6039714bbaabc2169206021314a632613ca23f226dceb1d13c0d97367f849ddc401cb808e66017d0410e47eb43d805fa54b4de815d9a4e45eb1b88a29a57fe61675a032aae8f4f1f429e8f33ae1e75675c8ba366bb71dca4bc32338e8d8b84f3cd4643b8cec42b5d55fde1c46beb795ae666ac993e4cc3ead54cc3ccec2b3e0dcba817b74fbd8c5a3bd5ab9d8635f2651a9645fd7cc100a82f0e745b4f09e63536c174d420caad27c36f5005e33d685e8dc930e7e2bfe62c8a6641b40c8654dcbea6ce7183a1396e88cb7109e63536c174d4219439cef03bc497edf5a01aac66d58f393e702867ea1deade34f2275d612834f51ee6526f82798d4d301d954799490cbf3cd2934dc3384f360d0ff09b2a40261a11e0371d804c3432c037e5834c342ac037ad834c74b8bba9fb8f4c74c4dfeca6ee6176bf78b89523ac1c69e5282b0fb7f288f86ef291e21df5a74e361d19fffda3c53bc68f2e3a366093fd7f7f2227afe644ceb14abce3fcb0e3f18177f53a763cded8f1045f4f36ad85bdd88af264d37ad84b8db0fb6d27ba934dffed934d27fc05279b8eb663cb89f1b1e524f14ef623278e0e584efcfb9c6c321e319af264d32f5457c90473b00be82087a3f509ec6d6d54b4d6c1ded045456b034451cdfbe5b133ad31ee6453e217d5c9a63cea5dff31505f1cebb69e12cc6b6c82e9a87ccaad27c32f9ff364539e418639d9f42d6751340fa2250ca9b87d4b9de3c2d01c37cee5b804f31a9b603aaa8032c7197e05a4279b380d56b3eac71c1f380599572ab60ae248c50cffca91779a72e4c8d1d1fca2f1368cebcc8b95aad8fc87433ecc74d36b66ba2a543bd3f56a0b8de9b52b03955e3bd3ad9f30d3452716d87586a9bbd0a9343763fa37c09d0a1de04e73035c82798d4d301d554899af0dbfc20a6a072f843af878e7e009e63536c1745494d2c10dbf28e901c922c603929891b79866e4f5a1df4e4f19564e5d583108ac428896125f0ed0d43de35464778e8b8d6c665a73fb53c4cad3ad2c89ef294f10aff44f9d6f9a10fffd32f126fede79129a0dd6cd5b99ee3d1d7fa0a866731511ab905be311ded38c054873162026e2ffaa2bfd937fe5a08685d427aa595b4d54cff0f51055c296dea2f8965ebf92f0e8d2dfd9d0fbbd93545b7dec6506f61c55947a697406746974a65b1a2598d7d804d3519328974686df24ce0dbca84186d9c0dbc0b981178568390bb281b7813ac79d05cd7167bb1c97605e63134c479d4399e30cbf734837f01006fb5f29bbfec3c55d82798d4d301d752e6bd9f5dc0ac6b11753df3c8fb3bec954483c1f79edc6546c7af3804f4bd03dbec152b0c2026a0eacbf6252dcb9260d204ea983d03423c2d29c084bcd811f92a2678e1dad790c733ee46984785499fd9772f12ea8a84e6b15afc4656c3e8014faeb1f51b82b3c3e523a203ab66452b1a9670e2d2aa853cecc5453fff0f984ba3f87127e4edf5a5dc696f2677d1fca9f0d6aca9f99f56bcb9ff51a6cfe5b0d2b01bbc7b6231aa495cf8fffcd21d1d261c553d36afe629fb4da826aa32d7fb13162aa3ec74cca4bc2b146f5eafecd46f66f366a0cb5e4e6bf55ffdffc2dcbaf49835a776c525b486ee9c3f938ff9669e5d065da856e9996605e63134c475d44b94c33fc2ee23efe7501d4c1ffe91c3cc1bcc626988e9a4ce9e086dfe40a5fef32b9a8e62e93c94abc8bfd386b7409e711a84b39615dc609eb724e585770c2ba9213d6559cb0aee684457ae4b69213568c13561527ac299cb0a672c29ac6096b3a27ac6b38615dcb096b0627ac999cb0aee384753d27ac1b3861ddc809eb264e583773c2ba8513d62c4e58b33961cdf1f98ecbeab4b6b1a67a53ac857dc6e8122b2fb5f2322b2fb7f20a2bafb4f22a2bafb6b2c2ca4a2b6356565939c5caa9564eb372ba95d75879ad9533ac9c69e575565e6fe50d56de68e54d56de6ce52d56ceb272b69573f4a6cee6dbade2dde687e9e7727ac43c4e58b773c29acf09eb0e4e580b3861ddc9096b2127acbb38612de284753727acc59cb0eee184752f27ac25be4fdeb6ab99ffd8c9d05c2be75979bb95f3adbcc3ca0556de69e5422befb2729195775bb9d8ca7bacbcd7ca25f109d67de2ddbff5e677ed5928cce637cdd3cb2da07bf00f54ccf4e1045876dd13600b8a8d6be49614948d0f474b27d439fee5a9bab7726d790b40ba0fc7b7326a0e1b79e9b5c7b742b5d7ce66d49e895319b5878e1afc159772a5aad1b83b24f61f80687990fad8ca83d09079c81d5b4930afb109a6a31ea63cb662f83d4cfad8dac3c8c7d6aa889feb48c1fed963c3ddc78d1dd31d9d55eec39dd79e29de23e22d15ef51f19689f798788f8bb75cbc27c47b52bca7c45b5131e32f38b89d707de603e1e8e965e1b2f0f0b2318591b135f3bad24891fda8ee0df38daafedf27b8eb1c4adf32f0fa711be6bcfe9192b0013e315c3e7744595169c44c41a6a25ce0518e5b53b2c57b46bca797fdce247ccec8dcbc41032acdecf86995f4e367f4463f9ead7f1462e7a763101b0102c457775a46e34eabc45b99dc9d562677a755feb8d332889d5742dc6915bb3b3d41e34e229e4eee4e3ab93b893feef404c4ce1ae24ec2ee4e4fd2b8d3b3e2ad4eee4eab93bbd3b3feb8d393103baf86b8d3b3eceef4148d3b3d27de9ae4eeb426b93b3de78f3b415e6befad81b8d3737e5c1f912a390f62e647205a9ea7ae803d0fad80bde02a6009e63536c174d48b941530c3ef45d20a18da60a06b5b9642b4bc04a87af997545e822695975d524930afb109a6a35ea14c2a86df2ba449056d30aa1dbf15102daf52cf775e85a6a6d75c6a4a30afb109a6a35ea74c4d86dfeba4a9e975ea8b2a3534eede707197605e63134c475553c69de1574d1a77d5d471b71a1a776fbab84b30afb109a6a3d652c69de1b79634eed652c7dd1a68dcbde5e22ec1bcc626988e7a9b32ee0cbfb749e30e61b06467c26b6e6b5a6a4f6f3f6de5caf86bc3de11ef5d3f8eb8bfc779f27e1d27acf739617dc009eb434e581f71c2fa9813d6279cb03ee58445fa32d0cf39617dc109eb4b4e58eb39617dc509eb6b4e58df70c2fa9613d6779cb03670c2fa9e13d60f9cb07ee484f51327ac9f3961fdc2096b2327ac4d9cb07ea584154ae384a53861799cb0429cb0d239616570c2cae484558f13567d4e580d386135e484d5881356634e584d38616de3fbfd4139666be831bb4ff4b895cbadd456aeb6728d952bac7ccfca7556be6fe507567e68e547567e6ce527567e6ae567567e6ee517567e69e57a2bbfb2f26b2bbfb1f25b2bbfb3728395df5bf983953f5af993953f5bf98b951baddc64e5af35329466a5b2d2b3326465ba951956665a59cfcafa5636b0b2a1958dac6c6c65132bb7b1bb69a16d25b4dd1feec23d62b1bc63ffddb6f17fd75442cdfc7094e69cfedb8213d6f69cb07600c3826ca5ab5fc56b80e1d792919fd744bc96187e3b72ba552b4e583b517a4354bc320cbfd69c66df9913d62e9cb0da503aa9f9ef500cbf5d29f9e589770a865f5b4eb7da8d13d6ee9cb0da71c2da8313d69e9cb0da73c2eac0096b2f4e581d3961edcd09ab1327acce9cb0baa061a572df40789cfd1a23dec51072fba44cae871f36dfd70f9ba7a8304b41a87565a406b9572794c5482d04a196cd482d1d422d87915a06845a37466a99106add19a9f58550ebc148cd6c6540c8f5e424d70242ae1727b9ed21e47a7392db01426e3f4e722d21e4f6e724b72384dc019ce45a41c81dc8496e2708b98338c9b586903b9893dcce10727d38c9ed022197cb49ae0d845c5f4e72bb42c8f5e324d71642ae3f27b9dd20e4067092db1d426e2027b97610728338c9ed0121379893dc9e10724338c9b587903b84935c5308b94339c97580901bca496e2f08b9c338c9758490cbe324b73784dc304e729d20e4865392f3ca21e4467092bb00426e24a75b7686901bc549ae0b84dce19ce4f681903b8293dcbe1072473292ab07a1761423b5fa106a4733526b00a1760c23b586106ac732526b04a1761c23b5c6106ac733526b02a1760223b56d20d44e64a4b62d84da498cd4b683503b39756a15d56966725473805142d912ca915037097597500f09f594502f09f596d07e12dadf6cb69b2d69b3716bb637cd26a0d92a331b4a66dbc56c4e9812be29749b72b0299a9ad2a229c099329529e6989287290c98e5b359649aa59859b09869bd99fc9a29a299489909871998cd006612bd498826719800338e683acc10fb3f", + "bytecode": "ed5d077c54c5f6cedc4d4257298a88228a82082849a856420735347b07b2c4d5b0892141519f1af561d7644351b0030a2220a2d811c50a73107b8bd8b0376c58c1ff6436f0c8ea5bfdbffdaeef7bd7c9cf3931bf0d27df77e69c3367ca9d3b4542df577be797dfd9b770f4d8d3fa169d39b02c3ab6dfe8c2c2f2392373f3060da88ca5ab241f6624fb305395df9e5b12293d657cb83432b6aaa232f65a9f9cae3dba750bf7cc0e67e5648dee9add7b4cafee5dbb751fd3a35756afaceebdbae767f7cac909f7ead6ab67ef31bd7b76ed9dd52d279c35ae7bef9c715de35fdbbfd6a76b8a5f78503b30826ac9086a474650ad1841edc408aa3523a89d1941edc208aa0d23a85d1941b56504b51b23a8dd1941b56304b50723a83d1941b56704d58111d45e8ca03a3282da9b11542746509d1941756104b50f23a87d1941750580faed42c3dce1e1fc70c98470b4aa3aad6daca9de146b665a73d35a98b6bd693b98d6d2b41d4d6b65da4ea6b5366d67d37631ad8d69bb9ad6d6b4dd4cdbddb476a6ed61da9ea6b537ad83697b99d6d1b4bd4deb645a67d3ba98b68f69fb9ad6556fea1ccbcac61b2e87b137bb3182eace08aa0723a89e8ca07a3182eacd086a3f4650fb33823a8011d4818ca00e6204753023a83e8ca0727d2fafb68b65993227c7b46ea67537ad87693d4deb655a6fd3f6336d7fd30e30ed40d30e32ed60d3fa98965b531ef5ed8727de3f65e2ddf0a006a40c2a2b696f54c5fa1b9b0e8897bb69b18183ca6feb5b12292c8c144c9d567eeba848b4a0301c67922a8c8100bf9a935b52327ad2b4aa8a8ad49539253e2971bdf43fd14b5b82bb0290f780ca36fb4fb5ca75fde69438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e8953e29438254e895312602595ffba8f76f090a1871c7a58deb0e123468e3afc88238f3afa98638f3bfe84134f3a79f498b1f9e17105a7444e3dad707cb4a8f8f49209a56513cf3873d259679ff38f73cfd3e7eb727d81be505fa4ffa927eb8bf525fa527d99be5c5fa1afd457e9ab7585aed4315da5a7e8a97a9a9eaeafd1d7ea197aa6be4e5faf6fd037ea9bf4cdfa163d4bcfd673f4adfa363d57cfd3b7ebf9fa0ebd402fd48bf49d7ab1be4b2fd177eb7bf4527dafbe4fdfaf1fd00fea87f4c37a997e442fd78feac7f40afdb87e423fa99fd24feb67f44abd4a6b2d7ab57e56afd1cfe9e7f50bfa45fd927e59bfa25fd5afe9d7f51bba5abfa9d7eab7f4dbfa1dfdae7e4fafd3efeb0ff487fa23fdb1fe447faa3fd39feb2ff4977abdfe4a7fadbfd1dfeaeff406fdbdfe41ffa87fd23feb5ff446bd49ff2a2a4d9412e5890a894a1795212a53543d51f5453510d5505423518d453511b58da86d456d27aaa9a866a29a8b6a216a7b513b886a296a4751ad44ed24aab5a89d45ed22aa8da85d45b515b59ba8dd45b513b587a83d45b517d541d45ea23a8ada5b5427519d457511b58fa87d45751595252a5b548ea86ea2ba8bea21aaa7a85ea27a8bda4fd4fea20e1075a0a883441d2caa8fa85c517d45f513d55fd4005103450d123558d4105143451d22ea50518789ca13354cd4705123448d14354ad4e1a28e1075a4a8a3441d2dea1851c78a3a4ed4f1a24e1075a2a893449d2c6ab4a831a2c68aca171516354e5481a8534445449d2aea345185a2c68b8a8a2a12552cea745125a226882a1555266aa2a833449d296a92a8b3449d2dea1c51ff1075aea8f3449d2faa5cd405a22e147591a87f8a9a2cea6251975454a7352d9f7558d1c4586646fc7b467afc7b7a28fe3de4c5bf7b2afe5da595cfe957149d501a4bab4c31bab2bae5c775d6cb8c7faf5f6fb3ee069529476e8fcdba1aa68e33ab7cfec0a29270a4205a737f7ed5dc8270695e5169784265f9bcc1e1d1c53641c48c0fe75e53be6064b82032a1345c32249a1f3e5325fcdc60eb7fe0656efd532833e177d3137ece48f8b9e1d6ffda44526edc888d1bd57654e3f2d943cbc617576e1bff394dcd1e555a54bcbc7c5eff4849786c696462b87cee88b2a2d248385a3a1573c9ffe0ff6ed2cedafc3fa22e1375e9f2242f14371fb74dfaf1657a6dddd73954015ee730186063833c06b110faed230803c5c9fd875ab2c76d31d1e5102c57a46ee764d1063056ea0041f176b9b156f278bb2279bc5daefc4c4c791cd5a4a938ae12756572435da9927e7c95de888fbb3c4862ba3206b1103a31c520b186492957035ee8434bae22c8e42a834c2e16647255412637054d8ea98c9b0ac1322de502278bbd8ccb029571538db510854e56d212665af25270aaafa5e0e134a5e035a2a6272f05a7272f05aff1a3143c1c520a4e879482d770968298b4742d38735702c639b3885985c96933c05dc7c56e66901df33ace7a0943ee7ac2a833bb079518bfbc8130ea70ec6e0c72d4dd14e4a8bb9930eaccce1da87ebf8530ea70ec660539ea660739eae610469d592536cb4d18cfbc9530ee90fc6e0b72e4cd0d72e4cd238cbcc3cc6221c62f6f278c3b1cbbf9418eba3b821c750b08a36ea8d9f3c3f8e542c2a8c3b15b14e4a8bb33c89b348b2158ee4a79fb229b7d93261bb449b3d858cbff4d9abb926fd22c567e841bc6979650ce7bccdeda7c882b86c650ce7be699c210c36f2ce7d1c4bb113b63a131102da426ba27c826624a714b0953dc2833bdc08cb5f71226381cbbfb82ec98f7b38ebd3762c6a6719463eff566eb0fc3af807360790032248c83682135d183413611538a7b8830c58d301bc898d1e961c2048763b72cc88ef908ebd83b0b33369d4a39f6de2cea160cbfd3380796e59021e154881652133d1a641331a5b8c70853dc3051b331a3d30ac2048763f778901df309d6b1f736ccd814a51c7be788ba15c3af8873607912322444215a484df454904dc494e29ea64c71d345cdc58c4fcf50a6381cbf954176ce55ace3ef4cccf85442e99cd78a9a81e137817370d19061a104a285d44412641331a5b8d584296ea4a8eb30a3d3b384090ec76e4d901df339d6b17711666c9a4839f62e10b510c3ef0cce81e579c8903011a285d4442f04d9444c29ee45c214375cd49d98d1e925c2048763f772906fba7c0582e5d594cfa5e7b09fbecf019dbe7fc558cbffd3f7af263f7dff8a2fa7ef31bef41a6535b8d82c1463aaa5b328abc127cc5e0186dfd99ce9f27548917216440ba989de08b28998525c356b8a5b894901e752a6b8a7cd160d86df799cf1fb2624f2ce85682135d1da209b8829c5bdc59ae20493022ea04c71abcc8e1386df859cf1fb3624f22e80682135d13b413611538a7b9735c5adc1a480c994296eb5d9eac3f0bb98337edf8344de6488165213ad0bb2899852dcfbac29ee054c0ab88c32c53d67f62e31fc2ee78cdf0f20917719440ba9893e0cb2899852dc47ac29ee654c0ab88a32c5bd68368d31fcaee68cdf8f21917715440ba9893e09b2899852dca7ac29ee1e4c0a8851a6b825a2eec6f0abe28cdfcf20911783682135d1e7413611538afb8235c5dd874901d32853dc5251f762f84de78cdf2f2191370da285d444eb836c22a614f7156b8a7b10930218dff826ea7e510f60f8cde48cdfaf21913703a285d444df04d9444c29ee5bd614b70c9302185faf27ea21510f63f8ddc819bfdf4122ef06881652136d08b2899852dcf7ac29ee514c0a607c97a1a847442dc7f09bc519bf3f4022ef1688165213fd18641331a5b89f5853dce39814c0f9dac8c744adc0f0bb8d337e7f8644dead102da426fa25c026aa8912408613f506264a6ea7e4f79aa8d731fce673baf8468873de0ed1321f30d0ddd6b72452581829985a597eeba848b4a0301c7fe43d65746a63ea1d68318d2f2e0c8bda5431a57cded0b2f1c543c6e51595c6d242e573fa15452794c65425c00a0bfa46a2a34b260d8c840bf387154f499bd53f3251a5cd1e555a548c79561e3fde6e3436c174d4afa9c7853ffc7ead40e700486af2d2528695ed83c1ccd0f22326f532bea9d5ac5c98592686df22caa1c5539041612144cb224a17302efe21c605eea2e4f7bea80f30fc9670bab80771cebb205a96b0baf8371817584ac9ef2bb3e38be1772fa78b8720ceb914a285f13d94d6c5dfc1b8c00394fcde12f53686df839c2e9e0e714ecc2b111f6475f1cf312eb08c92dfa7a23ec3f07b84d3c53320ceb90ca285d4449998654c9ac5c2dfde57387778383f5c32211cad9a1e33b37ebdc94865a56765c8ca742b33acccd49bd2ccb77ae2d54faa2f161b687fbf5efcf71b88d7d09fc5e6b598287d8c72b1b95ad49b187e2b3843ac11247f3c06d1b28279b1d96b845c6cf61abbc5e604f31a9b603aaa09e362730dbf26a48bcddbb02e36ff8249bd4f5216b83f99fd7e0cbfa73887966d218302e6f57e4fb1cee13ec1b8c04a4a7e1f89fa18c36f15a78b6f0771ce95102dab585d7c03c6055653f2fb56d477187ecf72ba78538873ae8668617c019675f1751817789e92dfbba2dec3f07b81d3c59b419c13f32ea617585d7c3dc6055ea6e4f785a82f31fc5ee174f1e610e77c19a285d4442d30cb98348b857fb4d8bc8d5d1eded6caedac6c6a65332b9b5bd922be78bcbd783bfca9c5e6ede3bfdf52bc1d7fdb45a97a4e334837b782f8f0eb943e6c8fad004ef640b4204ce4df6a6e2be86aee4e6e3537c1bcc626988e6a4db99a6bf8b5aef02307a40aad392449ee0c4992d59c497229e66c18444b357592dc199a2477714932c1bcc626988e6a4399240dbf3615be54b2b372f3fa579942b3b532a28d126f573f66046d03f62016fc7884b7ab311266debc9671303504895ce02d4a1385e643b4ac857811a58930f3d6dd20667e97b3245b89d92484687997ba24db0d5a92edee4ab204f31a9b603aaa1d654966f8b50bf0bc750f48925cc799245763b699215ad65127c93da049724f972413cc6b6c82e9a8f69449d2f06befefbcb55dcdbcb5bd99b776f063deba57c0ce74e3e7ad1d8c9130f3d60f38e7ad1d885ce043ce79eb0a88960f205e8430d1bcfe9192f0d8d2c8c470f9dc116545a59170b4746ad514d8c51fb043ddb0ab3a60c7b001c9fecf8dd559c93f166f6ff13a2eff9d8163cec8dcbc41032acda8d1f1cca41fefad27fb517b2ec21c548768f984b33c5f88795601a2e553ce51a9630c122390c4fd19e7a8847963dca7102ffaccb7510932cf6b4a93b53b8bd72979d6ee943c6b77f6236b434e6e7b9d2031db993721a53e9be80489d9f5a9dbf93ff0a19e49c91913758198681f48425aef5f428a31f953ea9e004a6c5d4ccf6156a19265bf7d9227c72eeab70fbda6de555dc04b4fa0b59b7ddde5af7fb203f7852ef276758bbc09e63536c1745416e522afe19745fa3c7e36f8797c506aca09f0e5a12013750bf0e5932013750ff0e5852013f508f0e5772013f57497a7fd91897afdcd2e4fcbb64fa0e558d9cdcaee56f6b0b2a795bde2cfa7f5166fbf3ff53c5beff8efef2fde017e74d181012bf6fffd867756cd86f78166c3fb203fec7870e05dbd8e1d0f3676ecf3af99556ccbcc2a06bb021d76d738a2c486d3fb0676cf740574129a5b715df9acc38a26c63c15ffaed2364f43d32a01869c3fb0a8241c2988d6b854d51d05e1d251e1b125e1d243c2932acbe70d0e8f2ece2d29193d291652b1f20523c3059109a5e19221d1fcf0992ae1676f33ac0c04ac84d971e6acdcfcfc5046f9ec438b46e7c7d233e3a6c84caf354966f9ec9a797a65c3f8cf69aa761a8d99acf6f179a48ad50c27766cc98d8f2d7dc5ebe7474eec1fb09cb825dd55611792060213146665c278447f44da9c63a3791a2e6dfe083bb981387011ccc12ea0831c8ed63bb00bf4a9687d0ebb349d8ad61b104535affcc3565a032aae8f970f21cfc78aab47dd8a6b49d46c378e9b945766c6b1719170bed96808d729bcd255d51f165e5bd769999bb166fa5086d5ab29c34cf5152fc332eac5ed532fa3d64ef56acbb046be946159d4cf170c80fae240b7f594605e63134c470da2dc7a32fc065530de83e6d5980c732efe6bce45d12c8896c19015b7afa973dc60688e1be2725c82798d4d301d359432c7197e437dd95e0faac16a66fd98e3038770a6de43dd9b46fea42b1c0a4dbd87b9d49b605e63134c47e5516612c32f8ff464d330ce934dc303fca60a90894604f84d0720138d0cf04df920138d0af04deb20131dee6eeafe23131df137bba97b98dd2f1e6ee5082b475a39cacac3ad3c22be9b7ca47847fda9934d47c67fff68f18ef1a38b8e0d58b1ffef4fe4e4d59cc8395689779c1f763c3ef0ae5ec78ec71b3b9ee0ebc9a64f602fb6a23cd9b401f65223ec7edb89ee64d37ffb64d3097fc1c9a6a3edd872627c6c3949bc93fdc889a3039613ff3e279b8c478ca63cd9f40bd55532c11cec023ac8e168ad83bdad8d8ad67ad81bbaa868ad8528aa79bf3cb6d21ae34e36257e519d6ccaa3def51f03f5c5b16eeb29c1bcc626988ecaa7dc7a32fcf2394f36e5196498934ddf722e8ae641b484212b6edf52e7b83034c78d73392ec1bcc626988e2aa0cc71865f01e9c9264e83d5ccfa31c7074e41e6958aad82385231c3bfe5c885663972e4e8687ed1781bc675ea62a52a36ffe1900f956e7a4da5ab42b595ae57bbd0985e3b3350e9b5956efd844a179d5860d719a6ee42a7d2dc8ce9df00772a74803bcd0d7009e63536c174542165be36fc0a2ba81dbc10eae0e39d832798d7d804d351514a0737fca2a407248b180f486246de629a91d7877e3b3d6558397561c520b00a215a4a7c394053f78c5391dd392e36b29969cded4f112b4fb7b224bea73c41bcd23f75be6942fcf7cbc49bf87be749683658376f65baf774fc81a29acd5544ac426e8d47784f331620cd59809888ffabaef44ffe95831a16522f54b3b62a54cff0f51055c296dee2f8965ebf92f0e8d2dfd9d0fbbd93545b7dec6506f61c55947a6a7406746a74a69b1a2598d7d804d3519328a74686df24ce0dbca84186d9c0dbc0b981178568390bb281b7813ac79d05cd7167bb1c97605e63134c479d4399e30cbf734837f01006fb5f5976fd878bbb04f31a9b603aea5cd665d7732b18c75eccfae6799ceb9b4c0b89e723afdd988a4d6f1ef06909bac7375816acb0809a03d75f3129ee5c930610a7d441689a1161694e84a5e6c00fc9a2678e1dad790c733ee46984785499fd9772f12ea8a84e6b155f89cbd87c0029f4d73fa27067787ca47440746cc9a462b39e796851419de5cc4c35f50f9f4fa8fb7328e1e7f4add5656c59feacefc3f267839ae5cfccfab5cb9ff51a6cfe5b0d2b01bbc7b6231aa495cf8fffcd21d1d261c553d36afe629fb4da05d5465bfe626344a93ec714e525e158a37a75ff6623fb371b35865a72f3dfaaff6ffe96e5d7a441ad3b36a95d486ee9c3f938ffa669e5d069da856e9a96605e63134c475d44394d33fc2ee23efe7501d4c1ffe91c3cc1bcc626988e9a4ce9e086dfe40a5fef32b9a8e62e93c94abc8bfd386b7409e711a84b39615dc609eb724e585770c2ba9213d6559cb0aee684457ae4b69213568c13561527ac299cb0a672c29ac6096b3a27ac6b38615dcb096b0627ac999cb0aee384753d27ac1b3861ddc809eb264e583773c2ba8513d62c4e58b33961cdf1f98ecbeab4b6b1a67a53ac857dc6e8122b2fb5f2322b2fb7f20a2bafb4f22a2bafb6b2c2ca4a2b6356565939c5caa9564eb372ba95d75879ad9533ac9c69e575565e6fe50d56de68e54d56de6ce52d56ceb272b69573f4a6cee6dbade2dde687e9e7727ac43c4e58b773c29acf09eb0e4e580b38612de484b58813d69d9cb01673c2ba8b13d6124e587773c2ba8713d652df8bb7ed6aea1f5b0ccdb5729e95b75b39dfca3bac5c60e5422b175979a7958badbccbca2556de6de53d562e8d1758f78a77dfd69bdfb567a1309bdf344f2fb780eec1df5f31d3871360d9754f802d2836ae915b5250363e1c2d9d50e7f897a7eadecab5e52d00e93e1cdfcaa8396ce4a5d71edf0ad55e3b9b517b264e65d41e3a6af0575cca95aa46e3ee90d8bf1fa2e501ea632b0f4043e641776c25c1bcc626988e7a88f2d88ae1f710e9636b0f211f5bab227eae2305fb678f0d771f37764c777456b917775e7ba6780f8bb74cbc47c45b2edea3e23d26de0af11e17ef09f19e14efa98a197fc1c1ed84eb33ef0f474f2f0b978587978d298c8cada9eb4a2345f6a3ba37cc37aafa7f9fe0ae73287dcbc0ebc76d98f3fa474ac206f8c470f9dc116545a51153824c45b9c0231cb7a6648bf78c784f2fff9d227ccec8dcbc41032a4d75fcb44afaf1337aa31fcfd63f02b1f3d331888d0001e2ab3b2da771a755e2ad4cee4e2b93bbd32a7fdc6939c4ce2b21eeb48add9d1ea77127114f2777279ddc9dc41f777a1c62670d71276177a72768dce959f1562777a7d5c9dde9597fdce909889d5743dce95976777a92c69d9e136f4d72775a93dc9d9ef3c79d20afb5f7d640dce9393fae8f48959c0731f3c3102dcf53af803d0f5d017bc1ad802598d7d804d3512f52ae80197e2f92ae80a10d06bab6651944cb4b80552fff92ca4bd0a4f2b24b2a09e63536c174d42b9449c5f07b8534a9a00d46b5e3f71444cbabd4f5ceabd0d4f49a4b4d09e63536c174d4eb94a9c9f07b9d3435bd4e7d51a586c6dd1b2eee12cc6b6c82e9a86acab833fcaa49e3ae9a3aee5643e3ee4d177709e63536c174d45acab833fcd692c6dd5aeab85b038dbbb75cdc2598d7d804d3516f53c69de1f73669dc210c96ec4c78cd6d4dcbece9eda7ad5c197f6dd83be2bdebc711f7f7384fdeafe384f53e27ac0f38617dc809eb234e581f73c2fa8413d6a79cb0485f06fa3927ac2f38617dc9096b3d27acaf38617dcd09eb1b4e58df72c2fa8e13d6064e58df73c2fa8113d68f9cb07ee284f53327ac5f38616de484b58913d6af94b042699cb014272c8f13568813563a27ac0c4e58999cb0ea71c2aacf09ab0127ac869cb01a71c26acc09ab0927ac6d7cbf3f28c76c0d3d6af7891eb3728595dacad556aeb1f2292bdfb3729d95ef5bf981951f5af991951f5bf989959f5af999959f5bf985955f5ab9decaafacfcdaca6facfcd6caefacdc60e5f756fe60e58f56fe64e5cf56fe62e5462b3759f96b8d0ca559a9acf4ac0c59996e6586959956d6b3b2be950dac6c6865232b1b5bd9c4ca6dec6e5a685b096df787bb700f5b2cefd87fb76dfcdf359550333f1ca539a7ffb6e084b53d27ac1dc0b0205be9ea57f11a60f8b564e4e73511af2586df8e9c6ed58a13d64e94de1015af0cc3af35a7d977e684b50b27ac36944e6afe3b04c36f574a7e79e29d82e1d796d3ad76e384b53b27ac769cb0f6e084b52727acf69cb03a70c2da8b1356474e587b73c2eac409ab3327ac2e6858a9dc37101e67bfc688773184dc3e2993ebe187cdf7f5c3e6292acc52106a5d19a941eed5096531520b41a86533524b8750cb61a49601a1d68d915a26845a77466a7d21d47a3052335b1910723d39c9b58090ebc5496e7b08b9de9ce4768090db8f935c4b08b9fd39c9ed0821770027b9561072077292db0942ee204e72ad21e40ee624b733845c1f4e72bb40c8e572926b0321d79793dcae1072fd38c9b58590ebcf496e3708b9019ce47687901bc849ae1d84dc204e727b40c80de624b72784dc104e72ed21e48672926b0a21770827b90e1072877292db0b42ee304e721d21e4f238c9ed0d21378c935c2708b9e194e4bc7208b9119ce42e80901bc9e9969d21e4467192eb0221773827b97d20e48ee024b72f84dc918ce4ea41a81dc548ad3e84dad18cd41a40a81dc348ad2184dab18cd41a41a81dc748ad3184daf18cd49a40a89dc0486d1b08b51319a96d0ba1761223b5ed20d44e4e9d5a45759a298e6a0e304a285b423912ea26a1ee12ea21a19e12ea25a1de12da4f42fb9bcd76b3256d366ecdf6a6d904345b656643c96cbb98cd09b3846f16bacd72b05934354b8b6601ce2c5399c51cb3e4611606ccf4d94c32cd54cc4c584c596f8a5f53229a42ca141c666036039849f426219ac46102cc38a2e93043ecff00", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -471,7 +425,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d077c54c5f6cedc4d42b7808a88228a8248cb2621092a42e8cd50f5a94f7d06b2c168486208088aca2a62d7644353b1d2120105010505a52aea1c7b43114101151bf60afe4f6681072b0c81fd16ce7fdff5f7eecd5b277e99efbb67cecc3de7eccc388addb0d679dd3fa7436ee6a0ab3ae48fe8322c6f50c7ccdc5cffb47ee9195d3b97046295a531ced618affc8fa717e6145d31c4579433a8b4b824b0a67d52424a72b22f35d1e74df2662624b61998d63a21b9f5c094346f9ab7755aebacc4b4a4245f5a725a6a9b816d5213da7893937cdeecd66d92b21382ff1cb7a67d4298ffe03b555762a78e97d8a97a123b7582c44ed597d8a9132576ea24899d6a20b153274bec5443899d3a4562a74e95d8a946123b759ac44e9d2eb1538d2576aa89c44e9d21b1534d2576ea4c899d6a26b153cd2576aa85c44eb594d8a956123b9500e8d43fdfe9cbfaf8b27c85437d79a56b631a068ed6db03b5f9aac3d7317c1dcbd7717cd5e5eb78beeaf175025ff5f93a91af93f86ac0d7c97c35e4eb14be4ee5ab115fa7f1753a5f8df96ac2d7197c35e5eb4cbe9af1d59caf167cb5e4ab155f097a7bf38037112f5c92c4a7992cb153ad25762a4562a75225762a4d62a7da48ecd459123b75b6c44e9d23b1536d2576ea5c899d6a27b153ed25762a3de2cbaba3025e5ee624f195cc576bbe52f84ae52b8daf367c9dc5d7d97c9dc3575bbecee5ab1d5fedf94aaf581e75e88827de296ce2c9f84e750ebb535eebd3280d74624d3b0797bb31812e5dfd333a14e6e4e6e60c1e3fc13fbd7f4edee05c5f9049b8dde802b0ab69e98585992327941617870fe6824408c47d4aff2f9ed2aec15d0cf07b40b09df6b356a5bbcfcd0571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017248a414afebb1f6db7ee3d7af63a2fa3779fbefdfa0f38ff827f5d78d1c5ffbee4d2cbfe7379e6c04159beecc157e45c7955ee90bcfc82ab0b87160d1b7ecd8891d75e37eafa1b6ed4a3b55fdfa46fd663f42d7aacbe55dfa66fd777e83bf55dfa6e7d8fbe5717eb121dd0a57a9c1eaf27e8897a92be4fdfaf1fd093f583fa21fdb07e443faa1fd353f4543d4d4fd73374992ed78feb997a969ead9fd04fea397aae7e4acfd3f3f502fdb47e462fd48bf4b3fa39bd582fd1cfeb17f452bd4c2fd72bf44abd4abfa85fd2abf5cbfa15fdaad69af46bfa75fd867e53bfa5dfd6efe877f57bfa7dfd815ea33fd41fe9b5fa63bd4e7fa2d7eb0dfa53fd99dea837e9cdfa73fd85fe526fd15fe9aff537fa5bfd9ddeaabfd73fe81ff54ffa67fd8bfe55ffa67fd77fe83ff55f7a9bdeaeff2615434a9172487948c5928a23154faa0aa9aaa4aa91aa4eaa06a99aa46a913a82d491a48e227534a9daa4ea903a86d4b1a48e235597d4f1a4ea913a81547d5227923a8954035227936a48ea1452a7926a44ea3452a7936a4caa09a9334835257526a966a49a936a41aa25a956a41248794925924a22954caa35a91452a9a4d248b5217516a9b3499d43aa2da97349b523d59e543aa90ea43a92ea44aa33a92ea4ba92ea46aa3ba91ea47a92ea45ea3c5219a47a93ea43aa2fa97ea4fa931a40ea7c521790fa17a90b495d44ea6252ff267509a94b495d46ea3fa42e2795496a20a941a4b248f94865931a4cea0a5239a4ae247515a95c524348e591ca275540ea6a5285a486922a22358cd47052d7901a416a24a96b495d476a14a9eb49dd40ea4652a349f949dd44ea66526348dd426a2ca95b49dd56bc36e668ff94f3f28707e2e3823fe362833f633dc19f1e27f8d351c19f2ac63fad637eded0a2404c4998a3cb9b9c15c4ac121ffc59b5ca4eec6a25618fdc949d58d5c3efa7d73fb34b7ea12f67705ec5fef9a565837d4519f945bea125fef26ebecc02e320026cc3e993fcb3fbf906e70c2df21576cfcbf28d50219fabedfe1f38f1bb7ff2c487fc6e6cc8e7b890cfd577ffaf7924a50745ac5963c783aae99fda63d890829223839f63d4d4fe45f9054bfde59d720a7d838a7286fbfc657d87e517e5f8f28ac66336f9ef76789db677e7ff217507a9db975aceeee6e686d6e63bf4ba3d8f7328051ce7d00da031f73c0051087dfa0842a020b9834449ccde25d19d90bedc15beceb6d106102bfc0e82c6db9dac967dbcdd651f6f77aa483aa60c19ab495e71dc43ea6ebb50772b6bf33d7a1b7edc65401cd3dd01884268c714808c358c4bb91770a08f5872c5d14cae249ac905a2995c6934931b8726276919371ed29709612f70bcd297715ed0326e3cab8558e878ad4b9809f6a5e0f8882e050788590a4e2235d1be149c685f0a4e8ac452700064293811b2149c24732988714bf7813d7709609ee3506629c6a7dd0f7e74b2d83d10cd863959e67a0943ee4181a38edf9cf9e50963990f091c77487e0f47f3c87b249a47dea302471e67eceec5d8e56302c71d8edd94681e7553a379d44d1338ea385b3e0e6397d3058e3a1cbb19d13ceacaa279d4950b1c75dd39868db1cbc7058e3a1cbb99d13cea6645f3a89b2d70d4f5e2e40ac62e9f1038ea70ec9e8ce65137279a933473217d792aecf445a2f4244d2228493397d58a7c92e6297b9266ae8ac470c3d8d23c91313ecead3d093145cf2522637cb3798ac2f0bb546669e27c4466cc73090445a8440ba25922492eee69812eae1f2f743073ed33021d1c8eddc26836cc4552e7de873173d3e522e7de0739f187e197297362791632255c0e41112ad173d12c912417b758a48b9bc8e963ccfcb444a48bc3f17b3e9a8df305a9f3ef4cccfc9425d238cb392982e1e79339b92c854c0b591014a1122d8b668924b9b8e5025d5c6f4ead6166a715021d1c8eddca6836cc5552e7de1998b9e90a9173ef3452d331fc72644e2c2f42a6842b202842257a299a2592e4e2560b74717d49956166a797053a381cbb57a2d9305f953af74ec1cc4db922e7de47493d86e13744e6c4a22153422e0445a84414cd12497271af097471fd494dc5cc4eaf0b747038766f44b361be2975ee7d00333715889c7bef23753f86dfd5322796b7205342010445a8446f47b344925cdc3b025d5c1f529331b3d3bb021d1c8edd7bd1bcd3e5fb90be7c10765d7a92f4eafb2450f5fdfbac56e4abef3fb057dfbf1f91ea7b8c2dad11b91a9ccb2faa98d55291c8d5e0ab1cabc0f01b26d35d7e0859a4144150844af451344b24c9c5ad95eae2dec0b88011225ddc6b1c24c2f01b2973fc7e0c197923202842255a17cd124972719f4875712f615cc028912e6e15a91731fcae97397ed74346de28088a50893644b344925cdca7525ddc2b1817305aa48b5b4dea650c3fbfccf1fb1964e48d86a008956863344b24c9c56d92eae2dec6b88031225ddc9b9cbbc4f0bb45e6f8dd0c19796320284225fa3c9a2592e4e2be90eae2dec3b880db44bab87738698ce177bbccf1fb2564e4dd0641112ad196689648928bfb4aaa8b5b867101778974712f905a8ae177b7ccf1fb3564e4dd0541112ad137d12c912417f7ad5417b712e3028a45bab8e5a45660f895c81cbfdf41465e310445a8445ba35922492eee7ba92e6e01c6058c13e9e2e6919a8fe1375ee6f8fd0132f2c64150844af463344b24c9c5fd24d5c52dc4b88049225ddcd3a49ec1f0bb4fe6f8fd1932f2264150844af44b344b24c9c5fd2ad5c53d8771019345bab845a49ec5f07b50e6f8fd0d32f2264350844af47b344b24c9c5fd21d5c53d8f71018f8874718b492dc1f07b54e6f8fd1332f21e81a00895e8af2896a86294003c1ccf039851325524bf5f792980e1374da6896f8318e754080ae26ce4191d0a73727373068f2ff14fef9f933738d717fcca7bd8bd53dbc27f80a64f430a727da4b6178ff397f71836a4a07b76467e5120c6e39fd6313f6f68514095005498dd21272fb37064971c5f6e56ef827131533ae50c573153fb17e51760be2b8f9f6fb7b1269807f577f8e32232fcfe46671d319b39383161772b310282f1d4f20dc6f596895c607e45ea6b0cbf7291538ba32093421904a55ca409b0897f8e31815922f96d22b519c36fb64c137720c6390b82325baa896fc098c01c91fc3e21b51ec36fae4c13f7408c730e0465ae5413ff116302f345f2fb9ed40f187e0b649a782cc43831c7112f906ae21f614c60a1487e6b487d88e1b748a689c7418c73210445a844f19830a69860e13ff72b2cebe3cbf2150ef5e5954e0cf05bbfdece7765ee8eb97bcc3dd6dce3cc3d5e6f8fe11f55c8a96ac50b04ba98dfaf12fcfd6ae4548f4cb0f92fcc285d2c32d8fc07276530fc96c81c623520fe6331046589e460b35303196c766abac1e610795913cc83aa2531d85cc1af96d060f3115283cd5b31ae77a9c805eeb7a4bec3f05b26736a39123229608ed55d26f51d6e0bc604568ae4f705a92f31fc56c934f1a320c6b91282b24aaa896fc498c06a91fc3e25f51986dfcb324dfc688871ae86a0483c7cd298f82f1813d022f9fd44ea670c3f9269e2b521c689390791a49af83a8c09bc2192df5a521f63f8bd29d3c4eb408cf30d088a50898ec18431c5040bf7176c3ec284878f34f7a3ccfd6873af6dee75ccfd9860f0f858728eab54b0f9d8e0efd725e7f87f3ea2702da736e431d783d8f03b226dd894ad002a7b202808892217cdad078de69ee0467343e4654d300faabec8682ef3ab5f1c091f106ed7ea409ce489102729f3544153f804a80d83a0bc27da499e08759227b94e32445ed604f3a01a887492ccaf41714456b253d2333a95f242b3bee25b0345cec99178236818655fc48297473827b34898f7e60f244ea64c509009ac112991671a04e5038815899408f3de7a0a44e6b53297642b31494208ca5ad14bb253a04bb253dd255988bcac09e6413512b924637e8da2f8bdf53488935c27d349aec6a4992128eb443bc9d3a04ef274d74986c8cb9a601e5463914e92f9358eec7b6ba38af7d6c6fcdeda2412efad6744594d37febdb5098b84796f5d2ff3bdb5892013d820f3bd750904653dc48a10129577ca29f40d2aca19eef397f51d965f94e3cb2b1a5f3a0eb6f107aca81bb65507ac0c1be0ec2b37577bedcde49c494ed3a57b9938a6f54bcfe8dab984678da623accd67eab191587b96630ad521281b652ecfcb30df5580a06c92392b350d40c608c4716f96392b61cefddd04b1a2cd119b9520ef79478bf1dacdc96966f7dacdec5ebb7924bc36a472db690619b3cde53aa4f0df269a41c6ec96f0753e081b4ab59263895a40246a0971485b22e7900292ec297c4b0039b616fce43051289bf76b69778e2dd43fbff41afea36a010e3d816237addccd5f2bf9005b4183bc096e9037445ed604f3a0bc2283bccccf2bf4fbf889e0efe3835c5352146f1e0a9228398a379f0449d43a8a372f04499412c59bdf81244a75374fdb9f4469ff639ba7259a6fa025997bb2b9b736f714734f35f7b4e0f7d3da907356a5becfd626f8fb6793734e241e51db285becef3be1edad4878b7e584f7b991d0b15dd49bfa1e3ab6631ddbfff7cd2ab0ebcd2a00db021db6d73862890da7b701b6cf7431f42534bd78b27fca79f9c3038e0afe54313b5f436310077fcfec925fe8cb199c576152a5b306fb8afafb0615fa8a7afa4696f8cbbbf9320bd20b0b3347063c2ae09fddcf3738676891afb07b5e966f840af9ececec561ca25b216fc7f153d2b3b23c71fea9bdf233b302b1f14129e263774812ef9f5af19e5e523df83946ed788dc6bcacb68ff04c15a8984eccdc921e9c5b3a90d331123eb15394f9c45deeae141b48ea02745098c8045b442784db9c6646f3049cdbfc0656b98128b888cec92e4a27391cad1f611be88ba2f5116cd37451b47e8700551cf9875d69752e7e30b87cf038115c71a5ecb9e29a97c7e9c6ec9119c3781ecbcef16571a2c1b7c7c22b5695ee77e1b5fb3a2d7e675fe323b00cab52b10ce3d5577019165725a84f95b81d3a55d9b10cab1191659857f4f70b3a436db18b9b7a0a919735c13ca8ae22534fccaf6bb1c47dd09c0ac93075f15fcb0c8a7a2128dd2011b7af45fbb86e501fd7ddf57121f2b2269807d543a48f637e3d22925e8f56c12adefa31e5033d65bade5eee49239534855e50d77b9eeb7a43e4654d300f2a43a427617e19422b9b7acbac6cea13c527558024ea1bc5271d8024ea17c53be58324ea1fc53bad83241ae0eed4bd3f89ceff1fdba9bbb7c917f731f7bee6decfdcfb9bfb00733f3f984dbe809c7f55aab2e982e0ef5f48ce459178441747d9627fdf153919151539172b72fe1d091d2f897a53df43c74b58c74b235ad9b40576b095c8caa68db0438db0f9b6cbdccaa6c35dd974e921a86cbad0cc2d9705e796ff907379247c626694f9c4ff9dca26b6884c91954d5b456d25139d935d944e72385abfc04e6b13456b1dec842e51b4fe8200559c2f8f5d690d742b9b42ff1155d994213aeb3f106a8b83dcd45388bcac09e64165894c3d31bf2c99954d19dc334c65d3b73283a21910141f24e2f6ad681fe783fab86cd7c785c8cb9a601ed460913e8ef90d165ad92453b08ab77e4cf9c01548bf52bcdb20ce29be3f72e1c827381cd92f332f2b7f8819c67bac8b952adef9873d1158e9c656ac749567c74ad7d911688cddf166a06277ac74ab86ac74d18e05b69d61f82674a5989d312337c15d099de0ae7227b810795913cc83ca15e9af995f6eb16803cf851af810d7c043e4654d300f2a4fa48133bf3ca10592f9120b2431336f8198993702cfedeab0bb95b467b702906ee542500a235240b3678d53bec91c17f0bd365f75cca71c73bfdadc0b8339e5a1e41455aabe6968f0f78791337c6ff5246212ac3b5399ee391dfb01aa48ae22c62a64d77884f5d496d2913a523ac223fe506de96fff2709352d84bf50f5eeb650bd26a245542129bdb9c1945ec7425f66d15e127a7baba4daadd9898fda3aaa3cd1af46d7405f8d46b8af4621f2b22698073552e4ab11f31b29338197c73dc324f0b6ca4ce0e54150ae8524f0b68af671d7427ddc75ae8f0b919735c13ca851227d1cf31b2534818710ecff4bd8f57a77dc85c8cb9a601ed40d52c3ae37144b9c7b31f1cd1b65c6372505124723b7dd188f756f0ef0db12e2bebe21256085ed501d60fc15e3e26e603780a85207f5a6b6a0bed411d4978a821f2141cf24335bcb116634e4db08c151c5f9173f393715af8da9178cc4c5ed2c40f21cfaaf28ccf10dc929ea9c37a8706401c7337be50fde239c19afc6eff7fb097b7ef6847c8edd1d2e6e57f8b36a04c29fd52ac29ff15577843fab54dbf9b7aa9700b2c7e641548bf1cf0cfecdee7945bd0bc6c754fcc5f6313b02aa3576fdc59a88a5fa345e9417fa0235aaecf9376b98bf59a32654c99d7fabea3efe96e157abda0e73acb523905c3702f571917b4df3435fd36e765fd342e4654d300f6a8cc8d734e6374676f9d74d5003bfc535f010795913cc831a2bd2c099dfd8e288ee6532a6622f93b18a9c5bad071bdf56d5da7cbbbdf90e7bf39df6e6bbeccd77db9befb137df6b6f2eb63797d89b03f6e6527bf3387bf3787bf3047bf3447bf3247bf37df6e6fbedcd0fd89b27db9b1fb4373f646f7ed8defc88bdf9517bf363f6e629f6e6a9f6e669f6e6e9f6e61955f71a8c4c0ac3e1b17f9ace2889d961b94d4699010947fe10c178adf7e0c9ed3a962a2b1c89a64124fa31c221ed848323f7d8ee2809072bd11488443f1d82a87fda81937b2404a54df6c148f42844a29f0f4d622439fbc0c83db43794d40395e8618844bf1cc2dc51ebca939bbc2f94e40391e8418844bf1ee2f45a42e5c8dd6f4349a8ac440f4024faed30642007ed9fdca4fda1a45646a2fb2012fd7e9892b4897672132a8392ba3f89264224fae330e6b153f74d6e5c6551526d128d8748f4e7614ef5a7ed9ddc01e5c3d3f62511a4e4cff397806a88847f922b3e409494ecbd498429d6dc26a46024614f72f71c0c4a62a844f74224da2ea8a626f1bfe4ee3a5894e4dd25ba1b22d1df92ca8e7cd9d9d94172778485b253a23b1112c5c64442a23001bdfce41028b1311089944c89b64150b6432472644af42704e52f88441e9912fd0e41f9032251ac4c897e85a0fc0691284ea6443f43507e8148142f53a21f21283f4124aa226d5dc42b235ed1dc0e91e807884455455a516c15084a558844d5644a140741898748545da6441e084a2c44a21a32255210140722514d9912d580a0d48448544ba644d52028d521121d215122cc77b06e83c87ca44c1baa0541390262430889ca3be514fa0615e50cf7f9cb07e4f7f2f5cbccca19518a291205ecf2b336a6211b142f46394ec741360e6872349223bf1cb6e51039c7b73997c089004eba70c684b3539c5ae2341ee7e038dfc9c94a4e0c73569733e89cfe26e711721e25e73172a69033959c69e44c276706a9186b7d5199bdfca8dcdefcb8bd79a6bd7996bd79b6bdf9097bf393f6e639f6e6b9f6e6a7eccdf3eccdf3edcd0beccd4fdb9b9fb1372fb4372fb2373f6b6f7ecedebcd8debcc4defcbcbdf9057bf3527bf3327bf3727bf30a7bf34a7bf32a7bf38bf6e697225220f822a440f025c844d0526681e04a4881e02a8844ad6416082e871408ae80489420b3407029a44070194422afcc02c1e72105822f40244a945920b8185220b804225192cc02c167210582cf41244a965920b8105220b80822516b9905824f430a049f81489422b340703ea440700144a2549905824f410a04e741244a93592038075220381722511b9905824f400a049f84487496cc02c1599002c1d91089ce965920f838a440702644a2736446c5cf86a09c0391a8ad4c89da4050ce824874ae4c89522128691089dac994a83504250522517b9912254150922112a5cb94c80b41498448d441a644ad20280910893aca2c102c8748d4122251279956d41182d2092251679912a543503a4024ea2253a2761094f61089baca94a82d04e55c8844dd644ad41582d20d22517799127586a0748148d443a244c7400a04cb2032f7946943dd21283d2036d4537881e031a002c1325e8c729c8e836c1cd0e46824477e396ccb21728e6f732e8113019c74e18c0967a738b5c4693ccec171be9393959c18e6ac2e67d039fd4dce52729691b39c9c15e4ac246715392f92f3d2fe0a0457dbcb8f5eb637bf626f7ed5deacedcd646f7ecddefcbabdf90d7bf39bf6e6b7eccd6fdb9bdfb137bf6b6f7ecfdefcbebdf9037bf31a7bf387f6e68feccd6bedcd1fdb9bd7d99b3fb137afb7376fb0377f6a6ffeccdebcd1debcc9debcd9defc79440a0437430a043f874c0457ca2c10dc082910dc0491e82a9905829f420a043f8348942bb340703da440700344a221320b04d7410a043f81489427b340702da440f0638844f9320b043f8414087e0491a8406681e0079002c1351089ae965920f81ea440f07d884485320b04df811408be0b9168a8cc02c1b72005826f43242a925920f806a440f04d8844c3641608be0629107c1d22d1709905821a5220481089ae915920f80aa440f0558844236446c5af81a08c80483452a644c32028c321125d2b53a2a11094228844d7c994e86a084a2144a2513225ca87a0144024ba5ea6444320287910896e9029d1551014c891deb137ca2c107c1922d195108946cbb4a21b2128a32112f9654a743d04e506884437c994e83a08ca28884437cb94682404e55a884463644a743304650c44a25b644ae487a0dc049168ac44898e851408ae86c87cab4c1bba058232166243b70a2f103c165420b89a17a31ca7e3201b0734391ac9915f0edb72889ce3db9c4be04400275d3863c2d9294e2d711a8f73709cefe46425278639abcb19744e7f93b39e9c0de47c4ace67e46c246713399bc9f9bca240700f43819cbae37c112ef981c991e8d697e1762b252112ddda126eb732b323d1adafc2ed569be4bdd4ae4defdf2d3db1754a606d4c56800da52adfbeacb86da9b87d55d59c8a6b4ece35a7eb9a1378cd29bde6245f73daaf3911d89c1a6c4e1636a70f9b138acd29c6e6a463731ab23931d99caa6c4e5e36a7339b139ccd29cfe62468735ab43951da9c3a6d4ea636a7579b13aecd29d8e6a46c739ab63971db6cca6736ee339bfb990d00cd2681662341b3d9a0d990d06c5a683636349b1f9a0d12cd268a66a345b319a3d9b0d16cea68367e349b439a0d24cd269366234ab359a5d9d0d26c7a6936c6349b679a0d36cd269c66a34eb399a7d9f0d3d4049aba41535b68ea0f4d8da2a96334b58ea61ed2d44c9aba4a537b69ea334d0da7a9f334b5a0a65ed4d4949aba53539b6aea574d8daba98335b5b2a69ed6d4dc9aba5c53bb6bea7b4d0db0a91336b5c4a6ded8f8b4afc9f9869c6fc9f98e9cade47c4fce0fe4fc48ce4fe4fc4cce2fe4fc4ace6fe4fc4ece1fe4fc49ce5fe46c23673b397f9327863c8a3c0e793ce489254f1c79e2c953853c55c9538d3cd5c953230263c103df391bd3ad5a32bb7584cc6ea1f7652e29052c87d4dfe454c3f03b4a223fa716397531fc8e966956b56576ab8e486bc823671886df3132653f5666b78e93d9adba228d94ffd713c3ef7891fc32c8b902c3af9e4cb33a4166b7eacbecd68932bb7592cc6e3590d9ad936576aba1cc6e9d22b35ba7caec5623992721d680903b0d128e9e2e4c226f905cd8e746792b5030e746cd1024913761d7f30feb2444ef4e14cc4988654224f2eefe81836c072b91777714cc4988e50224f286fe0b8e461e8c44de5014cc49888f1f6689bc7bfb971cb63d5089bc7b43c19c8438f3304ae4dd5703c7b70f44a27de070881c22d1acc32491d7d6c88980ca4ae4b5a1604eab9f7d1824f2ee0f9133269591c8bb3f14cc69f54f1c6289bc9541e4d4d2fe24f2560605735afd938750226f651139076793c85b5914cc69f5730e9144de0341e464e5be24f21e080ae6b4fab9874022ef81227256776f12790f1405735afd531196c87b30889cfe0e95c87b302898d3eae7455022efc12292f3ddee12790f16652b44a2f9326bf3e64150e643245a2053a2b91094a720123d2d53a22721287320123d2353a2d910942720122d9429d14c08ca2c88448b644a84d981fe718844cfca94680604a50c22d1731193c87bf088e47c0b91683a44a2c532ade83908ca6288444b644ab40882f22c44a2e7654af40c04652144a217644ab40082f23444a2a532257a0182b21422d13299122d81a03c0f9168794424f2868748ced74189bce1a17c03117a854c2b5a0641590eb1a215326b7a4e97d9adc632bbd504ddad40d8db94640f24e75608b933c226971209cd9b4642f370bd8282503b532235486585a799446a1e08b5e612a9414a863c2d24528b83506b29911aa416ced34a2235c879869e0489d4c8531342ce2b935c2d08b94499e48e80904b9249ee4808b96499e48e82906b2d93dcd110722932c9d586904b9549ae0e845c9a4c7290d3323d6d649283ecf4e5394b26b9e320e4ce9649ae2e84dc3932c91d0f21d75626b97a1072e7ca247702845c3b99e4ea43c8b59749ee4408b97499e44e8290eb20935c0308b98e32c99d0c21d74926b98610729d65923b0542ae8b4c72a742c8759549ae11845c3799e4209b1c78bacb24773a845c0f91e41c3f845c4f99e420db897b7ac934cbc61072e7c924d704422e4326b93320e47acb24d71442ae8f44725520d4fa4aa406d95fc6d34f22b56a106afd2552836c9ce41920911a66f3adf32552c324f92f90480d93e2ff97446a9804ff8512a961d2fb1749a48649ee5f1c3eb5e2b531bc383a933ccdc8d39c3c2dc8d3923cadc85351ae439e44f2249127993cad39d9ce29694edc727a9393809c2ae38412a75d3839c1217c0e7473389883a61c5ae4001c87a93898c3210f0e0cf0eb33bf64f2ab18bfb0f0b29e17bfbc44e485142f387862e6098c1d3d3b44761c3cc0d810f98131b1ff03", + "bytecode": "ed5d077c54c5f6cedc4d42b7808a88228a8248cb2621092a42e8cd50f5a94f7d06b2c168486208088aca2a62d7644353b1d2120105010505a52aea1c7b43114101151bf60afe4f6681072b0c81fd16ce7fdff5f7eecd5b277e99efbb67cecc3de7eccc388addb0d679dd3fa7436ee6a0ab3ae48fe8322c6f50c7ccdc5cffb47ee9195d3b97046295a531ced618affc8fa717e6145d31c4579433a8b4b824b0a67d52424a72b22f35d1e74df2662624b61998d63a21b9f5c094346f9ab7755aebacc4b4a4245f5a725a6a9b816d5213da7893937cdeecd66d92b21382ff1cb7a67d4298ffe03b555762a78e97d8a97a123b7582c44ed597d8a9132576ea24899d6a20b153274bec5443899d3a4562a74e95d8a946123b759ac44e9d2eb1538d2576aa89c44e9d21b1534d2576ea4c899d6a26b153cd2576aa85c44eb594d8a956123b9500e8d43fdfe9cbfaf8b27c85437d79a56b631a068ed6db03b5f9aac3d7317c1dcbd7717cd5e5eb78beeaf175025ff5f93a91af93f86ac0d7c97c35e4eb14be4ee5ab115fa7f1753a5f8df96ac2d7197c35e5eb4cbe9af1d59caf167cb5e4ab155f097a7bf38037112f5c92c4a7992cb153ad25762a4562a75225762a4d62a7da48ecd459123b75b6c44e9d23b1536d2576ea5c899d6a27b153ed25762a3de2cbaba3025e5ee624f195cc576bbe52f84ae52b8daf367c9dc5d7d97c9dc3575bbecee5ab1d5fedf94aaf581e75e88827de296ce2c9f84e750ebb535eebd3280d74624d3b0797bb31812e5dfd333a14e6e4e6e60c1e3fc13fbd7f4edee05c5f9049b8dde802b0ab69e98585992327941617870fe6824408c47d4aff2f9ed2aec15d0cf07b40b09df6b356a5bbcfcd0571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017c40571415c1017248a414afebb1f6db7ee3d7af63a2fa3779fbefdfa0f38ff827f5d78d1c5ffbee4d2cbfe7379e6c04159beecc157e45c7955ee90bcfc82ab0b87160d1b7ecd8891d75e37eafa1b6ed4a3b55fdfa46fd663f42d7aacbe55dfa66fd777e83bf55dfa6e7d8fbe5717eb121dd0a57a9c1eaf27e8897a92be4fdfaf1fd093f583fa21fdb07e443faa1fd353f4543d4d4fd73374992ed78feb997a969ead9fd04fea397aae7e4acfd3f3f502fdb47e462fd48bf4b3fa39bd582fd1cfeb17f452bd4c2fd72bf44abd4abfa85fd2abf5cbfa15fdaad69af46bfa75fd867e53bfa5dfd6efe877f57bfa7dfd815ea33fd41fe9b5fa63bd4e7fa2d7eb0dfa53fd99dea837e9cdfa73fd85fe526fd15fe9aff537fa5bfd9ddeaabfd73fe81ff54ffa67fd8bfe55ffa67fd77fe83ff55f7a9bdeaeff2615434a9172487948c5928a23154faa0aa9aaa4aa91aa4eaa06a99aa46a913a82d491a48e227534a9daa4ea903a86d4b1a48e235597d4f1a4ea913a81547d5227923a8954035227936a48ea1452a7926a44ea3452a7936a4caa09a9334835257526a966a49a936a41aa25a956a41248794925924a22954caa35a91452a9a4d248b5217516a9b3499d43aa2da97349b523d59e543aa90ea43a92ea44aa33a92ea4ba92ea46aa3ba91ea47a92ea45ea3c5219a47a93ea43aa2fa97ea4fa931a40ea7c521790fa17a90b495d44ea6252ff267509a94b495d46ea3fa42e2795496a20a941a4b248f94865931a4cea0a5239a4ae247515a95c524348e591ca275540ea6a5285a486922a22358cd47052d7901a416a24a96b495d476a14a9eb49dd40ea4652a349f949dd44ea66526348dd426a2ca95b49dd56bc36e668ff94f3f28707e2e3823fe362833f633dc19f1e27f8d351c19f2ac63fad637eded0a2404c4998a3cb9b9c15c4ac121ffc59b5ca4eec6a25618fdc949d58d5c3efa7d73fb34b7ea12f67705ec5fef9a565837d4519f945bea125fef26ebecc02e320026cc3e993fcb3fbf906e70c2df21576cfcbf28d50219fabedfe1f38f1bb7ff2c487fc6e6cc8e7b890cfd577ffaf7924a50745ac5963c783aae99fda63d890829223839f63d4d4fe45f9054bfde59d720a7d838a7286fbfc657d87e517e5f8f28ac66336f9ef76789db677e7ff217507a9db975aceeee6e686d6e63bf4ba3d8f7328051ce7d00da031f73c0051087dfa0842a020b9834449ccde25d19d90bedc15beceb6d106102bfc0e82c6db9dac967dbcdd651f6f77aa483aa60c19ab495e71dc43ea6ebb50772b6bf33d7a1b7edc65401cd3dd01884268c714808c358c4bb91770a08f5872c5d14cae249ac905a2995c6934931b8726276919371ed29709612f70bcd297715ed0326e3cab8558e878ad4b9809f6a5e0f8882e050788590a4e2235d1be149c685f0a4e8ac452700064293811b2149c24732988714bf7813d7709609ee3206629c6a7dd0f7e74b2d83d10cd863959e67a0943ee4181a38edf9c79098eb1cc87048e3b24bf87a379e43d12cd23ef5181238ff376a035fc6302c71d8edd94681e7553a379d44d1338ea384f5e82b1cbe902471d8edd8c681e7565d13ceaca058ebaee1c2cc4d8e5e302471d8eddcc681e75b3a279d4cd1638ea7a70ce0f63974f081c7538764f46f3a89b13cd499ab990be3c1576fa22517a92261194a499cb6a453e49f3943d4933574562b8616c699ec8181fe7d61e8698a2e7129131be0739f888e177a9ccd2c4f988cc98e712088a50891644b344925cdcd3225ddc440e616366db6744ba381cbf85d16c9c8ba4cebf5330f3d3e5228df3514e4260f865ca9c5c9e854c0b974350844af45c344b24c9c52d16e8e2fa722a0b333b2d11e8e070ec9e8f66c37c41eadc3b13333765899c7bcb392982e1e79339b12c854c09591014a1122d8b668924b9b8e5025d5c6f4ead6166a715021d1c8eddca6836cc5552e7de273173d31522e7ded99c1ac5f0cb9139b1bc089912ae80a00895e8a5689648928b5b2dd0c5f5e1043b66767a59a083c3b17b259a0df355a973ef0cccdc942b72ee9d466a3a86df1099138b864c09b91014a11251344b24c9c5bd26d0c5f5275586999d5e17e8e070ecde8866c37c53eadcfb00666e2a1039f7de47ea7e0cbfab654e2c6f41a68402088a5089de8e668924b9b87704bab87ea4266366a777053a381cbbf7a279a7cbf7217df920ecbaf424e9d5f749a0eafbf759adc857df7f60afbe7f3f22d5f7185b5a2372353897d402cc6aa948e46a701ea9f9187ec364bacb0f218b9422088a50893e8a668924b9b8b5525ddc428c0b1821d2c53d4dea190cbf9132c7efc790913702822254a275d12c912417f7895417b70ce302468974712f905a8ae177bdccf1bb1e32f2464150844ab4219a2592e4e23e95eae256625cc068912e6e39a915187e7e99e3f733c8c81b0d41112ad1c6689648928bdb24d5c5bd8d71016344bab837397789e1778bccf1bb1932f2c64050844af479344b24c9c57d21d5c5bd877101b7897471ef70d218c3ef7699e3f74bc8c8bb0d822254a22dd12c912417f7955417f712c605dc25d2c5ad22f52286dfdd32c7efd7909177170445a844df44b344925cdcb7525ddc2b1817502cd2c5ad26f532865f89ccf1fb1d64e4154350844ab4359a2592e4e2be97eae29ec3b88071225ddc2252cf62f88d97397e7f808cbc711014a112fd18cd124972713f497571cf635cc024912e6e31a925187ef7c91cbf3f4346de24088a50897e89668924b9b85fa5ba38c2b880c9225ddcaba43486df8332c7ef6f90913719822254a2dfa35922492eee0fa92eee0d8c0b7844a48b7b8dd4eb187e8fca1cbf7f4246de231014a112fd15c512558c12808723f51166944c15c96f0da90f31fca6c934f16d10e39c0a41419c8d3ca343614e6e6ecee0f125fee9fd73f206e7fa825f790fbb776a5bf80fd0f4694841ae8fd4f6e271fef21ec3861474cfcec82f0ac478fcd33ae6e70d2d0aa812800ab33be4e465168eec92e3cbcdea5d302e664aa79ce12a666affa2fc02cc77e5f1f3ed36d604f3a0fe0e7f5c4486dfdfe8ac236633072726ec6e254640309e5a36605c6f99c805e627a4d663f8958b9c5a1c059914ca2028e5224d804dfc1b8c09cc12c9ef2b525f63f8cd9669e20ec438674150664b35f11f3126304724bfef39e38be13757a6897b20c63907823257aa897f8e3181f922f96d22b519c36f814c138f851827e638e205524dfc778c092c14c9ef57cef860f82d9269e27110e35c0841112a513c268c292658f8cffd0acbfaf8b27c85437d79a51303fcd6afb7f35d99bb63ee1e738f35f738738fd7db63f8471572aa5af102812ee6f7ab047fbf1a39d523136c5e8719a58b45069bd792fa18c36f89cc215603e23f16435096480e363b3590c166a7a61b6c0e919735c13ca85a1283cd15fc6a090d361f2135d8bc11e37a978a5ce07e4aea330cbf6532a79623219302e658dd6552dfe1b6624c60a5487edf92fa0ec36f954c133f0a629c2b2128aba49af82f1813582d92df4fa47ec6f07b59a6891f0d31ced5101489874f1a13df8231012d92df17a4bec4f02399265e1b629c98731049aa89ff8531813744f2fb83d49f187e6fca34f13a10e37c03822254a26330614c31c1c2fd059b8f30e1e123cdfd28733fdadc6b9b7b1d733f26183c3e969ce32a156c3e36f8fb75c939fe9f8f285ccba90d79ccf52036fc8e481b36652b80ca1e080a42a2c84573eb41a3b927b8d1dc10795913cc83aa2f329acbfcea1747c20784dbb53a10277922c449ca3c55d0143e016ac32028ef89769227429de449ae930c919735c13ca806229d24f36b501c9195ec94f48c4ea5bcd0acaff8d64091737224de081a46d917b1e0e511cec92c12e6bdf903899329131464026b444ae4990641f90062452225c2bcb79e029179adcc25d94a4c921082b256f492ec14e892ec54774916222f6b8279508d442ec9985fa3287e6f3d0de224d7c97492ab31696608ca3ad14ef234a8933cdd759221f2b2269807d558a493647e8d23fbdedaa8e2bdb531bfb73689c47beb195156d38d7f6f6dc22261de5bd7cb7c6f6d22c80436c87c6f5d0241590fb1228444e59d720a7d838a7286fbfc657d87e517e5f8f28ac6978e836dfc012bea866dd5012bc30638fbcacdd55e7b33396792d374e95e268e69fdd233ba762ee159a3e9086bf3997a6c24d69ee598427508ca4699cbf332cc771520289b64ce4a4d0390310271dc9b65ce4a98737f3741ac6873c46625c87bded162bc7673729ad9bd7633bbd76e1e09af0da9dc769a41c66c73b90e29fcb789669031bb257c9d0fc28652ade458a21610895a421cd296c839a480247b0adf12408ead053f394c14cae6fd5ada9d630bf5cf2fbd86ffa85a80434fa0d84d2b77f3d74a3ec056d0206f821be40d919735c13c28afc8202ff3f30afd3e7e22f8fbf820d79414c59b8782244a8ee2cd274112b58ee2cd0b4112a544f1e677208952ddcdd3f62751daffd8e66989e61b6849e69e6ceeadcd3dc5dc53cd3d2df8fdb436e49c55a9efb3b509fefed9e49c138947d436ca16fbfb4e787b2b12de6d39e17d6e24746c17f5a6be878eed58c7f6ff7db30aec7ab30ac0b64087ed358e5862c3e9fd08db67ba18fa129a5e3cd93fe5bcfce10147057faa989dafa1318883bf6776c92ff4e50cceab30a9d259837d45fd7d830a7d453d7d234bfce5dd7c9905e985859923031e15f0cfeee71b9c33b4c857d83d2fcb3742857c7676762b0ed1ad90b7e3f829e959599e38ffd45ef9995981d8f8a014f1b13b2489f74fad784f2fa91efc1ca376bc46635e56db4778a60a544c27666e490fce2d1dc8e918099fd829ca7ce22e77578a0d2475013a284c64822da213c26d4e33a37902ce6d6e80556e200a2ea273b28bd2490e47eb73d806faa268fd0edb345d14ad8f20401547fe61575a9d8b1f0c2e1f3c4e04575c297baeb8e6e571ba317b64c6309ec7b2737c599c68f0edb1f08a55a5fb5d78edbe4e8bdfd9d7f8082cc3aa542cc378f5155c86c55509ea53256e874e55762cc36a446419e615fdfd82ce505bece2a69e42e4654d300faaabc8d413f3eb5a2c711f34a742324c5dfcd73283a25e084a3748c4ed6bd13eae1bd4c775777d5c88bcac09e641f510e9e3985f8f88a4d7a355b08ab77e4cf9404f99aeb7977bd248254da117d4f59ee7bade10795913cc83ca10e949985f86d0caa6de322b9bfa44f149152089fa46f149072089fa45f14ef92089fa47f14eeb208906b83b75ef4fa2f3ffc776eaee6df2c57dccbdafb9f733f7fee63ec0dccf0f66932f20e75f95aa6cba20f8fb17927351241ed1c551b6d8df77454e464545cec58a9c7f4742c74ba2ded4f7d0f112d6f1d28856366d851d6c25b2b2e917d8a146d87cdb656e65d3e1ae6cbaf41054365d68e696cb8273cb7fc8b93c123e3133ca7ce2ff4e65135b44a6c8caa68da2b69289cec92e4a27391cad2db0d3da44d1fa0b764297285aeb204015e7cb63575a03ddcaa6d07f4455366588cefa0f84dae22037f514222f6b8279505922534fcc2f4b66655306f70c53d9f4adcca0680604c50789b87d2bdac7f9a03e2edbf57121f2b22698073558a48f637e83855636c914ace2ad1f533e7005d2af14ef3688738aef8f5c38f2090e47f6cbcccbca1f6286f11eeb62a58a77fe614f0456bab1152b5de5d9b1d27576041a6377bc19a8d81d2bddaa212b5db463816d6718be095d296667ccc84d70574227b8abdc092e445ed604f3a07245fa6be6975b2cdac073a1063ec435f010795913cc83ca1369e0cc2f4f688164bec40249cccc5b2066e68dc073bb3aec6e25edd9ad00a45bb91094c28814d0ec59e3946f32c7057cafcd571df329c7dcaf36f7c2604e7928394595aa6f1a1afcfd61e40cdf5b3d899804ebce54a67b4ec77e802a92ab88b10ad9351e613db5a574a48e948ef0883f545bfadbff49424d0be12f54bdbb2d54af89681155484a6f6e30a5d7b1d09759b49784dede2aa9766b76e2a3b68e2a4ff4abd135d057a311eeab5188bcac09e6418d14f96ac4fc46ca4ce0e571cf3009bcad3213787910946b2109bcada27ddcb5501f779debe342e4654d300f6a94481fc7fc46094de02104fbff1276bdde1d7721f2b22698077583d4b0eb0dc512e75e4c7cf34699f14d4981c4d1c86d37c663dd9b03fcb684b8af6f480958613b5407187fc5b8b81bd80d20aad441bda92da82f7504f5a5a2e04748d033c9ccd67284190df93642705471fec54fce4dc56b63ea052371713b0b903c87fe2b0a737c43728a3ae70d2a1c59c0f1cc5ef983f70867c6abf1fbfd7ec29e9f3d219f6377878bdb15feac1a81f067b58af0677cd51de1cf2ad576feadea2580ecb17910d562fc33837fb37b5e51ef82f131157fb17dcc8e806a8d5d7fb12662a93e8d17e585be408d2a7bfecd1ae66fd6a8095572e7dfaaba8fbf65f8d5aab6c31c6bed0824d78d407d5ce45ed3fcd0d7b49bddd7b410795913cc831a23f2358df98d915dfe7513d4c06f710d3c445ed604f3a0c68a3470e637b638a27b998ca9d8cb64ac22e756ebc1c6b755b536df6e6fbec3de7ca7bdf92e7bf3ddf6e67beccdf7da9b8bedcd25f6e680bdb9d4de3ccede3cdede3cc1de3cd1de3cc9de7c9fbdf97e7bf303f6e6c9f6e607edcd0fd99b1fb6373f626f7ed4defc98bd798abd79aabd799abd79babd7946d5bd062393c27078ec9fa6334a6276586e93516640c2913f44305eeb3d7872bb8ea5ca0a47a26910897e8c70483be1e0c83db63b4ac2c14a340522d14f8720ea9f76e0e41e094169937d30123d0a91e8e743931849ce3e30720fed0d25f540257a1822d12f873077d4baf2e426ef0b25f940247a1022d1af8738bd96503972f7db50122a2bd10310897e3b0c19c841fb2737697f28a99591e83e8844bf1fa6246da29ddc84caa0a4ee4fa2891089fe388c79ecd47d931b575994549b44e32112fd799853fd697b277740f9f0b47d490429f9f3fc25a01a22e19fe48a0f1025257b6f12618a35b709291849d893dc3d078392182ad1bd1089b60baaa949fc2fb9bb0e1625797789ee8648f4b7a4b2235f76767690dc1d61a1ec94e84e8444b1319190284c402f3f39044a6c0c44222553a26d1094ed10891c9912fd0941f90b229147a644bf4350fe8048142b53a25f2128bf41248a9329d1cf10945f2012c5cb94e84708ca4f1089aa485b17f1ca885734b74324fa012251559156145b058252152251359912c54150e22112559729910782120b91a8864c891404c581485453a644352028352112d592295135084a75884447489408f31dacdb20321f29d3866a41508e80d81042a2f24e3985be414539c37dfef201f9bd7cfd32b3724694628a4401bbfcac8d69c806c58b518ed371908d039a1c8de4c82f876d3944cef16dce25702280932e9c31e1ec14a796388dc73938ce7772b29213c39cd5e50c3aa7bfc979849c47c9798c9c29e44c25671a39d3c999412ac65a5f54662f3f2ab7373f6e6f9e696f9e656f9e6d6f7ec2defca4bd798ebd79aebdf9297bf33c7bf37c7bf3027bf3d3f6e667eccd0bedcd8beccdcfda9b9fb3372fb6372fb1373f6f6f7ec1debcd4debcccdebcdcdebcc2debcd2debccadefca2bdf9a5881408be0829107c093211b4945920b8125220b80a22512b990582cb2105822b201225c82c105c0a29105c0691c82bb340f0794881e00b1089126516082e8614082e81489424b340f0594881e0731089926516082e8414082e8248d45a6681e0d39002c1672012a5c82c109c0f29105c009128556681e0539002c1791089d2641608ce811408ce8548d4466681e0139002c12721129d25b3407016a440703644a2b36516083e0e29109c0991e81c9951f1b32128e740246a2b53a2361094b320129d2b53a254084a1a44a27632256a0d41498148d45ea644491094648844e93225f24250122112759029512b084a0244a28e320b04cb2112b58448d449a6157584a0748248d459a644e910940e1089bac894a81d04a53d44a2ae32256a0b41391722513799127585a0748348d45da6449d21285d2012f59028d1319002c13288cc3d65da5077084a0f880df5145e20780ca840b08c17a31ca7e3201b0734391ac9915f0edb72889ce3db9c4be04400275d3863c2d9294e2d711a8f73709cefe46425278639abcb19744e7f93b3949c65e42c276705392bc95945ce8be4bcb4bf02c1d5f6f2a397edcdafd89b5fb5376b7b33d99b5fb337bf6e6f7ec3defca6bdf92d7bf3dbf6e677eccdefda9bdfb337bf6f6ffec0debcc6defca1bdf9237bf35a7bf3c7f6e675f6e64feccdebedcd1beccd9fda9b3fb3376fb4376fb2376fb6377f1e9102c1cd9002c1cf2113c195320b0437420a04374124ba4a6681e0a79002c1cf2012e5ca2c105c0f2910dc00916888cc02c1759002c14f2012e5c92c105c0b2910fc182251becc02c10f2105821f41242a905920f801a440700d44a2ab651608be0729107c1f2251a1cc02c177200582ef42241a2ab340f02d4881e0db10898a641608be0129107c1322d130990582af410a045f8748345c6681a08614081244a26b641608be0229107c1522d1089951f16b20282320128d9429d13008ca708844d7ca94682804a50822d1753225ba1a8252089168944c89f22128051089ae9729d110084a1e44a21b644a7415040572a477ec8d320b045f8648742544a2d132ade84608ca6888447e99125d0f41b90122d14d3225ba0e82320a22d1cd32251a0941b91622d1189912dd0c41190391e8169912f921283741241a2b51a263210582ab2132df2ad3866e81a08c85d8d0adc20b048f051508aee6c528c7e938c8c6014d8e4672e497c3b61c22e7f836e7123811c04917ce9870768a534b9cc6e31c1ce73b3959c98961ceea72069dd3dfe4ac276703399f92f319391bc9d944ce66723eaf2810dcc35020a7ee385f844b7e607224baf565b8dd4a498844b7b684dbadccec4874ebab70bbd526792fb56bd3fb774b4f6c9d12581b93156043a9cab72f2b6e5b2a6e5f5535a7e29a9373cde9bae6045e734aaf39c9d79cf66b4e0436a7069b9385cde9c3e68462738ab139e9d89c866c4e4c36a72a9b9397cde9cce6046773cab33909da9c166d4e9436a74e9b93a9cde9d5e6846b730ab63929db9ca66d4edc369bf2998dfbcce67e660340b349a0d948d06c36683624349b169a8d0dcde687668344b389a2d968d16cc668366c349b3a9a8d1fcde690660349b3c9a4d988d26c566936b4349b5e9a8d31cde69966834db309a7d9a8d36ce66936fc343581a66ed0d4169afa4353a368ea184dada3a987343593a6aed2d45e9afa4c53c369ea3c4d2da8a9173535a5a6eed4d4a69afa5553e36aea604dadaca9a73535b7a62ed7d4ee9afa5e53036cea844d2db1a937363eed6b72be21e75b72be23672b39df93f303393f92f313393f93f30b39bf92f31b39bf93f307397f92f31739dbc8d94ecedfe489218f228f431e0f7962c913479e78f254214f55f254234f75f2d488c058f0c077cec674ab96cc6e1d21b35be87d994b4a01cb21f53739d530fc8e92c8cfa9454e5d0cbfa3659a556d99ddaa23d21af2c81986e1778c4cd98f95d9ade36476abae4823e5fff5c4f03b5e24bf0c72aec0f0ab27d3ac4e90d9adfa32bb75a2cc6e9d24b35b0d6476eb6499dd6a28b35ba7c8ecd6a932bbd548e649883520e44e8384a3a70b93c81b2417f6b951de0a14ccb951330449e44dd8f5fcc33a09d1bb1305731262991089bcbb7fe020dbc14ae4dd1d05731262b90089bca1ff82a3910723913714057312e2e3875922efdefe25876d0f5422efde50302721ce3c8c1279f7d5c0f1ed0391681f381c22874834eb3049e4b5357222a0b212796d2898d3ea671f0689bcfb43e48c496524f2ee0f05735afd138758226f651039b5b43f89bc9541c19c56ffe42194c85b5944cec1d924f2561605735afd9c432491f740103959b92f89bc07828239ad7eee2190c87ba0889cd5dd9b44de0345c19c56ff548425f21e0c22a7bf4325f21e0c0ae6b4fa791194c87bb088e47cb7bb44de8345d90a9168beccdabc791094f9108916c894682e04e52988444fcb94e84908ca1c8844cfc894683604e50988440b654a341382320b22d12299126176a07f1c22d1b332259a0141298348f45cc424f21e3c2239df42249a0e9168b14c2b7a0e82b21822d11299122d82a03c0b91e87999123d0341590891e80599122d80a03c0d9168a94c895e80a02c8548b44ca6444b2028cf43245a1e1189bce12192f37550226f7828df40845e21d38a9641509643ac6885cc9a9ed36576abb1cc6e3541772b10f63625d903c9b91542ee8cb0c9a54442f3a691d03c5cafa020d4ce94480d5259e16926919a0742adb9446a9092214f0b89d4e220d45a4aa406a985f3b492480d729ea127412235f2d48490f3ca24570b422e5126b92320e49264923b12422e5926b9a320e45acb247734845c8a4c72b521e4526592ab03219726931ce4b44c4f1b99e4203b7d79ce9249ee3808b9b36592ab0b21778e4c72c743c8b59549ae1e84dcb932c99d0021d74e26b9fa1072ed65923b11422e5d26b99320e43ac824d70042aea34c722743c8759249ae21845c6799e44e8190eb2293dca910725d65926b0421d74d2639c826079eee32c99d0e21d7432439c70f21d7532639c876e29e5e32cdb23184dc7932c9358190cb9049ee0c08b9de32c9358590eb23915c1508b5be12a941f697f1f49348ad1a845a7f89d4201b27790648a486d97ceb7c89d43049fe0b2452c3a4f8ff25911a26c17fa1446a98f4fe4512a96192fb17874fad786d0c2f8ece244f33f234274f0bf2b4244f2bf25494eb9027913c49e449264f6b4eb6734a9a13b79cdee42420a7ca38a1c469174e4e70089f03dd1c0ee6a02987163900c7612a0ee670c8830303fcfacc2f99fc2ac62f2cbcace7c52f2f117921c50b0e9e9879026347cf0e911d070f3036447e604cecff00", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { diff --git a/yarn-project/noir-contracts/src/examples/public_private_contract.json b/yarn-project/noir-contracts/src/examples/public_private_contract.json deleted file mode 100644 index 280ac6f2a01..00000000000 --- a/yarn-project/noir-contracts/src/examples/public_private_contract.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "name": "PublicPrivate", - "functions": [ - { - "name": "constructor", - "functionType": "secret", - "parameters": [], - "returnTypes": [], - "bytecode": "cdcfc74e1b011485619c00e985de7bef339e197b86ea826daa0183e9cd760605c549a48848d9fa0dc0c92b6493555e078987c9227b363e8bff6e8f74f57fbf0a0f55d9d2df583157f814fbfa23f9fd4b219e2b164bbf33d1742a7157ae0e3c32d63c36d6064a7fa2dfae6f3e7ef66fae0b3f6fefcaf711cb08d9b61f0efaa665e68ca097771dc376f221d7744dc7753e045dcbf25ddb0d7b792f6c78a66df9e695e35957c6ffabbb8f18159e3eaa9e18d5408c6a24463511a39a89512dc4a85662541b31aa9d18d5418cea24467511a3ba89513dc4a85e62541f31aa9f1835408c1a24460d11a386895123c4a85162d418316a9c1835418c9a24464d11a3a6895133c428831865aaa3cae58a3f9a01012c48843d11c02c22eca900661361d502984384d508602122ac56000b13617502984b84d50b601e11d62080cd12618d02d81c11d62480cd1361cd02d80211d622802d1261ad02d81211d626804588b076012c4a847508603122ac53008b13615d02d83211d62d802588b01e012c4984f50a602922ac4f005b21c2fa05b055226c40005b23c20605b075226c4800db20c28605b04d226c44004b1361a302d816113626806d1361e302d80e113621806588b049016c97089b12c0f688b069012c4b84cd0860fb449821801d1061a6007648843d13c08e88b0e702d83111f642003b21c25e0a60a744d82b01ec8c087b2d809d13616f04b00b22ecad00764984bd13c07244d87b012c5f39ecf6a1ca0c5ab6130abbdeecdcfcc2e252241a8b2f2792a995d5b5f58dcdf4d6f64e66772fbb7f7078747c727a767e7199cbff03", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - }, - { - "name": "getBalance", - "functionType": "unconstrained", - "parameters": [ - { - "name": "owner", - "type": { - "kind": "struct", - "fields": [ - { - "name": "x", - "type": { - "kind": "field" - } - }, - { - "name": "y", - "type": { - "kind": "field" - } - } - ] - }, - "visibility": "private" - } - ], - "returnTypes": [ - { - "kind": "field" - } - ], - "bytecode": "ed9d797454f51dc5f3b2920542d877c296b093c93a614fd8f77d5fb34cc24048623241b0c5766cb1c5169b4c848a2db62841c062c5165b6cb1608b6decf759164103010501050501050505fa4a4a8b9c9ef9a373e7f4f6777e1c3de31cf0f2ee9ddffdbcef7bbf37f0841938b1d6e8edde9651e2742d5aea7039732acb2b3c358393125293931d69890e5b922d2b21313ddb9e92909c929d6ab7d96d29f694dc447b5292c39e6c4f4bcf4e4f4b48b72527396c7929e9497909753f826a0627f8f623197f50c13e1f94cdfd62664156ce92cca2e5c3cb0a7386641514b8b74c74e43a4a4a1d8595959e20b9e509b6fe35e456802724d4fd5c6689b3a0c099bf769d7bf31467617e81a3ce89af8711e2b34482bb2aa3a4246bc5bacaf272dfc5b4889f44f4a7f47ff129fdabdcbe8b6521c5eeae9fda806afdb969112da245b48816d1225a448b68112da245b48816d1225a448b68112da245b48816d1225a448b68112da245b48816d1225a448b68112da245b48816d1225a448b68112da245b48816d1225a448b68112da245b488022215fffede5858bdf088c8a8fa0da21bc6346adca469b3e62d5ab66adda66dbbf6b11d3a76eadc252ebe6bb7ee3d7af6eadd27c19698949c929a664fefdbafff8081830667640e193a6cf88891a3468f193b6efc848993264f993a6dfa8c99b366cf993b6ffe828559d939b98ebcfc45cec54b0a961616153f5052ea2a5bf6e0f2150f7de39b2b1ffe967c5bdcf2887c47be2babe451f99e7c5f56cb63f203f9a1ac91c7e547522e15e2914a7942d6ca3af9b13c29ebe529f989fc5436c8d3f233f9b96c9467e459d92455b2599e932db255b6c9f3f20bd92e2fc82fe545d9212fc9afe4d7b2535e96dfc86f6597bc22bf93dfcb6e7955fe207b64afbc267f943fc93e795dfe2c7f916a7943fe2a22a6bc297f2baf0d88713f3bae68992734a4ee3524b8ee3538a8ee3528b0ee35d0a87b3502dc55438a0a4b5d9e800a5f3fa3dc943acdb0d0bad77a6177b5c37dd64e48bdab15e1b3564ebafbf9e145250e677ee13fbe2d5db925dfe11a5fe4729456b8b78e746415df59669e48a97ed2bd7db223df59ea72948c2acc752c37ee7b1f7eefaf0f0cbdf75d50e87dbf36f8bef721f7bd8fb8f7ffae27d575114645fef3638a726f1a5db6b4b822baee7d80b1698aaba8788f7beb50678923c7e55ce6706f995456e4723a0a5d6b315fe80efbdf16df76f73fe480ecdff31fbee45e353963fc8861151ed91febed670fc889af7f6dbf12f0b5fd3040beb2df830807f0855c783c77acfd9722897977f33988389243be67ecad64be27e5fbf1615a76500e796dd921af2d3b687c7d157910d94016c05b803f6183b42087114772c4e7b563232f880d5390c3720431c8dabcd5e888d7921df647c9208be86d70c92a2a7d17ac276f4116e03be0332c93b71af4f4c0b3248faacbfd638823a9f5198989e4dc4fc470ff98d4fa9dfbb55eb97fcc1fdc872ca2e384dcb74ed4358815681a2b08c92f6fcb3b18770f515e399e005c595b9f1c448533a177554e88076def11a2ad811c859c5b4f12820de5ed94ba4bf27d7547dad3882339e3f3b497443ed2266146dad372c6ef23ed19af23ed697f8cb49045749671a43d26ef6286be958c23ed71398171f730e5c0f60164d45a0951e14ce8439513e241db394eb49dc294dfcd88b6f7e424c6dd2394c53d0fa99c1ba2c299d0472a27c483b68f09d1d644de875c365c20041bcadb457597e427ea5ead5f421cc9659f2f6493c9afd6933157eb97e4b2dfafd62f7bbd5abfe48fab75c822bac238d29e960f3143df2ac691f6ac7c8071f728e5c0f62964d45a0551e14ce8339513e241db554eb47d8429ff6a46b49d93f318778f5116f71aa472ab212a9c097dae72423c68fb82136d1731e55fc388b68fe502c6dde394c5bd0ea9dc1a880a674237544e88076d5f12a2ad957c02b923f21521d850de6eaabb246fa97b23f236e49416e0f34dba14f23b9129983b91b7adacfc7d2bd2fa2dbcde8bbced8f7b91987564308eb597e433cce057c138d65e914f31ee3c8c439b690442e6ad0a880a6944412a474444b7604eba7d8ee9ff5a46ba5d956b1877eb38ab1b0229dd5a880a6944a12a474444b7304ebaddc0f47f3d23ddbe90eb18774f7156b71ea474eb212aa41185ab1c1111dd2238e97613d3ff0d8c74fb52bec2b87b9ab3ba9190d26d80a8904614a572444474ab4f48b758b985a97f0342b8c1cc452bbc2a1b2abbed621a3190841af9bc25914abeef920ad977b1f2b6c2f2ffc64ba358af3f1de3879d17d4526acc38e05adb6541184e6e243c0958fb5dd6fe04c6df339c035c13c8e8b511a2421a5153952362225c3352c2856208504549b8606b8f02e36f33677d9b438a570551218da885ca113111ae2529e1c23104d84a49b8306b9f02e36f1b677d5b418ab715a2421a516b952362225c1b52c2456108b09d927011d65e05c6df0b9cf56d0b29de76880a6944ed548e888970ed4909178d21c00e4ac2d5b7768930fe5ee2ac6f2ca4783b202aa4117550392226c27524245c9cb5db8801402742c0e1dc75567961765178bf390e9250bccf5bb169e4fbcd69a0fd66ab72f1fedf6f8ef7bedf1ce797fd66cc52ea4a7816b8f39840530c2977520eba8dad2d598cbf9739a7b86e90f96b27448534a2ee2a47c484b81eac886b8141c02e4ac435b3f66431fe5ee1ec6f4f48f37641544823eaa572444c88ebcd8ab8d61804eca6445c4b6b5316e3ef55cefef681346f37448534a204952362429c8d1571ed3008d84b89b836d6ae2cc6df6b9cfd4d84346f2f448534a224952362425c322be23a6010b08f1271edad6d598cbfd739fb9b0269de3e880a6944a92a47c484b83456c475c620a09a12711dadfd708cbf3738fb6b8734af1aa2421a51baca113121ae2f21e27a9a46170c00fa11020ee7aebfca0b7380c2cfd50c842434c8e7474eece4cfd5d841cfd50cb4c2f2ff733583bc3f5733d02fcfd56096d260ca4137ce34ba634869520eba5d4da31bc6df9b9c535c0664fe32212aa41165aa1c1113e286b022ae170601072811d7c3347a62fc1de4ecef5048f30e405448231aa672444c881bce8ab8040c020e5322aeb769f4c1f83bc2d9df1190e61d86a890463452e5889810378a1571491804d45022cefa2711e3ef28677f47439a570351218d688cca1131216e2c2be2523108384e89b864d348c1f83bc1d9df7190e61d87a89046345ee588981037811571e918049ca4445c9a69d831fe4e71f67722a47927212aa4114d52392226c44d66455c7f0c02ce5022aeaf69f4c3f83bcbd9df2990e69d81a890463455e5889810378d107189a631000380e98480c3b99ba1f2c29ca9f0a383b32009cdf6f9a9ba74f24707d3418f0eceb2c2f2ffa383b3bd3f3a38cb2f8f0e6296d21cca4177a069646248798e72d01d6c1a19187fe739a7b8b990f9eb1c448534a2792a47c484b8f9ac881b8641c0054ac40d318da1187f1739fbbb00d2bc0b1015d28816aa1c1113e2b2581137128380cb94881b6e1a2330feae70f6371bd2bccb1015d28872548e880971b9ac881b8341c0554ac48d328dd1187fd738fbeb8034ef2a448534a23c952362425c3e2be2c66310709d1271634d631cc6df0dcefe2e8234ef3a44853422a7ca1131216e312be226611070931271134c6322c6df2dcefe2e8134ef26448534a20295236242dc5256c44d852020d0a044dc64d39882f117c8d9df4244f3020d880a6944452a47c484b86256c4cdc02020841271d34c633ac65f28677f1f80342f04a2421a5189ca113121ae94107176d39889b98c7311020ee7ae4ce585b98c70615a67de6598335338e599779669ccc3f88b60f5b710e32f92d55f0ec65f14abbf3c8cbffaacfe9c187f0d58fd1560fc45b3fa2bc2f86bc8eaaf04e32f86d55f19c65f234a7f734c632ec65f634a7ff34d6301c65f134a7f59a6918df1d794d25fae693830fe9a51facb378d45187fcd29fd2db6762831fe5a50fa5b6a6d4f60fcb5a4f4576cdd9bc4f86b45e9afd4ba2384f1d7da1fb74d7d3618d80aa2d21a12511bce885a40545a42226acb195133884a734844ed38236a0251690a89a83d67448d202a8d2111c57246d410a2120389a80367440d202ad190883a7246140551a90f89a81367441110954848449d3923ea0451e90c89a80b67441d202a1d2111c57146d41ea2120b89289e33a2b61095769088ba7246140f51e90a89a81b67445d202a90bf0337b03b6744dd202add2111f5e07cccee414844e110959e9caba80d44a507641501222aafb03ef5bf03", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - }, - { - "name": "mintFromPublicMessage", - "functionType": "secret", - "parameters": [ - { - "name": "amount", - "type": { - "kind": "field" - }, - "visibility": "private" - }, - { - "name": "secret", - "type": { - "kind": "field" - }, - "visibility": "private" - }, - { - "name": "owner", - "type": { - "kind": "struct", - "fields": [ - { - "name": "x", - "type": { - "kind": "field" - } - }, - { - "name": "y", - "type": { - "kind": "field" - } - } - ] - }, - "visibility": "private" - } - ], - "returnTypes": [], - "bytecode": "ed9c69531359148613122288ce0ce3beeffb969000c1951d51048551c4659c409a10cd660808eeedbedbe980fb0e288828ee4bcd54cd0fb87fc02a7e8b35370b48430d7ec8c9d45b5349d5fb214557dff739f7f4bde7dc4ed1c2feea53758abdb90e4bcd815c77536183ab26cfe270881de539a545057e59ab1ee18f8923fd51a7169fe778edbe3aa7e0b3d70424bffc35dba8cf309984cc34c1603458f46959d5e674bd29bd3ac36c301bd2cde9d634b3d128984de6ccaceaac4c7d96c164140cb5e959c65a7df833e16bb63eca0fbda98988a626219a9a8c686a0aa2a9a988a6a6219a9a8e686a06a2a99988a666219a9a8d686a0ea2a9b988a6e6219a9a8f686a01a2a98588a616219a5a8c686a09a2a9a588a696219a5a8e686a05a2a99588a656219ad213981a7ed0d0b955b00ade7ac115e853cd9653d937f957ae715ce3b926704de49ac435996b0ad754ae695cd3b96670cde49ac5359b6b0ed75cae795cf3b916702de45ac4b5986b09d752ae655ccbb95670ade45ac5a567df96cb8634fac0191167d384682a1dd15406a2a94c44536644535988a656239a5a83686a2da2a97588a6d6239ada80682a1bd1544ecccbab5f64032f738c5c26ae74ae0cae4c2e335716d76aae355c6bb9d671ade7dac095cd95132c8f72f3e8c1f3a3053798460497e5fc7055a9920b0a7f7065b0fe2c085e59b4517c96ebb53b1c765bab5f7c5a6177d91c429837ca493214453fd17eb123c7ebb534078a376d966e896d5bdc8db25a2576e4b95df53e59e52748a5ee42b757b0db5cc110057a6c822fcfed74da7d4ec1e5f38b5d1b058b27e4404ed0f8c59e72c166aff709de629755685287fd681222be3462fba606a7c7af0b7f57a9db2b7c6ecfdfca440a1004761441326e26b8470941f863957c2514c9c71d393d0e618bd4227605a7b6b8b6d4cdd34ed39f80eae813d020f6e4da5d166f73a15d7058cb3c2daab67c7ba35a15ca9d8024110c3038fffc0182d06ea198a0d2e8f38f9eac548ac58e8910aa91b68340e828a2886b53704b28db4abff76d8b3a0a267a53e5040fd7c871ddc6635a1e3ee651c915bf7d5feda481c565bb742776fbd94bbe9f955b5c56b733b4bc283634b55aea1f584331f090754cdb9663b506f7c412b7c52a2768c39ba2b67fb3d44636cba4219b65acf68354c2fd60477c3f50847607c5045502ee07a995127089534998d23be329ad08ed4e8a09aa024ce9ca2a09f1506057d4a662f03e6377d4a68c4a533281a94a827bec8971e17353dec58b9ed441efb7b673ede6da132c84f6fefe83d3890a7ee5dee095fbfef8be7acab4ab6705c163103e9cb80153a1d018198762643c8a91ed1446a25f778d34cb5af4758361a06eb048f7c2057c823a06a77319ca6ee6b5cbedb3d736e779058b4fb0f23a455034341ab53cec846ef0019eaedf59620cda1d5db0ddd12446da1d6de40c5017697bd4ba48bb335ad1eed0646715708d6a21ac51abe335aa22b4d51413540358a35a6aa86b540a575535148b2ffb93bafc0e10b8aa22b88795201b49a213abb5cc4ab89609f1b54c115a8162826a01d7326b2de42b058a500d3c67adb4cf590241c0e05a455243e3d00c8d8f37d3b19baa78333ddcc8ffab990ea7be6cab93fa5453c21d6262ff0b338df25726ff459fdd2b38edbe02578db7d9c3fbec12b74dd166ebd4adc3da6ce5f78421df3543be6b07df2e71a02d4f8a415b9e1c6ccb754991b67c5472ff58a3fd0407cea189485689dde1318b5dbe324fab2a3862b62ad2e8a70c8c3886a2b0ebe0259c5790534629c74c098d9932863492fd6325fdcb5821beb1c991741c1b39e09834e48083a2da8c55416f232ce8edf1825e115a3bc504ed072ce86dfb91df09d711a6f481784a2b427b8062821c80295de79062f29becb69cd2fc80bc5f2d3bd44efab7b32ec4f7d86e44531e445307114d79114dd5239af2219ed0efa3206b400c7723a2a94388a69a104d35239a3a8c68ea08a2a9a388a68e219a3a8e68ea04a2297612d29508e9ea14a4abd390aece40ba3a0be9ea1ca4abf3d4aea2f9ddb1501bfa543b29c82e10bcaaa08ff7c558c43bca1b1ad414649710c91228c82e23926928c8ae20926929c8ae22922552905d4324d351905d4724cba5209310c95c14647e44323705998c48e6a1200b20921da4206b41242ba2206b4524f35290dd4024aba720bb8948e6a320bb8548d64041761b91ac9182ec0e22d9210ab2bb88644d1464f710c9ca28c8ee23923553903d40243b4c41f61091ec0805d92344b2a314648f11c98e51903d41243b4e41d68648768282ac1d918c9da440eb80441329d09e42a29da2407b0689769a02ad1312ed0c055a1724da590ab4e78868360ab26e44b23a0ab21790e9788e02ad0712ed3c05da4b48b40b1468af20d12e52a0f522a251fc9374f61a912c8982ec0d22593205d95b44b2d11464ef10c95228c8de23928da120fb8048369682ec2322d94f14649f10c97ea620fb8c48f60b05d997e8c9a43e95815d6297d91576955d63d799c4fc4c6601d6c25ad90d7693dd62b7d91d7697dd63f7d903f6903d628fd913d6c6da59077bca9eb14ed6c59eb36ef682f5b097ec15eb65afd91bf696bd63efd907f6917d629fd9977f00", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - }, - { - "name": "mintFromPublicToPrivate", - "functionType": "open", - "parameters": [ - { - "name": "amount", - "type": { - "kind": "field" - }, - "visibility": "private" - }, - { - "name": "secretHash", - "type": { - "kind": "field" - }, - "visibility": "private" - } - ], - "returnTypes": [null], - "bytecode": "b5904f4ec24018c529b42e74a1e845f006b60d558cff025e60d27e3613a733753a35b0fc6ed099c2ce1da56a0c0947f0005cc0cb10c3c29d61537dbb975ff2decb9b9ecc70e531123e7a621ce43cf40963b818ba37e77d6d6c6b077476c1bddfe0db1d442033e0a53187eb8d395a6f5aa67b8caf9ea48cd178a6b11e511e33280b6dbece7acd74da6d1cd12b8a179c5f8b6763b570e10b9e29d3d2cd63f123101268ccb7bf94ab500251e08b24a12a01ae34be5f00495d29c9c4b42d8dcb21c4345320073c82b1f533c5fe8b294b8f722227010516dda65367ee4651dbc6ea4a90c8749c7fedaafb4f396159c7c6fa324fd2c18371f6ab7b4952acb65e1f542325d2cfa2f806", - "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" - } - ] -} diff --git a/yarn-project/noir-contracts/src/examples/schnorr_account_contract.json b/yarn-project/noir-contracts/src/examples/schnorr_account_contract.json index 36d52d2d62f..345d44f3531 100644 --- a/yarn-project/noir-contracts/src/examples/schnorr_account_contract.json +++ b/yarn-project/noir-contracts/src/examples/schnorr_account_contract.json @@ -91,7 +91,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d07985545d29d7b671ea2889205919cf30c0c30e41c2547b312061c250e41c0c42019451840051111010101098280e42088b751511110505472ce19febacdeebfebac16e98c9eef7de3f755b97a96b2ebdcea7afdbacfeb3bda243bbd2390326e4ed50eadda3c5fb573af9a3d3ab5a9d6aa4387b8294daa34a85563647c98a380010d4ca68119932b60260d7c5003336be0431a984503b36a60360dccae81393430a706e6d2c0dc1a984703f36a603e0dccaf810534b0a00616d2c0c21a5844038b6a60310d0cd7c0080d2cae8125343052034b6a60290d2cad81511a584603cb6a60390d2caf811534b0a20656d2c0ca1a584503ab6a60350dacae813534b0a606d6d2c0da1a584703eb6ae0c31a584f03eb6b60030d6ca8818d34b0b10636d1c0a61ad84c039b6b600b0d6cf967e0b446d16da363bb45771ab523247b7c6aef6a7c1ab1b462e9c4d28b65107b402ca35826b107c5328b3d2496452cab5836b1ec6239c4728ae512cb2d96472caf583eb1fc6205c40a8a15122b2c5644aca85831b170ef6ae1f8279ebce11823e4ff5b5cac8458a45849b15262a5c5a2c4ca8895152b27565eac825845b14a6295c5aa885515ab26565dac86584db15a62b5c5ea88d5157b58ac9e587db106620dc51af9637ceae9b819556263ba3fdb31ba7b4c9b512346c66fab5c22bc54646474e9e2d11125225a85172fd33aaa647864c9d6a5a222a2224a46956c5b3caa4489e8a8c8a8d2655a97291d5e2622b2447444bb92654ab40bbffed733db2a87dfe15ff841b5621c546bc641b5611c545bc64145330eaa1de3a0da330eea59c641c5300eea39c6413dcf38a80e8c83eac838a84e8c83eacc38a82e8c83eaca38a858c64175631c5477c0a06ef4e5a6b17cc96822d654ac995873b116622dc51e117b54ec31b1c7c59e116b25d65aac8d585bb168b17662edc59e158b117b4eec79b10e621dc53a897516eb22d6552c56ac9b5877ffcb4d8f9e78e25e607c9abd1807d59b71507d1807f522e3a05e621cd4cb8c837a857150af320ecaeb4b39aa38ca51f5a31cd56b89be704815ff847c803f25d643ec05b15e62bdc5fa88bd28f692d8cb62af88bd2ae6f5f55d9ceffaf9ee35ffc3dfebef0d503690bd81daf6b237484507abe810151daaa2c354f475157d434587abe89b2a3a424547aa68bc8a8e52d1d12a3a4645df52d1b755f41d151daba2e354f45d151dafa2efa9e804157d5f4527aae8072a3a49453f54d1c92a3a25f91ffbd7a8ebfdabc41df4af086fb20429deee8e9a60843705d0494d28fc237ad47f861571dbb94dfa7790b67740d0871082fa262241feb0c26f2bb789ff1d24fc3609fa0042505c2213e40f2bea96739b9020489976b741d0fb1082fafd0d04c9b022dbdd526ee3ff2c48e95b24e83d0841affd3d04d96195bce9dcc6fd5590c85b20e85d0841fdff4682fc6185df546eef6841c26f92a0b1108206fccd04f9c36a73c3dcdeba5190d23741d0db108206fe0304f9c32aaee636fa668294be01416320040dfa8708f28755fa2f738bbfd920a515824641081afc0f12e40f2bea4f731b712b41a2fe82a091108286fcc304f9c30aff9fdc86df629052edfe84a03721040d2520c81f56f81f727bfd7682144f40d01b1082869110e40fabf8ffe736f4768344fe1741c32004bd4e445089e876eddad9dc06df51907f11340442d01b8941d01d068c90e70689829964c339291a0a898299666f72523418120533d1467052341012651084a2919c14f587441900a1289e93a27e9028af41281ac549515f4894380845a3d95645b22e8af00641187a15c2d018ce221a0d8982d9ff788b93a2784814cc0ec8db9c148d8044c1ec81bcc349d1704814cc2ec8584e8ade8144c1ece68fe3a4e82d4814cc7efebb8c143d82d07661bec28ce72ca17190289843450445d3abc7c446b7e91ed3333a6e7ab3cef5a29bb46a1bd36bd47595df1d57d39d8f6f4748766fa037c81bec0df1867ac3bcd7bd37bce1de9bde086fa417ef8df2467b63bcb7bcb7bd77bcb1de38ef5d6fbcf79e37c17bdf9be87de04df23ef4267b538c13a2c983a6aae2a18f54749a8a4e57d1192afab18ace54d1592a3a5b453f51d1392a3a5745e7a9e87c15fd544517a8e84215fd4c4517a9e862155da2a29fabe852155da6a2cb5574858aae54d1552aba5a45d7a8e85a155d971802beb50801df3a481bff9c52c0b71a21e05b03216829a5806f2542c0b70a42d0324a01df7284806f0584a0e59402bea50801df3208412b28057c4b1002becf2104ada414f02d4208f81643085a4529e05b8810f07d06216835a580ef5384806f0184a0359402be790801df7c08416b29057c731002beb91082d6510af86623047c9f4008fa8252c0371321e09b0521683da5806f0642c0f73184a00d9402be690801df7408415f72ee5b6f8044f91242d1464e8abe8044590fa1e82b4e8ad642a260b6cd3c4e8a5643a26036ce0c27452b2151305b679b38295a0e8982d93cfb9a93a2a5902898edb36f28057c1f4118c2ec9f7dcb5944df40a27c0ba1683327459b2051be8650f41d27451e248a8150f43d27451b2151be8250f4032745df43a2fc00a1680b27459b2151be8350f42323458f22047c53212c6fe52ca12d90283f424a682bb980ef518c806faaf79137cd9beecdf03ef6667ab3bcd9de27de1c6fae37cf9bef7dea2df0167a9f798bbcc5de12ef736fa9b7cc5beeadf0567aabbcd5de1a6fadb7ee0602be2f54f1d07a15dda0a25faae84615fd4a453d15352aba4945bf56d16f54f45b15ddaca2dfa9e8f72afa838a6e51d11f5574ab8a6e53d1ed2afa938aee50d19d2aba4b457f56d15f5474b78afeaaa2bfa9e8ef2aba2731047cbf23047c7b206dfc1ca580ef578480ef370841e729057cbf20047cbb21045da014f0ed4208f87e8610749152c0b70321e0db0921e812a5806f3b42c0f71384a0cb9402bead0801df3608415728057c5b10023eccb7b5ab9402beef11023ecca6d1354a01df6684800fb26514164229e0fb0621e0831c8184399402be4d08011fe40024cca514f07908011fe4f8232c9452c0b71121e0831c7e8485510af83620047c10755a588072df3a2c0c122500a1281927452e244a2884a2bb38290a814471201425e73c20ba0a89720d42d1dd9c145d8644b902a1e81e4e8a2e42a25c8250948293a2f39028172014dd4b29e05b0f61e81c84a1949c1f68f742a2a48450741f2745f740a2a48050743f2745c92151ee8650948a93a26490287741284acd49512a4894d4108ad27052741f24cafd108ad23252f41842c007f9255b583ace124a038992165242e9c8057c8f61047c5f78ebbd0dde97de46ef2bcff38cb7c9fbdafbc6fbd6dbec7de77deffde06df17ef4b67adbbcedde4fde0e6fa7b7cbfbd9fbc5dbedfdeafde6fdeeedb981806faf2a1edaa7a2fb55f4808a1e54d1432a7a58458fa8e851153da6a2c755f4848a9e54d1532a7a5a45cfa8e859153da7a2e755f4828a5e54d14b2a7a5945afa8e85515bda6a1325374d8d16157874375384c87038920e393ff2840c7276383b4f3128c423e79aa00259f3c7c0845918c523e9936002d9fcc2e08452529c57c5711623eccae76294a31df6584980fb3a75d9a52cc771121e6c3ec6847518af9ce23c47c98fdec329462beb308311f663bbb2ca598ef3442cc77064250394a31df498498ef1484a0f29462bee30831df0908411528c57c471162be6310822a528af90e23c47c47200455a214f31d4488f90e4108aa4c29e6db8f10f31d80105485730fbb32244a150845553929aa088952094251354e8aca43a2548050549d93a2b29028e52014d5e0a4280a12a50c84a29a9c14958244290da1a8162745919028252114d5a614f3ed83305402c2501dce22aa0d89520742515d4e8a6a42a2d48250f4302745d521516a4028aac749515548946a108aea7352540f12a53e84a2069c14d585447918425143468a10524e6f2f84e5469c25d40012a521a4841a918bf95263c47c7bbd7dde7eef8077d03be41df68e7847bd63de71ef8477d23be59df6ce7867bd73de79ef8277d1bbe45df6ae7857bd6bc609318e631cd738a1c609334e4097f41927992e25ba4b8793ebf0dd3a7c8f0ea7d0e17b7538a50edfa7c3f7eb702a1d4eadc3697438ad0ea7d3e1f43a9c41871fd0e18c3a9c49871fd4e1cc3afc900e67d1e1ac3a9c4d87b3eb700e1dcea9c3b97438b70ee74914b15f6e88d82f0fa4dd77e614fbe58488fd724128eac229f6cb0e11fbe58050d49551ec277d09a0f693f605a1289651ee278d1fa0f793cf070845dd18057ff2c90a50fcc9073084a2ee8c923f59ba00347fb2c28150d48351f4276b4380ea4f9690108a7a32cafe64f10dd0fdc91a1d42d10b8cc23ff9760350fec997200845bd18a57ff2f511a0fd936f99108a7a338affe4fb3940fd275fe32114f56194ffc9060840ff27fb24108a5e641400ca0e134001281b51108a5e629400ca161e4003283b7d108a5ee6dcfb7e0912e5650845af7052d40712e5450845af7252d40b12a53784a2be9c14f58444790142511c2745dd21517a4028eac749512c244a370845af7152d40512a52b84a2fe8c224039f98450d41942d100ce2aea0f89320042d1404e8afa41a2bc06a1681027457d2151e220140de6a4e81548945721140de1a4683024ca1008454339291a0889320842d130468ad220527330f76fbece594343215186416ae8757219601a880c500a4a16a3b24f279b6cb2a129bb91b2f32bdbb6b2452efbdb729620070172e8222726723a25474b728c27677072de29879572302ca7ba72822ec7dfc6c96a9c6cc69180398c93d338b98c93db38796e2410ccabcb8ff2e9707e1d2ea0c30575b8900e17d6e1223a5c54878be970b80e47e870711d2ea1c3913a5c52874be970691d8ed2e1323a5c5687cbe970791daea0c31575b8920e57d6e12a3a5c5587abe970751dae912802c1ea108120e6b73b1f730a04ab42048298dfeecce414085686080431d72bcce214085684080431d72bcce614089687080431d72b7cc229102c0b110862ae5798c329108c82080431d72bcce514089682080431d72bcce314084642048298eb15e6730a048b43048298fb153ee514088643048211108a16700a048b420482c520142de41408168608048b4028fa8c5320581022102c04a16811a740303f4420580042d162ce5df14590288b21142de1a4682124ca67108a3ee7a4e853489405108a967252340f12653e84a2659c14cd8144990ba168392745b321513e8150b48293a2999028b32014ade41408e68350f43184a2559c55b41212651584a2d59c142d87445901a1680d27454b21519641285acb49d1124894cf2114ade3a4682d24ca3a08455f7052b41a12650d84a2f58c14417e94eee485d0bc81b386306f345e0fa9a10de402c1b42081605e598cca3e9d6cb2c986a6ec46caceaf6cdbca16b9ec6fcb59821c04c8a18b9c98c8e9941c2dc9319e9cc1c979a71c56cac1b09ceaca09ba1c7f1ba7a2712a19a7b271aa18a7aa71aa19a7ba716adc48205853971fd5d2e1da3a5c4787ebeaf0c33a5c4f87ebeb70031d6ea8c38d74b8b10e37d1e1a63adc4c879beb700b1d6ea9c38fe8f0a33afc980e3faec34fe8f0933afc940e3fadc3cfe8702b1d6eadc36d74b8ad0e47278a40b02d4420180df920d8c729106c0d1108b68150b49f5320f80c4420d80a42d1014e81e0531081e0d3108a0e720a049f8008049f845074885320f8184420f83884a2c39c02c1472002c14721141de11408b68008045b42283aca29106c061108368750748c5320d80422106c0aa1e838a740b0114420d81842d1094e816003884010f3c68a939c02c17a108120e6d539a738058275210241ccab734e730a046b4304829897c19de1dc153f0d89720642d1594e8a4e42a29c8250748e93a2e390282720149de7a4e82824ca3108451738293a0c89720442d1454e8a0e42a21c8250748993a2fd90280720145de61408d68250b40f42d115ce2aba0c89720542d1554e8a2e42a25c8250748d93a2f39028171014054238293a0b89720e4291434951200412c58150e47256d15548946b108a4219294a071108425e1d1f08e39c662e244a28a486c2c80582e94002c19ab218957d3ad964930d4dd98d949d5fd9b6952d72d9df96b3043908904317393191d329395a92633c398393f34e39ac94836139d595137439fe36ce53c679da38cf18a795715a1ba78d71da1a27fa4602c176bafca8bd0e3fabc3313afc9c0e3fafc31d74b8a30e77d2e1ce3adc4587bbea70ac0e77d3e1ee3adc43877beaf00b3adc4b877beb701f1d7e51875fd2e19775f8151d7e5587fbea709c0ef7d3e1d774b8bf0e0f481481607f884010727b7c2017a740b01f442008b93d3e909b5320d817221084dc1e1fc8c329107c05221084dc1e1fc8cb29107c09221084bce12b908f5320d807221084bce12b909f5320d80b221084bce12b50805320d813221084bce12b50905320d81d221084bce12b50885320180b110842def01528cc2910ec02110842def01528c22910ec04110842def01528ca2910ec001108768450548c5320f81c4420f83c84a2704e81e0b31081600c84a208ce5df1704814c885af81e29c14158544815cf81a28c14951614814c885af81484e8a0a42a2402e7c0d94e4a4283f240ae4c2d740294e8a2057b804f241282acd49516e48943c108aa2380582ed2114e582505486b38aa22051202fe50894e5a4a814240ae4a51c81729c144542a2405eca1128cf4951714814c84b39021538292a0f890279cd54a022274565215120af990a5462a4283d4420d80e427365ce1aaa08890279e11d84a2c41408a6070904dbc96254f6e964934d3634653752767e65db56b6c8657f5bce12e420400e5de4c4444ea7e468498ef1e40c4ece3be5b0520e86e554574ed0e5f8db38af18e755e3f4354e9c71fa19e735e3f437ce801b090407eaf2a3413a3c588787e8f0501d1ea6c3afebf01b3a3c5c87dfd4e1113a3c5287e37578940e8fd6e1313afc960ebfadc3efe8f0581d1ea7c3efeaf0781d7e4f8727e8f0fb3a3c51873fd0e1493afca10e4fd6e1298922109c0c11084e817c103ccd29109c0411087e08a1e8194e81e0448840f0030845ad380582132002c1f72114b5e614088e870804df8350d4865320380e22107c1742515b4e81e03b1081e0580845d19c02c1b72002c1b72114b5e314088e860804c740286acf29108c8708044741287a965320380222101c09a128865320381c22107c1342d1739c02c1d72102c13720143dcf29101c0a11080e8350d4815320381822101c02a1a823e7ae780748148c12b7132745cf41a26094b89d39297a161205a3c4edc24911e66cad3d84a2ae9c14b5854481bcda2510cb49516b4814c8ab5d02dd38297a061205f26a9740774e81e02008459057bb047a705651774814ccaf257b7252140b8982f9b5e40b9c14758144c1fc5ab21727459d205130bf96eccd49512f4814cceffffb7052d4131205f3fbff171929ca0011080e84d0fc12670df58144c1dc44f212b94030034820385016a3b24f279b6cb2a129bb91b2f32bdbb6b2452efbdb729620070172e8222726723a25474b728c27677072de29879572302ca7ba72822ec7dfc699609cf78d33d1381f186792713e34ce64e34cb9914070aa2e3ffa4887a7e9f0741d9ea1c31febf04c1d9ea5c3b375f8131d9ea3c37375789e0ecfd7e14f7578810e2fd4e1cf7478910e2fd6e1253afcb90e2fd5e1653abc5c8757e8f04a1d5ea5c3ab75788d0eafd5e1758922105c0b1108ae837c10bccb29105c0d1108ae8150349e5320b81222105c05a1e83d4e81e0728840700584a2099c02c1a51081e0320845ef730a04974004829f43289ac829105c0411082e8650f401a74070214420f81984a2499c02c14f2102c105108a3ee41408ce830804e743289acc29109c031108ce855034855320381b2210fc0442d1544e81e04c8840701684a28f380582332002c18f21144de314084e830804a743289aceb92b3e0d120543d10c4e8aa642a27c04a1e8634e8a2643a2607e733b9393a249902898dfdccee2a46822240ae637b7b339299a008982f9cded279c148d8744c1fce6760ea740f023084598dfdccee5aca239902898afb1f338299a0d8982f91a3b9f93a299902898afb19f725234031205f335760127459f42a2603666177252340f1205b331fb1923450f40048298afc28b386b6821240ae6886811b940f001904070aa2c46659f4e36d9644353762365e757b66d658b5cf6b7e52c410e02e4d0454e4ce4744a8e96e4184fcee0e4bc530e2be560584e75e5045d8ebf8db3dc382b8cb3d238ab8cb3da386b8cb3d638ebfe5c2038b569ed2ac54b968adf11f24bbc7102c9c585f92ed477aeef1cdf85248ff7ae895d15bb227659ec92d845b10b62e7c5ce899d153b23765aec94d849b11362c7c58e891d153b227658ec90d841b10362fbc5f689edf5ff63797c97db77b97c97d377397c97dd77d97c97d577597cf790ef32fbee41df65f25d46df3de0bb0cbe4befbb74be4bebbb34be4bedbb54bebbdf77f7f92ea5efeef55d0adfdde3bbbb7d97dc7777f92e99ef6af8aebaefaaf9aeaaefaaf8aeb2ef2af9aea2ef2af8aebcefcaf9aeacefcaf82eca77a57d57ca77257d17e9bb12be2beebb08df85fbae98ef8afaae88ef0afbae90ef0afaae80eff2fb2e9feff2fa2eda776d7dd7c677ad7dd7ca77cff8ee69df3de5bb277df784ef1ef7dd63be7bd4778ff8aea5ef5af8aeb9ef9af9aea9ef9af8aeb1ef1af9aea1ef1af8aebeefeaf9ee61dfd5f55d1ddfd5f65d2ddfd54c6edf856bdf976bdfa96bdfbb6bdfcd6bdfdf6bdff16bdf036cdf156cdf276cdf396cdf4b6cdf5d6cdf6f6cdf816cdf936cdfa56cdfb76cdfc96cdfdb6cdfed6cdfff6cdf116ddf236ddf356ddf476ddf596ddf6b6ddf7d6ddf8f6ddfa16ddfb36dafe2b3d7f5d92bfdecb57ff66a407b7da0bd62d05e4368af2ab4d719da2b0fedb588f6ea447bbda2bd82d15ed368af72b4d73dda2b21edb591f66a497bfda4bda2d25e6369afbab4d761da2b33edb59af6ea4d7b3da7bdc2d35ef3699580562d681585567568958956bd68158e5605699592564d691597569569959b56dd6915a056256a95a4566d6a15a956b56a95ad56fd6a15b256456b95b6568d6b15bb56d56b95bf561d6c15c456656c3bd917c6596f9c0dc6f9d2381b8df395713ce318e36c32ced7c6f9c638df1a67b371be33cef7c6f9c1385b8cf3a371b61a679b71b61be727e3ec30ce4ee3ec32cecfc6f9c538bb8df3ab717e33ceefc6d983ffbc83dcdceeec857cdafd48b62088f05dc93b2559a29482d0b395889e887fff8f127742cfbfa24442e8d946424fc41ffee176e9f9af28c521f46c27a02722e1bf28763bf4248c02a1e7a77f989e883ffb97456e959e3f89521442cf8e7f909e88bf020add0a3d7f11a530849e9dff103d111a58e066e951a21484d0b3eb1fa027e24611f3dd0c3d3788921f42cfcf7f333d11371331cf8de8b989287921f4fcf237d21371b3117369f4dc6494dc107a76ff4df444dc4ac41c7f45cf2d44c909a1e7d7bf819e885b8d98edcfe8b9c528d921f4fc96c8f444dc4ec42c09e9b98d285921f4fc9e88f444dc6ec4ccff4dcf6d46790842cf1ece2dfcdf2151f64028dacb49d1af9028bf4128dac749d12f9028bb2114ede7a4681724cacf108a0e7052b40312652784a2839c146d8744f90942d1214e8ab642a26c83507438d1288ab8fd880f4208fa1142d011ce1a3a0c89720442d1514e8a0e42a21c8250748c93a2fd90280720141de7a4682f24ca3e08452738293a0e89720242d1494e8a8e42a21c8350742a51288ab8b38819af137447513241483ecd59412721514e412a8892a29610f10ba451274bcb287e690e10bfb480d0938e51fcd214207e6906a1273da3f8a53140fcd204424f0646f14b4380f8a511849e0718c52ff501e29706107a32328a5f1e06885fea41e8c9c4287ea90310bfd485d0f320a3f8a51640fc521b424f6646f14b0d80f8a526849e8718c52fd500e297ea107ab2308a5faa00c42f5521f4646514bf5402885f2a43e8c9c6287ea90010bf5484d0939d51fc520e207e290fa12707e5ae4fb2ec9028392014e5e4a4282b244a360845b938297a0812250b84a2dc9c14418e9c93658650948793a28c9028992014e5e5a42803240ae45e8764f938294a0789921e42517e46f14b59084169210415e0aca1fc902805201415e4a4282f244a3e0845853829ca0d8992074251614e8a7242a2e48250548493a2c2902845201415e5a4a820244a210845c518c52f5100f14b1908c9e19c15541412a518a4821014fdef0556b39ab679b653e7d8d816d1b131ed7a8f8937ce5eefaaf87dded51d2195e3bdc9c9e3bd0fc526897d203651ec7db10962ef898d177b576c9cd858b177c4de167b4b6c8cd868b15162f16223c54688bd29365cec0db1d7c586890d151b2236586c90d840b1b5626bc4568bad125b29b6426cb9d832b1a5629f8b2d115b2cb648ec33b185620bc43e159b2f364f6caed81cb14fc4668bcd129b29f6b1d80cb1e962d3c43e129b2af6bbd86ffe6d3cc2c517fed53ceb7db7c1775ffa6ea3efbef29de73be3bb4dbefbda77dff8ee5bdf6df6dd77befbde773ff86e8bef7ef4dd56df6df3dd76dffde4bb1dbedbe9bb5dbefbd977bff86eb7ef7ef5dd6fbefbdd777b921b67ff1f2b3f1e51b3ce7e88aae9c09d0789fba86a6c4c870e31edc78c8c9bda34a653fb0ed1986be7ece8ee7446d93175ecd221da3807478c8e9b5eb747c72e75da35e8dc3d3e24346e4ab5ce9dba758f7746def960e366558de9d42ab677cd98e80e6d1b76191df261f5989e4ec8e4a6dd3b7719356204e03ff0df35347214845ee104f3a00e01ca2851f23b3402fdb9c5435862cdbbf4d059773869d6fd815c610453424708e79c64770431e3febfb447d19536764069d906941a31f9a754898d6dd57b474829e31c35ce31e31c37ce09e39c34ce29e39c36ce19e39c35ce39e39c37ce05e35c34ce25e35c36ce15e35c35ce35e38618d731ae6bdc50e386193760dc64c6bdcbb8c98d7bb771ef316e0ae3de6bdc94c6bdcfb8f71b379571531b378d71d31a379d71d31b3783711f306e46e36632ee83c6cd6cdc878c9bc5b8598d9bcdb8d98d9bc3b8398d9b6bc4b8b80feb77ee191fea5effbbeb5cffbb13f2ef3e153212f08c3eaed939363aa67d277f493f6a7e1bf18d62637ab6ea1eedaff3bbc774ee34326e7aede8565d2c71f161a546c5cd6a12dd3ea65bf7e8d83a9dda46f77212fcb39be09f43af8f3a10f6afd107e226fb3d7764f2ebff1ce2fcab258e84ac1a8f001aeb7f5d583cad718fcedd63a23b751f83fa7805fc640cf1f151dcb8798c9b7ba5f6de7337b7a3c279bc2bb8b782fce711427e9ae502764a7d8eb0f75fe3cbe9044d39e5336e5ebd9cf2eae5942f71cae904a49cf242ca291f7b399da129a702c6cdaf97537ebd9c0a244e399d8194537e483915602fa7b334e554c8b805f5722aa89753a1c429a7b390722a0829a742ece5748ea69c8a18b7b05e4e85f5722a9238e5740e524e8521e55484bc9cdc5c34e554ccb845f5722aaa9753b1442927371784e7a290722ac678cc07d1743947210f2b1cb9bb853e30418cee3f5bb76e44d2d66d027a8513cc832ace7860e2e7571c7e60128fd97282ccde129465257db70464632e59434a9506e8e14542b41e0d994fbcdd4868032f99d4c013d02b9c601e5429ca062ef995e23cf1861306694d1031bc03b97dcb2d4dbdb22c0d6d4c51498d2901bdc209e64195a16c4c925f99a05e5996a52cab323230cccab27130af2ccb4156968da95796e5a00dbc7c52034f40af7082795015281bb8e45781746559817165991af2d9741ed2de2a52af2c2b421b53a5a4c694805ee104f3a02a533626c9af7250af2cab5096556519186665d93498579655212bcba6d42bcbaad0065e2da98127a05738c13ca8ea940d5cf2ab4ebab2ac4e3def8a42e75d8da47997805ee104f3a06a52ce3bc9af66502f9c6a5196554d191866e1d43c98174eb5210ba7e6d40dbc36b481d7496ae009e8154e300faa2e650397fcea922e9cea52cfbbfcd079f770d2bc4b40af70827950f528e79de4572fa8174ef529cbaa9e0c0cb3706a19cc0ba7069085534bea06de00dac01b2635f004f40a279807d588b2814b7e8d48174e8da8e75d41e8bc6b9c34ef12d02b9c601e5413ca7927f93509ea855353cab26a2203c32c9c1e0de6855333c8c2e951ea06de0cdac09b2735f004f40a279807d582b2814b7e2d48174e2da8e75d61e8bc6b9934ef12d02b9c601ed42394f34ef27b24a8174e8f5296d5233230ccc2e9f1605e383d0659383d4eddc01f8336f0c7931a78027a8513cc837a82b2814b7e4f902e9c1084fdefa529d31a45b78d8eed16dd69d4a878e31cf36fac77735b9fd7bb1a227f7bd2b84fa97f6e474884fcc993f6aefb53d69fb67f3ebff505ad2f6cfffd79eb2f587fd1fa4bd65fb6fe8af557adbf66ff5488f58ef5aef5a1d687591fb03e99f577599fdcfabbadbfc7fa14d6df6b7d4aebefb3fe7eeb53599fdafa34d6a7b53e9df5e9adcf60fd03d667b43e93f50f5a9fd9fa87accf627d56ebb3599fddfa1cd6e7bccee6d3c67de6864fe1a8fd134f5afff4f53fd7cab8ad7957056dc0bd8a2ab9b6c19c5c743027d72e98936b1fccc93d1bccc9c5047372cf057372cf0773721d8239b98ec19c5ca7604eae733027d7259893eb1accc9c5067372dd8239b9ee80e4126bff320374f7b247d2eee51fc81546305b713d09f72e25bb9ecc6f740294367640e9d8069406f746a7778dfb82717b19b7b771fb18f745e3be64dc978dfb8a715f356e5fe3c6fd13af535a1cdda96b8fe81ed18d7ab4ee10d3e6df2f54f2a13fbe542905f54b95fcd97fa78f3a716f72ef4d7393fb6bc6eda7dfe4de4fbfc9fdb5c4b9c9bd3784e77e909bdc5f637f31401f9a721a60dcfe7a39f5d7cb6940e294531f08cffd21e53480bd9c5ea129a741c61da897d340bd9c06254e39bd02e17920a49c06b197d3ab34e534c4b883f5721aac97d390c429a757213c0f8694d310f672ea4b534ec38c3b542fa7a17a390d4b9c72ea0be17928a49c8631caf53240687e0112e575ea1b255f876e77bd91b4dd95805ee104f3a086538af524bfe19c6a6bb72724ca9b9465355c0686515b3f49a9b6063dbc1110b5f593d46aeb11d0063e32a98127a05738c13ca878ca062ef9c593aaade319ef2a4f07694cbd20514651af2c47411bd3e8a4c694805ee104f3a0c6503626c96f4c50af2cdfa22cab313230cccaf2e9605e59be0d59593e4dbdb27c1bdac0df496ae009e8154e300f6a2c650397fcc692ae2cc732ae2cd3401a531c24ca38ea95e53868637a37a93125a05738c13ca8f1948d49f21b1fd42bcbf728cb6abc0c0cb3b26c15cc2bcb099095652bea95e50468037f3fa98127a05738c13ca889940d5cf29b48bab29c483def0642e7dd0749f32e01bdc209e6414da29c7792dfa4a05e387d4859569364609885539b605e384d862c9cda5037f0c9d0063e25a98127a05738c13ca8a9940d5cf29b4aba709a4a3def0643e7dd4749f32e01bdc209e6414da39c7792dfb4a05e384da72cab693230ccc2293a98174e33200ba768ea063e03dac03f4e6ae009e8154e300f6a26650397fc66922e9c6652cfbba1d079372b69de25a05738c13ca8d994f34ef29b1dd40ba74f28cb6ab60c0cb3706a1fcc0ba7399085537bea063e07dac0e72635f004f40a279807358fb2814b7ef348174ef312ff3277b797bd40bc9ff5fdaf5f233edfb89ffe6f3a77de8c162406cb773eac859cc3fa8c73588b3887b59873584b3887f539e7b096720e6b19e7b096730e6b05e7b056720e6b15e7b056730e6b0de7b0d6720e6b1de7b0bee01cd67ace616de01cd6979cc3dac839acaf3887e5710ecb700e6b13e7b0bee61cd6379cc3fa9673589b3987f51de7b0bee71cd60f9cc3dac239ac1f3987b5957358db3887b59d73583f710e6b07e7b076720e6b17e7b07ee61cd62f8061e92ff02d2147432fda73a297ac7fd9fa81d60fb67ea8f571d62fb07ea1f59f59bfc8fac5d62fb1fe73eb975abfccfae5d6afb07ea5f5abac5f6dfd1aebd75abfcefa2fac5f6ffd06ebbfb47ea3f55f59ef596facdf64fdd7d67f63fdb7d66fb6fe3bebbfb7fe07ebb758ffa3f55baddf66fd76eb7fb27e87f53baddf65fdcfd6ff72fd346db7717fbde129dc0bf64fccb77ef7f53ff79b717fe75585ec213cabbec73847309a9018f01cc764e73e87c9eeb9c450bcdc7949ed8568556220514829da17cc1431b5b7fd94529c56c68dc5ac160e103638647e0783b9380f51be781194dc61c29977176c61d19170dedd65dc3698ec3a717e6a1e817cde75844421a5e8683053c4d4de8e11b6b730587beb4ad8dec28cdb09935d2ce7dc3d0e99755d215148293a11cc1431b5b79384ed2d19acbdf5206c6fc98cdb16935d4fceb97b0a32eb7a40a29052743a9829626a6f6708dbdbbdb0f6d69bb0bddd6bdcae98ecfa70ceddb39059077955352b45e7829922a6f6769eb0bd0560eded65c2f616306e174c76af70cedd0b9059f732240a294517839922a6f67689b0bdb9b0f61647d8de5ce376c464d78f73ee5e86ccba384814528aae0433454ceded2a617b4b056b6f0308db5b2ae34663b21bc83977af4166dd0048144e8a4243829922a2f616ea10b6b7fb61ed6d08617bbbdfb8dd30d90de59cbb2e64d60d814421a528349829626a6f6184ed2d39acbdbd41d8de921bb73b26bbe19c7337108f98756f40a29052942c9829626a6f7711b6b750587b1b49d8de428ddb0e935d3ce7dc4d0e9975909b3a5929ba3b9829626a6ff710b6b7fb60ed6d0c617bbbcfb8ed31d9bdc53977534066dd184814528aee0d668a98da5b4ac2f69602d6dec612b6b714c67d1e93dd38ceb97b1f64d68d854421a5e8fe60a688a9bda5226c6f2961eded3dc2f696d2b81d30d94de09cbba921b3ee3d4814528ad20433454ced2d2d617b7360eded03c2f6e618f7594c769338e76e3ac8acfb00128594a2f4c14c11537bcb40d8debcfeb0fe3685b0bf497a6e674c7a533967ef0390793705128594a28cc14c115383cb44d8e0ee86f5b7e984fded6ee3c660b29bc139771f84ccbae99028a414650e628a30d7f5f594452e6696cc62cc2f34ad7ccfc1e4379bb3c41f8214e72c4894d9a425ee5ec194c05ccafc2e19f73226bf799c259e05529c732151e6b176f1bb3125b080b28bdf65429363f25bc859e25921c5b9001265216b173f812981c594f91d33ee714c7e4b384b3c1ba4381743a22c612df18b9812584699df79e35ec0e4b79cb3c4b3438a731924ca72d6123f8d29815594f99d34ee294c7eab394b3c07a4385741a2ac665d8b67c494c03acab578063958c1e4f7056789e78414e73a4814cef76c87e6e21c566ece61e5e11c565ece61e5e31c567ece6115e01c5641ce6115e21c5661ce6115e11c5651ce6115e31c5638e7b0223887559cf55bf341cc92fb4bcafcf61bf70026bf8d9c5f294a40be0c7c0989b29173e645720eab24e7b04a51cee3df8c7b08935f694edaa3388755867358653987558e7358e539875581735815398755897358953987558573585559bf041cc52c920d657e878d0b52a36fe2fc12500db27c3790289b588fce92614ae05bcaa3b330131ac0e4b799b3c4ab438af35b4894cdac259e1953023f5096782613fa2026bf2d9c255e03529c3f40a26c615da8ecc394c036cafcf618772f26bfed9c255e13529cdb2051b6b376f1fb3125b093b28ba734a1f761f2dbc559e2b520c5b9131265176b173f872981dd94f99d31ee594c7ebf7296786d4871ee8644f995b58ba7c194c01eca2e9eca84a6c6e4b797b3c4eb408a730f24ca5ed612bf17530207284bfc1e139a0293df41ce12af0b29ce03902807594b3c14530247284bdc31a12e26bfa39c25fe30a4388f40a21c652df1104c099ca0ccefaa71af61f23bc959e2f520c5790212e564625cb375c7c3b2f798dc39d1f53993cb0249ae0167725921c935e44c2e1b24b9469cc9658724d79833b91c90e49a70269713925c53cee47241926bc6995c6e4872cd3993cb0349ae0567727921c9b5e44c2e1f24b9473893cb0f49ee51cee40a40927b8c33b98290e41ee74cae1024b92738932b0c49ee49cee48a40927b8a33b9a290e49ee64cae1824b96738930b8724d78a33b9084872ad39932b0e49ae0d67722520c9b5e54c2e12925c3467722521c9b5e34cae1424b9f69cc9958624f72c67725190e46238932b0349ee39cee4ca42927b9e33b97290e43a7026571e925c47cee42a4092ebc4995c4548729d3993ab0449ae0b67729521c975e54cae0a24b958cee4aa4292ebc6995c354872dd3993ab0e49ae0767723520c9f5e44cae2624b9173893ab0549ae176772b521c9f5e64cae0e24b93e9cc9d58524f72267720f43927b8933b97a90e45ebef3e476843ceeb8a16181647725bffb9e14f7a6bceffe54a9d3a44d973ec30319333d98f9a12c59b365cf913357ee3c79f3e52f50b050e122458b8547142f1159b254e9a83265cb95af50b152e52a55ab55af51b356ed3a751fae57bf41c3468d9b346dd6bc45cb471e7decf11d21926b7d13dac0843634a18d4c686313dac4843635a1cd4c687313dac284b634a18fc8e9be9c81cb49b19ca7caa9a39ccdc909969cf3c869889c19c8cebaec3fcb2eadec65ca8e9fec8bc9ee91ecb1c84e847c5f976fb5f2dd4fbe21c9f708596dcb9a54566eb2be9155807c56ca278af45de94e3287a5d2a51e84b5ff03", + "bytecode": "ed5d07985545d29d7b671ea2889205919cf30c0c30e41c2547b312061c250e41c0c42019451840051111010101098280e42088b751511110505472ce19febacdeebfebac16e98c9eef7de3f755b97a96b2ebdcea7afdbacfeb3bda243bbd2390326e4ed50eadda3c5fb573af9a3d3ab5a9d6aa4387b8294daa34a85563647c98a380010d4ca68119932b60260d7c5003336be0431a984503b36a60360dccae81393430a706e6d2c0dc1a984703f36a603e0dccaf810534b0a00616d2c0c21a5844038b6a60310d0cd7c0080d2cae8125343052034b6a60290d2cad81511a584603cb6a60390d2caf811534b0a20656d2c0ca1a584503ab6a60350dacae813534b0a606d6d2c0da1a584703eb6ae0c31a584f03eb6b60030d6ca8818d34b0b10636d1c0a61ad84c039b6b600b0d6cf967e0b446d16da363bb45771ab523247b7c6aef6a7c1ab1b462e9c4d28b65107b402ca35826b107c5328b3d2496452cab5836b1ec6239c4728ae512cb2d96472caf583eb1fc6205c40a8a15122b2c5644aca85831b170ef6ae1f8279ebce11823e4ff5b5cac8458a45849b15262a5c5a2c4ca8895152b27565eac825845b14a6295c5aa885515ab26565dac86584db15a62b5c5ea88d5157b58ac9e587db106620dc51af9637ceae9b819556263ba3fdb31ba7b4c9b512346c66fab5c22bc54646474e9e2d11125225a85172fd33aaa647864c9d6a5a222a2224a46956c5b3caa4489e8a8c8a8d2655a97291d5e2622b2447444bb92654ab40bbffed733db2a87dfe15ff841b5621c546bc641b5611c545bc64145330eaa1de3a0da330eea59c641c5300eea39c6413dcf38a80e8c83eac838a84e8c83eacc38a82e8c83eaca38a858c64175631c5477c0a06ef4e5a6b17cc96822d654ac995873b116622dc51e117b54ec31b1c7c59e116b25d65aac8d585bb168b17662edc59e158b117b4eec79b10e621dc53a897516eb22d6552c56ac9b5877ffcb4d8f9e78e25e607c9abd1807d59b71507d1807f522e3a05e621cd4cb8c837a857150af320ecaeb4b39aa38ca51f5a31cd56b89be704815ff847c803f25d643ec05b15e62bdc5fa88bd28f692d8cb62af88bd2ae6f5f55d9ceffaf9ee35ffc3dfebef0d503690bd81daf6b237484507abe810151daaa2c354f475157d434587abe89b2a3a424547aa68bc8a8e52d1d12a3a4645df52d1b755f41d151daba2e354f45d151dafa2efa9e804157d5f4527aae8072a3a49453f54d1c92a3a25f91ffbd7a8ebfdabc41df4af086fb20429deee8e9a60843705d0494d28fc237ad47f861571dbb94dfa7790b67740d0871082fa262241feb0c26f2bb789ff1d24fc3609fa0042505c2213e40f2bea96739b9020489976b741d0fb1082fafd0d04c9b022dbdd526ee3ff2c48e95b24e83d0841affd3d04d96195bce9dcc6fd5590c85b20e85d0841fdff4682fc6185df546eef6841c26f92a0b1108206fccd04f9c36a73c3dcdeba5190d23741d0db108206fe0304f9c32aaee636fa668294be01416320040dfa8708f28755fa2f738bbfd920a515824641081afc0f12e40f2bea4f731b712b41a2fe82a091108286fcc304f9c30aff9fdc86df629052edfe84a03721040d2520c81f56f81f727bfd7682144f40d01b1082869110e40fabf8ffe736f4768344fe1741c32004bd4e445089e876eddad9dc06df51907f11340442d01b8941d01d068c90e70689829964c339291a0a898299666f72523418120533d1467052341012651084a2919c14f587441900a1289e93a27e9028af41281ac549515f4894380845a3d95645b22e8af00641187a15c2d018ce221a0d8982d9ff788b93a2784814cc0ec8db9c148d8044c1ec81bcc349d1704814cc2ec8584e8ade8144c1ece68fe3a4e82d4814cc7efebb8c143d82d07661bec28ce72ca17190289843450445d3abc7c446b7e91ed3333a6e7ab3cef5a29bb46a1bd36bd47595df1d57d39d8f6f4748766fa037c81bec0df1867ac3bcd7bd37bce1de9bde086fa417ef8df2467b63bcb7bcb7bd77bcb1de38ef5d6fbcf79e37c17bdf9be87de04df23ef4267b538c13a2c983a6aae2a18f54749a8a4e57d1192afab18ace54d1592a3a5b453f51d1392a3a5745e7a9e87c15fd544517a8e84215fd4c4517a9e862155da2a29fabe852155da6a2cb5574858aae54d1552aba5a45d7a8e85a155d971802beb50801df3a481bff9c52c0b71a21e05b03216829a5806f2542c0b70a42d0324a01df7284806f0584a0e59402bea50801df3208412b28057c4b1002becf2104ada414f02d4208f81643085a4529e05b8810f07d06216835a580ef5384806f0184a0359402be790801df7c08416b29057c731002beb91082d6510af86623047c9f4008fa8252c0371321e09b0521683da5806f0642c0f73184a00d9402be690801df7408415f72ee5b6f8044f91242d1464e8abe8044590fa1e82b4e8ad642a260b6cd3c4e8a5643a26036ce0c27452b2151305b679b38295a0e8982d93cfb9a93a2a5902898edb36f28057c1f4118c2ec9f7dcb5944df40a27c0ba1683327459b2051be8650f41d27451e248a8150f43d27451b2151be8250f4032745df43a2fc00a1680b27459b2151be8350f42323458f22047c53212c6fe52ca12d90283f424a682bb980ef518c806faaf79137cd9beecdf03ef6667ab3bcd9de27de1c6fae37cf9bef7dea2df0167a9f798bbcc5de12ef736fa9b7cc5beeadf0567aabbcd5de1a6fadb7ee0602be2f54f1d07a15dda0a25faae84615fd4a453d15352aba4945bf56d16f54f45b15ddaca2dfa9e8f72afa838a6e51d11f5574ab8a6e53d1ed2afa938aee50d19d2aba4b457f56d15f5474b78afeaaa2bfa9e8ef2aba2731047cbf23047c7b206dfc1ca580ef578480ef370841e729057cbf20047cbb21045da014f0ed4208f87e8610749152c0b70321e0db0921e812a5806f3b42c0f71384a0cb9402bead0801df3608415728057c5b10023eccb7b5ab9402beef11023ecca6d1354a01df6684800fb26514164229e0fb0621e0831c8184399402be4d08011fe40024cca514f07908011fe4f8232c9452c0b71121e0831c7e8485510af83620047c10755a588072df3a2c0c122500a1281927452e244a2884a2bb38290a814471201425e73c20ba0a89720d42d1dd9c145d8644b902a1e81e4e8a2e42a25c8250948293a2f39028172014dd4b29e05b0f61e81c84a1949c1f68f742a2a48450741f2745f740a2a48050743f2745c92151ee8650948a93a26490287741284acd49512a4894d4108ad27052741f24cafd108ad23252f41842c007f9255b583ace124a038992165242e9c8057c8f61047c5f78ebbd0dde97de46ef2bcff38cb7c9fbdafbc6fbd6dbec7de77deffde06df17ef4b67adbbcedde4fde0e6fa7b7cbfbd9fbc5dbedfdeafde6fdeeedb981806faf2a1edaa7a2fb55f4808a1e54d1432a7a58458fa8e851153da6a2c755f4848a9e54d1532a7a5a45cfa8e859153da7a2e755f4828a5e54d14b2a7a5945afa8e85515bda6a1325374d8d16157874375384c87038920e393ff2840c7276383b4f3128c423e79aa00259f3c7c0845918c523e9936002d9fcc2e08452529c57c5711623eccae76294a31df6584980fb3a75d9a52cc771121e6c3ec6847518af9ce23c47c98fdec329462beb308311f663bbb2ca598ef3442cc77064250394a31df498498ef1484a0f29462bee30831df0908411528c57c471162be6310822a528af90e23c47c47200455a214f31d4488f90e4108aa4c29e6db8f10f31d80105485730fbb32244a150845553929aa088952094251354e8aca43a2548050549d93a2b29028e52014d5e0a4280a12a50c84a29a9c14958244290da1a8162745919028252114d5a614f3ed83305402c2501dce22aa0d89520742515d4e8a6a42a2d48250f4302745d521516a4028aac749515548946a108aea7352540f12a53e84a2069c14d585447918425143468a10524e6f2f84e5469c25d40012a521a4841a918bf95263c47c7bbd7dde7eef8077d03be41df68e7847bd63de71ef8477d23be59df6ce7867bd73de79ef8277d1bbe45df6ae7857bd6bc609318e631cd738a1c609334e4097f41927992e25ba4b8793ebf0dd3a7c8f0ea7d0e17b7538a50edfa7c3f7eb702a1d4eadc3697438ad0ea7d3e1f43a9c41871fd0e18c3a9c49871fd4e1cc3afc900e67d1e1ac3a9c4d87b3eb700e1dcea9c3b97438b70ee74914b15f6e88d82f0fa4dd77e614fbe58488fd724128eac229f6cb0e11fbe58050d49551ec277d09a0f693f605a1289651ee278d1fa0f793cf070845dd18057ff2c90a50fcc9073084a2ee8c923f59ba00347fb2c28150d48351f4276b4380ea4f9690108a7a32cafe64f10dd0fdc91a1d42d10b8cc23ff9760350fec997200845bd18a57ff2f511a0fd936f99108a7a338affe4fb3940fd275fe32114f56194ffc9060840ff27fb24108a5e641400ca0e134001281b51108a5e629400ca161e4003283b7d108a5ee6dcfb7e0912e5650845af7052d40712e5450845af7252d40b12a53784a2be9c14f58444790142511c2745dd21517a4028eac749512c244a370845af7152d40512a52b84a2fe8c224039f98450d41942d100ce2aea0f89320042d1404e8afa41a2bc06a1681027457d2151e220140de6a4e81548945721140de1a4683024ca1008454339291a0889320842d130468ad220527330f76fbece594343215186416ae8757219601a880c500a4a16a3b24f279b6cb2a129bb91b2f32bdbb6b2452efbdb729620070172e8222726723a25474b728c27677072de29879572302ca7ba72822ec7dfc6c96a9c6cc69180398c93d338b98c93db38796e2410ccabcb8ff2e9707e1d2ea0c30575b8900e17d6e1223a5c54878be970b80e47e870711d2ea1c3913a5c52874be970691d8ed2e1323a5c5687cbe970791daea0c31575b8920e57d6e12a3a5c5587abe970751dae912802c1ea108120e6b73b1f730a04ab42048298dfeecce414085686080431d72bcce214085684080431d72bcce614089687080431d72b7cc229102c0b110862ae5798c329108c82080431d72bcce514089682080431d72bcce314084642048298eb15e6730a048b43048298fb153ee514088643048211108a16700a048b420482c520142de41408168608048b4028fa8c5320581022102c04a16811a740303f4420580042d162ce5df14590288b21142de1a4682124ca67108a3ee7a4e853489405108a967252340f12653e84a2659c14cd8144990ba168392745b321513e8150b48293a2999028b32014ade41408e68350f43184a2559c55b41212651584a2d59c142d87445901a1680d27454b21519641285acb49d1124894cf2114ade3a4682d24ca3a08455f7052b41a12650d84a2f58c14417e94eee485d0bc81b386306f345e0fa9a10de402c1b42081605e598cca3e9d6cb2c986a6ec46caceaf6cdbca16b9ec6fcb59821c04c8a18b9c98c8e9941c2dc9319e9cc1c979a71c56cac1b09ceaca09ba1c7f1ba7a2712a19a7b271aa18a7aa71aa19a7ba716adc48205853971fd5d2e1da3a5c4787ebeaf0c33a5c4f87ebeb70031d6ea8c38d74b8b10e37d1e1a63adc4c879beb700b1d6ea9c38fe8f0a33afc980e3faec34fe8f0933afc940e3fadc3cfe8702b1d6eadc36d74b8ad0e47278a40b02d4420180df920d8c729106c0d1108b68150b49f5320f80c4420d80a42d1014e81e0531081e0d3108a0e720a049f8008049f845074885320f8184420f83884a2c39c02c1472002c14721141de11408b68008045b42283aca29106c061108368750748c5320d80422106c0aa1e838a740b0114420d81842d1094e816003884010f3c68a939c02c17a108120e6d539a738058275210241ccab734e730a046b4304829897c19de1dc153f0d89720642d1594e8a4e42a29c8250748e93a2e390282720149de7a4e82824ca3108451738293a0c89720442d1454e8a0e42a21c8250748993a2fd90280720145de61408d68250b40f42d115ce2aba0c89720542d1554e8a2e42a25c8250748d93a2f39028171014054238293a0b89720e4291434951200412c58150e47256d15548946b108a4219294a071108425e1d1f08e39c662e244a28a486c2c80582e94002c19ab218957d3ad964930d4dd98d949d5fd9b6952d72d9df96b3043908904317393191d329395a92633c398393f34e39ac94836139d595137439fe36ce53c679da38cf18a795715a1ba78d71da1a27fa4602c176bafca8bd0e3fabc3313afc9c0e3fafc31d74b8a30e77d2e1ce3adc4587bbea70ac0e77d3e1ee3adc43877beaf00b3adc4b877beb701f1d7e51875fd2e19775f8151d7e5587fbea709c0ef7d3e1d774b8bf0e0f481481607f884010727b7c2017a740b01f442008b93d3e909b5320d817221084dc1e1fc8c329107c05221084dc1e1fc8cb29107c09221084bce12b908f5320d807221084bce12b909f5320d80b221084bce12b50805320d813221084bce12b50905320d81d221084bce12b50885320180b110842def01528cc2910ec02110842def01528c22910ec04110842def01528ca2910ec001108768450548c5320f81c4420f83c84a2704e81e0b31081600c84a208ce5df1704814c885af81e29c14158544815cf81a28c14951614814c885af81484e8a0a42a2402e7c0d94e4a4283f240ae4c2d740294e8a2057b804f241282acd49516e48943c108aa2380582ed2114e582505486b38aa22051202fe50894e5a4a814240ae4a51c81729c144542a2405eca1128cf4951714814c84b39021538292a0f890279cd54a022274565215120af990a5462a4283d4420d80e427365ce1aaa08890279e11d84a2c41408a6070904dbc96254f6e964934d3634653752767e65db56b6c8657f5bce12e420400e5de4c4444ea7e468498ef1e40c4ece3be5b0520e86e554574ed0e5f8db38af18e755e3f4354e9c71fa19e735e3f437ce801b090407eaf2a3413a3c588787e8f0501d1ea6c3afebf01b3a3c5c87dfd4e1113a3c5287e37578940e8fd6e1313afc960ebfadc3efe8f0581d1ea7c3efeaf0781d7e4f8727e8f0fb3a3c51873fd0e1493afca10e4fd6e1298922109c0c11084e817c103ccd29109c0411087e08a1e8194e81e0448840f0030845ad380582132002c1f72114b5e614088e870804df8350d4865320380e22107c1742515b4e81e03b1081e0580845d19c02c1b72002c1b72114b5e314088e860804c740286acf29108c8708044741287a965320380222101c09a128865320381c22107c1342d1739c02c1d72102c13720143dcf29101c0a11080e8350d4815320381822101c02a1a823e7ae780748148c12b7132745cf41a26094b89d39297a161205a3c4edc24911e66cad3d84a2ae9c14b5854481bcda2510cb49516b4814c8ab5d02dd38297a061205f26a9740774e81e02008459057bb047a705651774814ccaf257b7252140b8982f9b5e40b9c14758144c1fc5ab21727459d205130bf96eccd49512f4814cceffffb7052d4131205f3fbff171929ca0011080e84d0fc12670df58144c1dc44f212b94030034820385016a3b24f279b6cb2a129bb91b2f32bdbb6b2452efbdb729620070172e8222726723a25474b728c27677072de29879572302ca7ba72822ec7dfc699609cf78d33d1381f186792713e34ce64e34cb9914070aa2e3ffa4887a7e9f0741d9ea1c31febf04c1d9ea5c3b375f8131d9ea3c37375789e0ecfd7e14f7578810e2fd4e1cf7478910e2fd6e1253afcb90e2fd5e1653abc5c8757e8f04a1d5ea5c3ab75788d0eafd5e1758922105c0b1108ae837c10bccb29105c0d1108ae8150349e5320b81222105c05a1e83d4e81e0728840700584a2099c02c1a51081e0320845ef730a04974004829f43289ac829105c0411082e8650f401a74070214420f81984a2499c02c14f2102c105108a3ee41408ce830804e743289acc29109c031108ce855034855320381b2210fc0442d1544e81e04c8840701684a28f380582332002c18f21144de314084e830804a743289aceb92b3e0d120543d10c4e8aa642a27c04a1e8634e8a2643a2607e733b9393a249902898dfdccee2a46822240ae637b7b339299a008982f9cded279c148d8744c1fce6760ea740f023084598dfdccee5aca239902898afb1f338299a0d8982f91a3b9f93a299902898afb19f725234031205f335760127459f42a2603666177252340f1205b331fb1923450f40048298afc28b386b6821240ae6886811b940f001904070aa2c46659f4e36d9644353762365e757b66d658b5cf6b7e52c410e02e4d0454e4ce4744a8e96e4184fcee0e4bc530e2be560584e75e5045d8ebf8db3dc382b8cb3d238ab8cb3da386b8cb3d638ebfe5c2038b569ed2ac54b968adf11f24bbc7102c9c585f92ed477aeef1cdf85248ff7ae895d15bb227659ec92d845b10b62e7c5ce899d153b23765aec94d849b11362c7c58e891d153b227658ec90d841b10362fbc5f689edf5ff63797c97db77b97c97d377397c97dd77d97c97d577597cf790ef32fbee41df65f25d46df3de0bb0cbe4befbb74be4bebbb34be4bedbb54bebbdf77f7f92ea5efeef55d0adfdde3bbbb7d97dc7777f92e99ef6af8aebaefaaf9aeaaefaaf8aeb2ef2af9aea2ef2af8aebcefcaf9aeacefcaf82eca77a57d57ca77257d17e9bb12be2beebb08df85fbae98ef8afaae88ef0afbae90ef0afaae80eff2fb2e9feff2fa2eda776d7dd7c677ad7dd7ca77cff8ee69df3de5bb277df784ef1ef7dd63be7bd4778ff8aea5ef5af8aeb9ef9af9aea9ef9af8aeb1ef1af9aea1ef1af8aebeefeaf9ee61dfd5f55d1ddfd5f65d2ddfd54c6edf856bdf976bdfa96bdfbb6bdfcd6bdfdf6bdff16bdf036cdf156cdf276cdf396cdf4b6cdf5d6cdf6f6cdf816cdf936cdfa56cdfb76cdfc96cdfdb6cdfed6cdfff6cdf116ddf236ddf356ddf476ddf596ddf6b6ddf7d6ddf8f6ddfa16ddfb36dafe2b3d7f5d92bfdecb57ff66a407b7da0bd62d05e4368af2ab4d719da2b0fedb588f6ea447bbda2bd82d15ed368af72b4d73dda2b21edb591f66a497bfda4bda2d25e6369afbab4d761da2b33edb59af6ea4d7b3da7bdc2d35ef3699580562d681585567568958956bd68158e5605699592564d691597569569959b56dd6915a056256a95a4566d6a15a956b56a95ad56fd6a15b256456b95b6568d6b15bb56d56b95bf561d6c15c456656c3bd917c6596f9c0dc6f9d2381b8df395713ce318e36c32ced7c6f9c638df1a67b371be33cef7c6f9c1385b8cf3a371b61a679b71b61be727e3ec30ce4ee3ec32cecfc6f9c538bb8df3ab717e33ceefc6d983ffbc83dcdceeec857cdafd48b62088f05dc93b2559a29482d0b395889e887fff8f127742cfbfa24442e8d946424fc41ffee176e9f9af28c521f46c27a02722e1bf28763bf4248c02a1e7a77f989e883ffb97456e959e3f89521442cf8e7f909e88bf020add0a3d7f11a530849e9dff103d111a58e066e951a21484d0b3eb1fa027e24611f3dd0c3d3788921f42cfcf7f333d11371331cf8de8b989287921f4fcf237d21371b3117369f4dc6494dc107a76ff4df444dc4ac41c7f45cf2d44c909a1e7d7bf819e885b8d98edcfe8b9c528d921f4fc96c8f444dc4ec42c09e9b98d285921f4fc9e88f444dc6ec4ccff4dcf6d46790842cf1ece2dfcdf2151f64028dacb49d1af9028bf4128dac749d12f9028bb2114ede7a4681724cacf108a0e7052b40312652784a2839c146d8744f90942d1214e8ab642a26c83507438d1288ab8fd880f4208fa1142d011ce1a3a0c89720442d1514e8a0e42a21c8250748c93a2fd90280720141de7a4682f24ca3e08452738293a0e89720242d1494e8a8e42a21c8350742a51288ab8b38819af137447513241483ecd59412721514e412a8892a29610f10ba451274bcb287e690e10bfb480d0938e51fcd214207e6906a1273da3f8a53140fcd204424f0646f14b4380f8a511849e0718c52ff501e29706107a32328a5f1e06885fea41e8c9c4287ea90310bfd485d0f320a3f8a51640fc521b424f6646f14b0d80f8a526849e8718c52fd500e297ea107ab2308a5faa00c42f5521f4646514bf5402885f2a43e8c9c6287ea90010bf5484d0939d51fc520e207e290fa12707e5ae4fb2ec9028392014e5e4a4282b244a360845b938297a0812250b84a2dc9c14418e9c93658650948793a28c9028992014e5e5a42803240ae45e8764f938294a0789921e42517e46f14b59084169210415e0aca1fc902805201415e4a4282f244a3e0845853829ca0d8992074251614e8a7242a2e48250548493a2c2902845201415e5a4a820244a210845c518c52f5100f14b1908c9e19c15541412a518a4821014fdef0556b39ab679b653e7d8d816d1b131ed7a8f8937ce5eefaaf87dded51d2195e3bdc9c9e3bd0fc526897d203651ec7db10962ef898d177b576c9cd858b177c4de167b4b6c8cd868b15162f16223c54688bd29365cec0db1d7c586890d151b2236586c90d840b1b5626bc4568bad125b29b6426cb9d832b1a5629f8b2d115b2cb648ec33b185620bc43e159b2f364f6caed81cb14fc4668bcd129b29f6b1d80cb1e962d3c43e129b2af6bbd86ffe6d3cc2c517fed53ceb7db7c1775ffa6ea3efbef29de73be3bb4dbefbda77dff8ee5bdf6df6dd77befbde773ff86e8bef7ef4dd56df6df3dd76dffde4bb1dbedbe9bb5dbefbd977bff86eb7ef7ef5dd6fbefbdd777b921b67ff1f2b3f1e51b3ce7e88aae9c09d0789fba86a6c4c870e31edc78c8c9bda34a653fb0ed1986be7ece8ee7446d93175ecd221da3807478c8e9b5eb747c72e75da35e8dc3d3e24346e4ab5ce9dba758f7746def960e366558de9d42ab677cd98e80e6d1b76191df261f5989e4ec8e4a6dd3b7719356204e03ff0df35347214845ee104f3a00e01ca2851f23b3402fdb9c5435862cdbbf4d059773869d6fd815c610453424708e79c64770431e3febfb447d19536764069d906941a31f9a754898d6dd57b474829e31c35ce31e31c37ce09e39c34ce29e39c36ce19e39c35ce39e39c37ce05e35c34ce25e35c36ce15e35c35ce35e38618d731ae6bdc50e386193760dc64c6bdcbb8c98d7bb771ef316e0ae3de6bdc94c6bdcfb8f71b379571531b378d71d31a379d71d31b3783711f306e46e36632ee83c6cd6cdc878c9bc5b8598d9bcdb8d98d9bc3b8398d9b6bc4b8b80feb77ee191fea5effbbeb5cffbb13f2ef3e153212f08c3eaed939363aa67d277f493f6a7e1bf18d62637ab6ea1eedaff3bbc774ee34326e7aede8565d2c71f161a546c5cd6a12dd3ea65bf7e8d83a9dda46f77212fcb39be09f43af8f3a10f6afd107e226fb3d7764f2ebff1ce2fcab258e84ac1a8f001aeb7f5d583cad718fcedd63a23b751f83fa7805fc640cf1f151dcb8798c9b7ba5f6de7337b7a3c279bc2bb8b782fce711427e9ae502764a7d8eb0f75fe3cbe9044d39e5336e5ebd9cf2eae5942f71cae904a49cf242ca291f7b399da129a702c6cdaf97537ebd9c0a244e399d8194537e483915602fa7b334e554c8b805f5722aa89753a1c429a7b390722a0829a742ece5748ea69c8a18b7b05e4e85f5722a9238e5740e524e8521e55484bc9cdc5c34e554ccb845f5722aaa9753b1442927371784e7a290722ac678cc07d1743947210f2b1cb9bb853e30418cee3f5bb76e44d2d66d027a8513cc832ace7860e2e7571c7e60128fd97282ccde129465257db70464632e59434a9506e8e14542b41e0d994fbcdd4868032f99d4c013d02b9c601e5429ca062ef995e23cf1861306694d1031bc03b97dcb2d4dbdb22c0d6d4c51498d2901bdc209e64195a16c4c925f99a05e5996a52cab323230cccab27130af2ccb4156968da95796e5a00dbc7c52034f40af7082795015281bb8e45781746559817165991af2d9741ed2de2a52af2c2b421b53a5a4c694805ee104f3a02a533626c9af7250af2cab5096556519186665d93498579655212bcba6d42bcbaad0065e2da98127a05738c13ca8ea940d5cf2ab4ebab2ac4e3def8a42e75d8da47997805ee104f3a06a52ce3bc9af66502f9c6a5196554d191866e1d43c98174eb5210ba7e6d40dbc36b481d7496ae009e8154e300faa2e650397fcea922e9cea52cfbbfcd079f770d2bc4b40af70827950f528e79de4572fa8174ef529cbaa9e0c0cb3706a19cc0ba7069085534bea06de00dac01b2635f004f40a279807d588b2814b7e8d48174e8da8e75d41e8bc6b9c34ef12d02b9c601e5413ca7927f93509ea855353cab26a2203c32c9c1e0de6855333c8c2e951ea06de0cdac09b2735f004f40a279807d582b2814b7e2d48174e2da8e75d61e8bc6b9934ef12d02b9c601ed42394f34ef27b24a8174e8f5296d5233230ccc2e9f1605e383d0659383d4eddc01f8336f0c7931a78027a8513cc837a82b2814b7e4f902e9c1084fdefa529d31a45b78d8eed16dd69d4a878e31cf36fac77735b9fd7bb1a227f7bd2b84fa97f6e474884fcc993f6aefb53d69fb67f3ebff505ad2f6cfffd79eb2f587fd1fa4bd65fb6fe8af557adbf66ff5488f58ef5aef5a1d687591fb03e99f577599fdcfabbadbfc7fa14d6df6b7d4aebefb3fe7eeb53599fdafa34d6a7b53e9df5e9adcf60fd03d667b43e93f50f5a9fd9fa87accf627d56ebb3599fddfa1cd6e7bccee6d3c67de6864fe1a8fd134f5afff4f53fd7cab8ad7957056dc0bd8a2ab9b6c19c5c743027d72e98936b1fccc93d1bccc9c5047372cf057372cf0773721d8239b98ec19c5ca7604eae733027d7259893eb1accc9c5067372dd8239b9ee80e4126bff320374f7b247d2eee51fc81546305b713d09f72e25bb9ecc6f740294367640e9d8069406f746a7778dfb82717b19b7b771fb18f745e3be64dc978dfb8a715f356e5fe3c6fd13af535a1cdda96b8fe81ed18d7ab4ee10d3e6df2f54f2a13fbe542905f54b95fcd97fa78f3a716f72ef4d7393fb6bc6eda7dfe4de4fbfc9fdb5c4b9c9bd3784e77e909bdc5f637f31401f9a721a60dcfe7a39f5d7cb6940e294531f08cffd21e53480bd9c5ea129a741c61da897d340bd9c06254e39bd02e17920a49c06b197d3ab34e534c4b883f5721aac97d390c429a757213c0f8694d310f672ea4b534ec38c3b542fa7a17a390d4b9c72ea0be17928a49c8631caf53240687e0112e575ea1b255f876e77bd91b4dd95805ee104f3a086538af524bfe19c6a6bb72724ca9b9465355c0686515b3f49a9b6063dbc1110b5f593d46aeb11d0063e32a98127a05738c13ca878ca062ef9c593aaade319ef2a4f07694cbd20514651af2c47411bd3e8a4c694805ee104f3a0c6503626c96f4c50af2cdfa22cab313230cccaf2e9605e59be0d59593e4dbdb27c1bdac0df496ae009e8154e300f6a2c650397fcc692ae2cc732ae2cd3401a531c24ca38ea95e53868637a37a93125a05738c13ca8f1948d49f21b1fd42bcbf728cb6abc0c0cb3b26c15cc2bcb099095652bea95e50468037f3fa98127a05738c13ca889940d5cf29b48bab29c483def0642e7dd0749f32e01bdc209e6414da29c7792dfa4a05e387d4859569364609885539b605e384d862c9cda5037f0c9d0063e25a98127a05738c13ca8a9940d5cf29b4aba709a4a3def0643e7dd4749f32e01bdc209e6414da39c7792dfb4a05e384da72cab693230ccc2293a98174e33200ba768ea063e03dac03f4e6ae009e8154e300f6a26650397fc66922e9c6652cfbba1d079372b69de25a05738c13ca8d994f34ef29b1dd40ba74f28cb6ab60c0cb3706a1fcc0ba7399085537bea063e07dac0e72635f004f40a279807358fb2814b7ef348174ef312ff3277b797bd40bc9ff5fdaf5f233edfb89ffe6f3a77de8c162406cb773eac859cc3fa8c73588b3887b59873584b3887f539e7b096720e6b19e7b096730e6b05e7b056720e6b15e7b056730e6b0de7b0d6720e6b1de7b0bee01cd67ace616de01cd6979cc3dac839acaf3887e5710ecb700e6b13e7b0bee61cd6379cc3fa9673589b3987f51de7b0bee71cd60f9cc3dac239ac1f3987b5957358db3887b59d73583f710e6b07e7b076720e6b17e7b07ee61cd62f8061e92ff02d2147432fda73a297ac7fd9fa81d60fb67ea8f571d62fb07ea1f59f59bfc8fac5d62fb1fe73eb975abfccfae5d6afb07ea5f5abac5f6dfd1aebd75abfcefa2fac5f6ffd06ebbfb47ea3f55f59ef596facdf64fdd7d67f63fdb7d66fb6fe3bebbfb7fe07ebb758ffa3f55baddf66fd76eb7fb27e87f53baddf65fdcfd6ff72fd346db7717fbde129dc0bf64fccb77ef7f53ff79b717fe75585ec213cabbec73847309a9018f01cc764e776c064f75c62285eeebca4f642b42a319028a414ed0b668a98dadb7ec2f61680b5b78e84ed2d60dc6e98ec3a71cedd039059d711128594a283c14c11537b3b44d8de52c0da5b57c2f696c2b8cf62b28be59cbb8721b3ae2b240a294547829922a6f676945248ddcab8dd317b3dc7081b1c32bfe3c15c9c27088bf32ed8676f0fc2d2bccbb85d30d9f5e4fc603909f948e80189424ad1a960a688a9bd9d266c6fa960edad37617b4b65dc184c767d38e7ee19c8ac83bccd9995a2b3c14c11537b3b47d8de5c587b7b99b0bdb9c66d8bc9ee15ceb97b1e32eb5e864421a5e8423053c4d4de2e12b6b7e4b0f61647d8de921bb73326bb7e9c73f71264d6c541a2905274399829626a6f5708db5b4a587b1b40d8de521af7794c760339e7ee55c8ac1b0089424ad1b560a688a8bd858610b6b764b0f63684b0bd25336e474c764329e76ea8039975432051482972839922a6f6164ad8deee85b5b737b6f1b5b77b8d1b8bc96ef836cab91b0699756f40a290521408668a98da5bb26d7cedcd81b5b79184edcd316e3b4c76f19c73f72ec8ac835c66c94a51f260a688a9bddd4dd8deee87b5b73184eded7ee3b6c164f716e7dcbd0732ebc640a2905294229829626a6ff712b637af3facbf8d25ec6f929e1b8d496f1ce7ec4d0999776321514829ba2f9829626a70f7831b1c5572a908bb7718ac79bf47d8bcc38cdb1593dd04cec6941ad252de834421a5284d3053c4d4ded212b6b7fb60eded03c2f6769f71db63b29bc43977d34166dd079028a414a50f668a98da5b06c2f6160a6b6f5308db5ba8719fc364379573ee3e0099755320514829ca18cc1431b5b74c84eded6e587b9b4ed8deee366e274c763338e7ee839059371d128594a2cc414c11e6c2979e727a8e9925b318f30b4d6642efc2e4379bb3c41f8214e72c4894d9a425ee5ec094c05ccafcce19f73c26bf799c259e05529c732151e6b176f18c98125840d9c533c897394c7e0b394b3c2ba4381740a22c642df1349812584c59e2a9e4b40993df12ce12cf0629cec590284b58172a073125b08c32bffdc63d80c96f396789678714e7324894e5ac5ddcc594c02aca2e1e62421d4c7eab394b3c07a4385741a2ac662df1fb3025b08eb2c4ef35a12931f97dc159e23921c5b90e1285f33ddba1b93887959b735879388795977358f93887959f7358053887559073588538875598735845388755947358c5388715ce39ac08ce611567dd183a8e59727f4999df51e31ec3e4b791f32b4509c897812f21513672cebc48ce6195e41c5629ca79fc9b09bd1f935f694edaa3388755867358653987558e7358e539875581735815398755897358953987558573585559bf049cc22c920d657e278c7b1293df26ce2f01d520cb770389b289b5c42f634ae05bcafc2e1af71226bfcd9c255e1d529cdf42a26c663d1dce8c29811f284f873399d00731f96de12cf11a90e2fc0112650b6b17df8729816d94f9ed31ee5e4c7edb394bbc26a438b741a26c672d71d02f277752e677c8b88731f9ede22cf15a90e2dc0989b28b75a112c094c06eca854aa8090dc3e4f72b6789d78614e76e48945f59bbf8354c09eca1ccef8a71af62f2dbcb59e27520c5b90712652f6b174f8f298103945d3cad094d87c9ef206789d78514e701489483ac259e02530247284bfc6e137a0f26bfa39c25fe30a4388f40a21c655da89cc594c009cafc4e1bf70c26bf939c255e0f529c2720514e26c6355b773c2c7b8fc99d135d9f33b92c90e41a70269715925c43cee4b241926bc4995c7648728d3993cb0149ae0967723921c935e54c2e1724b9669cc9e58624d79c33b93c90e45a70269717925c4bcee4f241927b8433b9fc90e41ee54cae0024b9c738932b0849ee71cee40a41927b8233b9c290e49ee44cae0824b9a738932b0a49ee69cee48a41927b8633b9704872ad38938b8024d79a33b9e290e4da70265702925c5bcee42221c94573265712925c3bcee44a41926bcf995c694872cf72261705492e8633b93290e49ee34cae2c24b9e739932b0749ae036772e521c975e44cae0224b94e9cc9558424d79933b94a90e4ba70265719925c57cee4aa40928be54cae2a24b96e9cc9558324d79d33b9ea90e47a70265703925c4fcee46a42927b8133b95a90e47a7126571b925c6fcee4ea4092ebc3995c5d48722f7226f73024b9973893ab0749eee53b4f6e47c8e38e1b1a16487657f2bbef49716fcafbee4f953a4dda74e9333c9031d383991fca92355bf61c3973e5ce93375ffe02050b152e52b4587844f11291254b958e2a53b65cf90a152b55ae52b55af51a356bd5ae53f7e17af51b346cd4b849d366cd5bb47ce4d1c71edf1122b9d637a10d4c684313dac8843636a14d4c685313dacc843637a12d4c684b13fa889ceecb19b89c14cb79aa9c3acad99c9c60c9398f9c86c89981ecaccbfeb3ecd2ca5ea6ecf8c9be98ec1ec91e8bec44c8f775f9562bdffde41b927c8f90d5b6ac4965e526eb1b5905c867a57ca248df95ee2473582a5dea4158fb3f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/zk_token_contract.json b/yarn-project/noir-contracts/src/examples/zk_token_contract.json index 90eb7b5be46..c429b041809 100644 --- a/yarn-project/noir-contracts/src/examples/zk_token_contract.json +++ b/yarn-project/noir-contracts/src/examples/zk_token_contract.json @@ -1,6 +1,50 @@ { "name": "ZkToken", "functions": [ + { + "name": "claim", + "functionType": "secret", + "parameters": [ + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "secret", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "owner", + "type": { + "kind": "struct", + "fields": [ + { + "name": "x", + "type": { + "kind": "field" + } + }, + { + "name": "y", + "type": { + "kind": "field" + } + } + ] + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "ed9cf753535914c7f3480820babbf6de7b4f08255801053b6259d7ae81bc6034243104157becdd9717b077404544b1f7de67affbbb33fc2dcede90501eeeca0f3971be3a61e63b4c2699bcefe7dcf3ee3de7de0725ec9f5ad5334f4d86cd94b726c3b121abc89e37c964b3792ae6a6674fc9f4ca1ae13b6f467fef4dade0b996eeb2ba5715886e6b9e4ff2ca5fd20cbae4c444312541d41bf4265d426aae31499798949b6cd41bf549c6247382d160108d89c694d4dcd4145daa3ed120ea2d49a9068b2ef0d3f14b9a2ec41f7a539d104d754634d505d154574453dd104d754734d503d1544f4453bd104df54634d507d1545f4453fd104df547343500d1d440445383104d0d46343504d1d4504453c3104d0d47343502d1d4484453a3104d8d4634a52330f5ed46c3d51cd12cba0a45bbaf56d5476ecbbecaedb8da7375e0eac8d589ab335717aeae5cddb8ba73f5e0eac9d58bab37571faebe5cfdb8fa730de01ac835886b30d710aea15cc3b886738de01ac9358a6b34978e7d1d21eb13e80367401ccd4444534988a692114da5209a32229a4a45343506d1d4584453e3104d8d47343501d1d44444536988a6d2c35e5efd21eb799963e04ae44ae24ae64ae13272a5728de11acb358e6b3cd704ae895c695ce9fef2286392e74a86cb6ab359f34bbd9ecbf3acf67c9b18e00fd1bbbe6de8fc758e0a9c3671b254e2a99c5e54e09c66c976b86595da5331c9612f74cb823774a39eea0cabdde42aceb28a36f36c6789aa6cb2759da02a9fe776387d92447081a6b9e5f511847632c50065869ee3f4649912c16d13ae94ce244ce9ac484a2b429b4531405300533a738a14e69540ae6fb355f2d469f40bd9f490ed27b4607f3ab73fd56f7fc6cc9f62399a15b97715a19d453140d988cb5136f272944d98d2b32329ad08ed6c8a01ca014ce9ec9c1fb81ccd994bbf1ccd0bfb72348fdb9fe3b73fffcf163e39bf1e74c15f8d77b9aff12e9708bc924e190b08c6be22dde53215cb30cb328d91768493e942e9aca76c96639dac8e0afc8e1202bf0555fdb4aaf212a4465596c3255af3edfebcf4ddb13bdc564b7176114f428b5534f3695cf47a2aa78a266760c03482cf533d57ccb716ba45d734bb59dc20347b1dd5f4e3dc7bd0abd64b9035cd968098b274b359a3f594cf7498cc72744c203e31d1c138c578cafd8b91373ef05a2504d70aa25939649a702de90b09b37051644957847611c5002d065cd2172e96883740295ce52ca658edd9dfd47bbb3e02573904dfb184201b49a213aeb96c09e15cb63432972942bb9462809601ce654b9649e138cc410b154927b43c64ae447a532b086e97ef355d3e79396fba56049e2952c92b4d8df397d4305de44aa7080b6d9db2d0be912fbae79aec664741dd84a1a8b10541aabfb03a0c55b3c65f350bea60d51ca50954c79a609721688255736cb3aa99620afb19f665f322ab8422b47914036446dc973523efcb9a09535a8ca4b422b422c500590053da6c91109f62c927d8a62237b52a645306a52999c09499e03bac612e9e8ecbf9bc706adbe481ec5cae555c567f31b57a4d0bfbdd2bf92757fb3f692b689c3d65dad97325d916f5b15f6c8bba3d8a910e284672298c843eef1a68a6b5d0eb067d43dd6097ce84f1e82159d911dd0a1c3d4c728926f77f1c3ca805f99b8387266f4769eb9d4587a165d2fa5b267574b065e2270e75d1d0065b27411b6c995a85e1a0c1025ca3da096b5447a4465584d64131404ec01ad5ee443c68b038490e1a3e231e345808be632dc541c367e0b96c2de15ce68acc658ad0ba2806a810702e5b5b0879d04011aa86fbac94f63e8b2208185cab486aa83d9aa10e91663a7c431569a6bf35f26b35d3c1471ddd4552adaa6ba0438cae3f7453ff8047fc9af5d9356281d59d69cf73153b799f3dd391af68b3b542698bcff7295fab9bbdd634fdbae886b63c360c6d799cbf2dd7c606dbf298b8fa6bb5a2782eb26e20e2549eaac035a7d9ddb39da52aff15d354c1463fbee18aad290abb0a5ec2b944393e4679cdf8ba6bc6b7268d64fdb562ffe75a757c6de282e9d826b8c1d1f9273a13761316f4eb2205bd22b4eb2806683d6041ef5e8f7c265c4498d21b2229ad08ed068a012a064ce9a2e2f0fcad4e597af6649fbc5e908b858df4a7b39b10cfb137239ada82686a2be016ef94191464db10c3cdb643baf240bada8178fc602341db0919f05d90ae7643bada83f847380b48d0f642067c1fa4abfd90ae0e40ba3a08e9ea10a4abc390ae8e40ba3a0ae90af2015fe685742543baf241ba2a8174550ae9ea18b5ab501e1d172d753fb91b29c88e139c36d1c7fb4438e21de217ea050ab2938864511464a710c9d41464a711c93414646710c9a229c8ce22926929c8ce21926550909d4724db44417601916c3305d94544b22d14649710c9b652909521926da3202b472463db29d02a20d13c14689721d17650a05d8144db49817615126d17055a2524da6e0ab46b90687b28d0aa20d1f652a05d8744db4781560d89b69f02ed0624da010ab49b90680729d06a20d10e51a0dd82443b4c81761b12ed0805da1d48b4a314687721d1240ab47b906824a733f721d128fe1b137b008946f13f01d84348b4120ab44788686e0ab2c788644514644f20d3b19402ed2924da310ab4679068c729d09e43a29da0407b8188164341f612912c9682ec1522591c05d96b44b25614646f10c9e229c8de2292b5a6207b8748d68682ec3d22d96f14641f10c97ea720fb8848f60705d9a7d0c9a45a959e9d64a7d86976869d65e7d87976815d649758192b6715ec32bbc2aeb24a768d55b1ebac9add6037590dbbc56eb33bec2ebbc7eeb307ec217bc41eb327ec297bc69eb317ec257bc55eb337ec2d7bc7deb30fec23fbf42f", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, { "name": "constructor", "functionType": "secret", @@ -38,6 +82,58 @@ "bytecode": "ed9b7753135b18c6b36980e8bdf682bd774d4842122b5d40042f76b005b289d190c41010ecb177371bb0774045c4f609ee07385fc0193e8b734f1ab278e59fbcb9f3cc1d32f30c9309ecf9fdce39bbf3be9ba5937d1b54bd0a7f29f63a9a4e14fbdbcb5b7d4d250eaf37dc5b5754b3ad2c226b85513ed48df6a15e087f280a7a42c79ac590a7292a45e4ef85264381d92c5af345a3c9e830e4db1b6d1683d9d2586033da8c169bc5996f3399449bd966b537daad06bbd16c128d2e8bdde432245e53bf171ad27cd1434d43849a8e083503116a2622d42c44a83c44a8d988507310a1e62242cd43849a8f08b500116a2122d42244a8c588504b10a19622422d43845a8e08b502116a2522d42a44a8d588506b10a1d62242ad43845a8f08652080faf5eec7fb9da2530cb688bee8a06a813c89fd9027f34ce199ca338d673acf0c9e993cb378f27866f3cce199cb338f673ecf029e853c8b7816f32ce159cab38c6739cf0a9e953cab7856f3ace159cbb38e673d8f81fd58231bf3e927ce84b89a6644280b22540122941511ca8608654784da8008b511116a1322d46644a82d88505b11a10a11a18a325e5e4d948dbccc31f198792c3c053c561e1b8f9d6703cf469e4d3c9b79b6f06ce529e4298a9547c525f4e2a5698b9be9a1cad286328eba1a51b994cf6959a2dc55c9e5dbc2ef8a831eafd7e3ee9222e1b7bb3ccd01af58213d09f796f87d2d21591521d81efde5fea0e871fb622cd14f6e3154e7f039fdcde51ed1eb8c84fb2a4447a028187474c88220a506d6500c3c50ecf139821df1816a039ddaee22a753d0847baafd0ea7acd686bb77f8db64ad3af153d0867baa5a9b0391ecc47b95d0b32be40ffcfd7386e213e4737bc5c45aa7bb5093d2371c5ab24aa933dc17a3af74d5f8f9b26952f328440876d488795475977ada04557c7aa2924430c0f0f328122598da4a8a05aa4aff7ca637ab92084e8c4c6de92ac22dbd7d6c4b2ba6763bc50255036ee9aa6a09b130da91365406eee9d4a40d655242c904505504c7a8cd70e1f350dec18b9ee1f7f92a786a786a6385d0cebf46fd6b592ee7bfb933f69b75bb7e5e3d65daab6739c169d01bafa41ec054283420935140a6a080545080a47fdd35d15cd6d2af1b8c4375c36ee959a280570bc9c25e45d8cd1428bb99af3e7fc8e3ea28098a8e90e8e4758aa8686834821c1ea813dd9e969018acf439c57661f8c76a7d8a4c978176471f6b7734ba64bba3d52766439f6c7b047db2dd19a7687768766735708dba9bb046dd3356a32aa6760fc502ed05ac5177efa5ae5129a8aaf7525c7cd957eaf23b4a40554d708c7d04bb91647632752ddb47782ddb3f762d534ced7e8a053a00782ddb772023fd36c2540d9d675db4e7999a60c2e05a4552a0c9684053c69ae9cc2dd55833fd2bc8ffab994e6c7db9be411a54cd4a7488bad417669ac44f8dfabfebb3bf88cd9e5099af29d811e07d76b5dfad68b3f542d72f6db6f2bd7ac47bcd88f7dae187d30db5e5d91968cb73626db93e3bd99667e5a4c61a1721b8e11c5f881c55b83f3166a52f541be852c5462c54251bfddca111c7531476bdbc840b8a726e9672ccdcf898b9e34967323556f66fc68afb4dc8496ec709c91b1c3346dce0a0a8363355d0d71316f407c70a7ac5d41ea458a04380057dfd21e4ef841b08b7f4e1b12dad98dac3140b7404704b371c9132f25c5a77514d69543e24c84784a3c3777ca2dc1954e5112cb4399fe02005468a8334c19088140731511cc44270907c8a7adf0aa36335a3cc49811d65b3d1e8902cb10b654e48762cc966b3525c63ad169425269913927d62cd1feafd1d8dbcf79f46dfdb1b1dcadefe5bacb7dfe3137fd7ddab05e543c27929146d06ba735dac97546b93dd39fff63c39969eac3bd7fd7b779efc7a3e4b47d8310f75e7591ae59859f131b3b24967323596f6376325ee4de8921b2a27d99d4fc940774efed85d13e2038a4e44281111ca8508e546843a8608e541843a8ef83c481d85d909c4e9f62242352342f910a1fc88500144a89388504144a81644a81022542b22541b22d42944a87644a80e44a8d388506710a1ce5243a5f38f64a22bfe6a3c4a20768ee0d113f2d93e9f89d94ef380468140ec02a2989ae2a1f88b88661a0ab330a29996c2ec12a2998ec2ec32a2999ec2ec0aa2593185d95544b3260ab36b88664e0ab3eb88662285d90d44331785d94d44333785d92d44b3631466b711cd3c14667710cd8e5398dd45343b4161760fd1cc4b61761fd1ac99c24c4234f351984510cdfc146632a25980c22c8a687692c2ac13d12c4861d68568d64261f600d12c4461f610d1ac95c2ec11a2591b85d96344b35314664f10cdda29cc9e229a7550983d43343b4d61f61cd1ec0c85d90b44b3b314662f11cdea29cc5e219a355098bd4634735098bd41346ba430eb46343b4761d68368769ec2ac17d12c8bc2ec2da2593685d93b44b31c0ab3f78866e328ccfa10cd7229cc3e209a8da730eb47349b4061f611d1ec0f0ab30144b33f29cc3e219a4da430fb9cbe9934a8325e601759985d6297d91576955d63d7d90d7693dd62b7d91d7697dd63f799c4224c6651d6c9bad803f6903d628fd913f6943d63cfd90bf692bd62afd91bd6cd7a582f7bcbdeb1f7ac8f7d60fdec231b609fd8e77f00", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, + { + "name": "createClaims", + "functionType": "secret", + "parameters": [ + { + "name": "amounts", + "type": { + "kind": "array", + "length": 2, + "type": { + "kind": "field" + } + }, + "visibility": "private" + }, + { + "name": "secrets", + "type": { + "kind": "array", + "length": 2, + "type": { + "kind": "field" + } + }, + "visibility": "private" + }, + { + "name": "sender", + "type": { + "kind": "struct", + "fields": [ + { + "name": "x", + "type": { + "kind": "field" + } + }, + { + "name": "y", + "type": { + "kind": "field" + } + } + ] + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "ed5d077854c516ceb96954151050512c28489524541b840e6a682a3e543490252e864d5c1604546415510171b3a1896203a42b88bd626f73ec0d45ecbd377c367c27bb8147565df8defed777bc4e3ee7c6fd124eceffcf69736676760ea7cfdfe4340cafed515238eacc1ea513fb8c0f8cea595852125e3a24bfa06feff2680625f96166b21f665178657ed01f3a63ac2fe41f5511298f6eec9ed7be53870ebeceb9be9cbc9cc2f6b95d4776e9d8be43c7919dbae474c9e9d8a563516e97bc3c5f970e5d3a771dd9b573fbae391df27c39a33b76cd1bdd3efed57863f7f6297ee195da4ba3527b6b546a1f8d4a35d1a8d4be1a95da4fa3524d352ab5bf46a50ed0a8d4811a953a48a352cd342a75b046a50ed1a854738d4ab5d0a8d4a11a956aa951a9561a956aad51a9361a956aab51a9761a953a4ca352ed014afd7ef9bc7c90afc8171ce70b546c4a3b205acf6c8dd697d140c69e321aca6824a3b18cbd64ec2d631f194d64ec2b633f194d65ec2fe3001907ca384846331907cb38444673192d641c2aa3a58c56325acb6823a3ad8c76320e93d1de6c6d13cdc9c51397a771363b6854aaa346a53a6954aab346a5ba6854aaab46a50ed7a8d4111a953a52a352476954ea688d4a75d3a854778d4ae5bb5e5eed11cd9132274f4607191d657492d1594617195d651c2ee3081947ca384ac6d132bac9e82e23bfb23cead1130fbc57cac03be095ea9db252394967a322da4b38ed1d2f71d3a27dfa8697f508fa4b4afcc573e7856f18ea0f1497f8e2485255a30fc0ae96e607838593e6554422a90bb3425c126267e96f314bdb9d3b02887b4061dbec6713e5db79b342ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40ab142ac102bc40af1b090f2ffde47dbafff80638e3dae60e0a0c143861e7fc289c34efad7f0934f3975c469a7178e1c55e41b5d7c867fcc99256303a5656705c785c64f387be2a4c9e79c7bde94f3cd54133617980bcd347391996e2e3697984bcd0c33d3cc329799d9e6721331e5266a2acc1c33d7cc33f3cd0273855968ae34579945e66a738db9d65c67ae378bcd12b3d4dc609699e5668559695699d5668db9d1dc64d69a75e666b3dedc626e35b799dbcd1de64e7397b9dbdc63ee35f799fbcd06f38079d03c641e368f9847cd63e671f38479d23c658c61f3b479c63c6b9e33cf9b17cc8be625f3b279c5bc6a369ad7cceb669379c36c366f9ab7ccdbe61df3ae79cfbc6f3e301f9a8fccc7e613f3a9f9cc7c6ebe305f9aafccd7e61bf3adf9ce7c6fb6981fccbfcd8fe627f3b3f9c5fc6ab69adf98d29888c9614a67ca60ca64ca62ca66aac15493a916536da63a4c75997663da9d690fa67a4cf5991a30edc9d490a9115363a6bd98f666da87a909d3be4cfb313565da9fe900a603990e626ac67430d3214ccd995a301dcad492a915536ba6364c6d99da311dc6d49e29872997298fa9035347a64e4c9d99ba3075653a9ce908a623998e623a9aa91b5377a67ca61e4c3d997a31f566eac3d497a91f537fa6014cc7301dcb741c5301d340a6414c839986300d653a9ee904a6139986319dc4f42fa6e14c27339dc2742ad308a6d3984e672a641ac9348aa988c9c7349aa998e90c263fd318a633994a98c63205984a99ca98ce620a328d630a318d679ac07436d344a6494c9399ce613a97e93ca6294ce7334d650a335dc07421d334a68b98a6335dcc744964535abdf0e2e34a2744b332e3df3333e2df33d2e3dfd39df87787e2df292dbcb46769605c289a569ea277e574288acbccce8a7faf91bd4d76cdf2943db7d33659b552d73327bcaa4f69d0e72f0e54de9f5fb1bcd8172a280df9c6958757f4f31596c50244546c387f4178cd105fb17f5cc817ec1f28f24da484d73577fc074ed68eafd2b3127e3723e17566c2eb5a3bfe6bf1a4fc3889756a574d549df09201e3c79695ef1e7f9d464b86864acb368457f4f2077da342fe09bef0f2c1e34b437e5f20341773c97fbfff6fd0ced9f63f4c33982edd90e463b2e5c70724fdf10cb3b9fac73954003ecea11f8063d13c0a6108fde9230882e2e0fe4729b9a3b7533413a2cbacd4794ee66d00b2525710e46f3385ade4fe362bb9bfcd24370353818e6a522a8ed94c972527ea324afae3d9e657bcdf154002d365510843e8c01485f81a26a45c0ef8401fb5e0225e0657ee6570512f83abf032b83968709acab8b9105de6a55ce0e4682fe3724065dc5c610b51e8e4242d61e6252f05e7ba5a0a1eafa6145cc0347f435226e6272f0517b8510a1e0f2905e7434ac1053a4b414c58ba021cb9cb2b2035bc140398a8b6103c79daf05de965e3bc4a67cd8401b748a1e7c9f6c11c8c5d5eadd0ef70e8aef1b2d75deb65afbb4ea1d7c9be5d39c62eaf57e87538748bbdec754bbcec754b157a9dec998356ce3728f43a1cba655ef6bae55ef6ba150abdee38e98462ec72a542afc3a15be565af5bed65af5ba3d0eb06c89e1fc62e6f54e87538743779d9ebd67a7993661d44979b53debec8d5be49930bdaa459276cb9bf497373f24d9a75e486bb616c69bdcacebaecad5d093145678bcacefa15d2f2c7e0fb41e7d1c45b103b63ce168814a514ddea658a3485b8db5486b8f9b27184c9b6b7ab0c71387c7778d938efd49a7f6fc2e4a79f541ae71a592262f0fdac33b9dc05490b3f41a428a5e86e2f53a429c4dda330c40d924603263bddab30c0e1d0dde765c3bc5f6bee5d86c94d5b55e6dea5b21589c1f79bcec4b2019212b642a428a5e8012f53a429c43da830c40d940d6d4c767a486180c3a17bd8cb86f988d6dcbb183279e98ecadc7b1dd3f5187ce93a13cba3889490ee40a428a5e8312f53a429c43dae30c40d665a82c94e4f280c7038744f7ad9309fd29a7bafc1e4a62c95b97711d3d5187cd93a138b81a4842c8814a514b19729d214e29e5618e286305d8bc94ecf280c703874cf7ad9309fd39a7b576172532d95b97705d34a0cbeda3a13cbf39094500b224529452f7899224d21ee4585216e28d36a4c767a496180c3a17bd9cb375dbe02d1e5d594cfa5e7693f7d9f073a7dff8ab0e5fee9fb57939fbe7fc595d3f7185bdaa8b21a5c270b554cb5b49bca6af029e95560f0edae335cbe062952768348514ad1eb5ea6485388dba435c43d8b0901f55586b8a7a54984c1d740a7ffbe01f1bcfa10294a29daec658a3485b837b586b8bb3121a091ca107727d35d187c8d75faef5b10cf6b0491a294a2b7bd4c91a610f78ed610771f2604eca332c4ddc3742f065f139dfefb2ec4f3f68148514ad17b5ea64853887b5f6b887b0113029aaa0c71cfc9de2506dffe3afdf70388e7358548514ad1875ea6485388fb486b887b1913020e5219e25e944d630cbe663afdf76388e71d0491a294a24fbc4c91a610f7a9d610772b2604345719e2d633dd82c1d742a7ff7e06f1bce610294a29fadccb14690a715f680d71776042402b9521ee36a6db31f85aebf4df2f219ed70a224529455f7999224d21ee6bad21ee314c0868a732c43dc2f42806df613afdf71b88e7b58348514ad1b75ea6485388fb4e6b887b121302725586b8c7999ec0e0cbd3e9bfdf433c2f17224529455bbc4c91a610f783d610f7002604745219e2ee67da80c1d759a7fffe1be2799d20529452f4a39729d214e27ed21ae21ec68480c35586b807991ec2e03b42a7fffe0cf1bcc321529452f48b8729aaf4124084933d198c971cad12dfa7b22d87c1d74da789ff0a31cea32152ba0112ddb21e417f4989bf786e79f886a1fe4071892ffe96f794b5a35f539fc0984e63cb4a7c4c5b2373c22b068c1f5bd67f744169289a961e5edab334302e14a572000b6b7af80385c1497dfcbe92a2816573d216f7f24fa0b4254343a56598f7cae3f3edafc20966a27e4bdd2fdcc1f75b041d033077dca7a5ac56ae0b84496af911137a7ba82c307f905526065f4f95a9c5214852e80191d253a5098889bf8d31813e2af1bdc9f416065f5f9d268eb9a1ba0f444a5fad26fe2dc60406a8c4f7b5ecf862f01da3d3c4d321c6390022e518ad26fe3ac6040a54e2dbc8f41a06df409d269e0131ce028894815a4dfc438c090c5189ef7da60f30f886ea34f14c88710e8148514a5116a68da9a659f8fbfb0a970ff215f982e37c818af95159f59badf2a4d8d3893dd363cf8cd83333f6cc325bd3e45b363b3592ca8b46fbc47e3f3bfefb35d9a9e54eb3f92b8c979ea8b2d9fc05d397187cc374ba586d48fc3811226598e666b3531bd96c76ead8667302bdc20966a2ea6a6c3657e2ababb4d9bc9bd666f32f98d03b5c6581fb93ecf763f09dac33b5ec0e490ac321524ed6ba867b0f63022354e27b87e95d0cbed3749af81e10e31c0191729a5613df823181912af17dc7f43d06df289d265e0f629c232152466935f1cd181318ad12df26a63730f88a759a38e6aee3d11029c55a4dfc138c098c5189ef23a68f31f8ced469e20d20c63906224529457b62da986a9a853b6b36ef166b0fef1e7bee117bd68b3debc79e0d62cf3de3cde386ec34daa56673c3f8ef376667afdf4f51aa96d31032cd7b436c38a0d28663c75600277b20521014b9d7cddd1bdacdddc7767313e8154e3013d544653757f03589b811035255ad112448ee0b0992653a83e400ccd930889432d541725f6890dccf06c9047a8513cc4435551924055fd3882b95ece2fc825e155268362179342576f67763457080c7de88053f1ee1ec2f2461d6cd418dc954002a3281712a294aef0691128458914a8a30ebd60321344fd059928dc06c1242a44c505d921d082dc90eb2255902bdc20966a29aa92cc9045f330faf5b0f8604c9893a83e448cc363344ca44d541f26068903cc406c9047a8513cc4435571924055f7377d7adcd2ad7adcd65dddac28d75eba11e3bd38d5fb7b6109230ebd6c93ad7ad2d1499c0393ad7adc320522643ac0841d18a5efea06f54c83fc1175e3e787c69c8ef0b84e656cc815dfc013bd40dbbaa03760c1b10ec772d57e724ff313badd869b9e10f12c7d221f9057d7b974bd6683931e98f5b99e96ed49e3d3107d52152a6e82ccf7b60deab009172beceacd4320af11148e09eaa332b4d8148391f6245535dcb4ab1cb5c53858938995c5f4de46fc34eebe491bf75f2c8dfc68dc85f0f200373bc769ace90d61a12d2da40fc5529452d218bdad6102b9a9efa6cfd0f4ed6392938a1a82d84a276102b9aae3beac3ec29754b0045feb6327398565fb2f4d02e79f6684bbf7f6771ea53d516dcdf0335c80eb337eceee2041e06eda4b7b79df4047a8513cc44e5a8eca40bbe1ca5971ee4822f3d0085a63c0fdfd00aa2a883876ff80451d4d1c337448228eae4e11b06411475b637d4ed8ca22effb01bea72636ff3cb8b3d3bc49e1d63cf4eb167e7d8b34bfc4d805dd9397c97de34d835fefb47b073a41b537494c78afd3f3f55905379aae02862e7683778ece67953afc66337e1b1fb7f5756d1ed2bab28ec9e79d885ee88121b0eef5bd865de11e822343f725578f171a513a20ec5bf53dab665685a3980c8557d4a833e7f71a0d2a42a5617fb42437da382bed031be49e5e115fd7c8565f9c160e1a4683a45c36b86f88afde342be60ff40916f2225bc76b6a99589502b61759cb538bfa8283d33bce4d8d2c2a26846569c8aac8c2a4ab2c24b2ad7e9e5b5e2afd3a86a198d59ac76773953452bd3492cb7e4c7734b0f767aba11137b792c266e0f7715d846521f6080c27426c4227a21c2e6d29837cfc385cd1f61c76310a75abc99ec3c9ae470b05e877d4a812a581fc26ea65705eb7388a0cacf55c4565abd238be2e543bae362c5d5a97ac5b53e20db8da327158c973c36daef2b928d065fb5c22b832a765a78ed58a7656dd335cb85322cbbb20c93ea2b5e866566c7f9c9ceace229bbaa0cabed4a1996a3fa4d1cbda1b6d8c76e3d25d02b9c6026aaafcaad27c1d717bdf584d1ac9232cc9b0f2ed1d914cd8148e907e9b85da23ac6f583c6b8fe36c625d02b9c60266a80ca1827f806b8b2bdee55c22a57fd98e3034a77358fb51fe7b28ba6702c34f41e67436f02bdc20966a20a544612c157a0f464d3409d279b0679f8e34040140df6f0c74980281ae2e18f23005134d4c3d7d983283ade5e87be338a4ef8875d873e30b65f3c28f61c1c7b0e893d87c69ec7c79e27c477934f6467d82e9d6c3a31fefb27b1f32f37a668b8c78afd3f3f91535079226738b173b21b3c9ee27953afc6e329c2e3a9ae9e6c7a0ff6e9612a4f366d817d721476bf6d843dd9f4ff3ed974ea5f70b2e9a4586e1911cf2da7b173ba1b31b1d06331f19f73b2492ca250e5c9a65f54ddd7e3cd64e7d1248783b519f69178aa607d02fb183455b0be8208fa82e94b6ca535d29e6c4afc5275b2a940f5aeff48a82d8eb25b4f09f40a2798892a52b9f524f88a749e6c2a10cd30279b66e86c8a1640a4f8201db719aa639c0f1ae346db189740af708299a86295314ef0152b3dd9a493b0ca553fe6f8c019c8b812d9c189fd9185eeb5236f9476e490c24051e9d8981b57ab8b8922dbfe70ba0b956e4665a54be95595ae53d568cca85a19504655a55b23a1d24507168fddf7384b6705300673b32a44ca2cd515c018680570a6ad0012e8154e301355a232a109be92886a032f811af8586be009f40a2798890aa83470c117507a82b454e309523da5c96c9da54999a2d264b64ec33e2b65b5f2aaab1585a85502911274e50856f55372a5b1b30765f26c28a351ec953ff63c2bf60cc64f258c6327b44b27e4c6c57f7f3c3b13fee844929a2dfa6d9be1f6e3747622a8727b3eaa25da233edc0161810db528d2488b221235feaa4fde48fe95874a2da9af067276580d9cedea51be848de575f18de59e415f61e80fb695ffe83cdf0e3f76b23c7b9a2fa07afd793674fd39d1ae3f13e8154e30133549e5fa53f04dd2b98d1c10cd30dbc8119d2bb50044ca64c86256778f6d3234c69d63635c02bdc20966a2ce5519e304dfb94ab7911184fd5d7adbe759bf4ba05738c14cd414adbded292a73af9e267254676972bea226329c224ddddaa9c8db71e662e3bf037c5393ba775969e9e861156a046c726372c014092688379380b469a84897468a74a93c97a7a42b9c172b67f4103315f2a6a1b857c92657989d0b229bd2f68eb72a33b79d134cffebdf49b4d637d61fea1d18159c54260ddf634b8babf57bb368ee4edf4654fd757ac2eb8c1dc5656eef0fd770a13f5cb3b23f9c55a3aa3f9c5d73dbdfaa550e38c3109b889a69e155f1bfd93f101a583637adf22f764fabea38d7defe17eb20d6324b65d512f4456b6757ff9bb5637fb3761d2893dbfe568d3ff95b317c756b569963ddaa4e7b63178eb1bab78e0d43d7b117da756c02bdc20966a2a6a95cc70abe69ba1ba417400dfc226be009f40a2798899aaed2c005dff488ab570e4dabbc72683ab173b16b5e500fea0397581fa846ae3082f1804b157a80a0bb547780bf146adc33ac7127d02b9c60266aa6ca002ff866465cbf94aa9ed91a6d103fca398b9dcbdc38ba3b1bb09edbd9cd5ab363675267c5815cce4ee40fcfa446009a543505d4e43f8c220da0b1aadcd53370b9d03370debdd16ea6eaec580eb5b8a8cd8e09f40a279889aa50991d055f85ce3370334533cc19b8393a379a6742a4cc81ecc5cf511de3e64063dc5c1be312e8154e3013354f658c137cf3949e819ba7f80c5c7da8d7cdb75e578d5c610463420b14fa9ca05ba0bba9b4006adc5758e34ea05738c14cd442952945f02d74bfa9545fba317bc67b3157b273951b4da5457f41536951aca974651cc8d5ec5cf3f7682aa979f3ec9ed05875ad6d2a29682a2d549d1daf855adc75363b26d02b9c6026ea7a95d951f05dafb3a9b45034c33495e6e96c2a2d8448590c692acd531de3164363dc121be312e8154e3013b554658c137c4b953695d08481961a37e8bc116b994eb596eb546b85c6b44ebfb15313836fa5cab2a52e3b8d31f856e934abd53ad55aa3f57690f1187c376addf9bd1c83ef26ad8b90ab31f8d6ea749b752a6997ff8ec1e0bb59eb67cf9c81c1b75ea759dda253ad5b75aa759b4eb56ed7a9d61d3ad5ba53a75a77e954eb6e9d6adda353ad7b75aa759f4eb5eed7a9d6069d6a3da0e9e21adfe8d8d748762e86807b10701b810b9c3fe406e7290acc2108b48735427320d01ed1082d1d02ed518dd03220d01ed3082d1302ed718dd0b220d09ed008ad0704da931aa1c99e0f04dc533ac12d8380333ac12d8780639de05640c03dad13dc4a08b86774825b0501f7ac4e70ab21e09ed3096e0d04dcf33ac1dd0801f7824e703741c0bda813dc5a08b89774825b0701f7b24e703743c0bda213dc7a08b8577582bb05026ea34e70b742c0bda613dc6d1070afeb04773b04dc269de0ee80807b4327b83b21e036eb04771704dc9b3ac1dd0d01f7964e70f740c0bdad13dcbd1070efe804771f04dcbb3ac1dd0f01f79e4e706108b8f77582bb0002ee039de03640c07da813dc0310701fe904f72004dcc73ac13d0401f7894670d910689f6a84560302ed338dd06a42a07dae115a2d08b42f3442ab0d81f6a546687520d0bed208ad2e04dad71aa1ed0681f68d4668bb43a07dab11da1e1068dfa50e2db2294d8aa387d979849d47d9798c9dc7d979829d27d9798a1dc30eb3f3343bcfc866bb6c49cbc6ad6c6fca26a06c95c986926cbbc8e684b4f0a5d12ded60699a4a6b511a70d2a692668eb43ca43120cb675964ca524c162c52d64bf12b25a2145252704862960426815e02a2040e71303144993001f61f", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, { "name": "getBalance", "functionType": "unconstrained", @@ -164,7 +260,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d0778545516ce796984a2d2542cd85104944983a820a10908a109abaeb81bc8248e86491c060457d1b10bea4e26340b96a508222af62ef6768f6575add87bd7b5adaee29e99495832e2c0b7f33ff7f8bcf9bc2fe64bf8e7fce79efbdf73ef3d73671e679fb7ce691bb96e606de594e306d6cd1c3a3d386550656d6d64d9b8f28a438634c47228cd2f73d3fd328f2257958702e163a6fac381298dd186d88b038a7a971617fbfb14fa7d45becade856593fb96f42e2e995cdad7d7d757d2b7a4aab06f5191bf6f71df3e6593cbfaf42ef31517f97dd5256545d5bd935fdbbe38a077865f78a3b6d368d4f61a8deaa2d1a81d341ab5a346a376d268d4ce1a8deaaad1a85d341ab5ab46a376d368d4ee1a8dda43a3517b6a346a2f8d4675d368d4de1a8dda47a351dd351ab5af46a37a6834aaa746a37a69346a3f8d46edafd1a8de00a37ebea65f31c65fe50f4df3071bd765ed1a6b6fd6c73a48eb28ad93b4ced2b695b69db4eda57591b683b41da5ed246d67695da5ed226d5769bb49db5dda1ed2f694b697b46ed2f696b68fb4eed2f695d6435a4f69bda4ed276d7f69bdcdfa9e315f21de71451a7bb358a351251a8d2ad568541f8d46f5d568549946a30ed068d4811a8d3a48a351fd341ad55fa351076b346a8046a3ca5d4fafb689f924cd2992562cad445aa9b43ed2fa4a2b937680b403a51d24ad9fb4fed20e9636405a793c3d1a38084f7c70c6c48bf1460dc9d8285fdade688c0d169f0e49a6bb59b1a18744ae1c180ad4d6066ae62f882c1f1f08d6d4fa934c3235632820ae9695874295b3163446a39983591097406c2ffd267a69c3e08e02740f08d61c3feba8dcf69b05b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c4827818a4e1bff7d10e1b3ee2d091a32a468f193b6efc611326fee1f0238efce351938efed39f2b274fa9f257d71c1338f6b8daa9c1bafae343d3c2d3679c3073d6897f39e9e4d9a798534dc49c664e37679833cd59e66c738e39d7cc3173cd79e67c7381f9ab899a0613338d669e996f1698856691b9d05c642e369798c5e6527399b9dc5c61fe669698a56699596eae342bcc4a73955965ae36abcd35e65a739d5963ae3737981bcd4de666738bb9d5dc666e3777983bcd5de66e738f596bee35f799fbcd03e641f39079d83c621e358f99c78d316c9e304f9aa7ccd3e6efe619f3acf98779ce3c6f5e302f9a97cccb669d79c5bc6a5e33af9b37cc9be62df3b679c7bc6bde33ef9b0fcc87e623f3b1f9c47c6a3e339f9b2fcc3fcd97e62bf3b5f9c67c6bfe65be33df9b7f9b1fcc8f66bdf989298b89981ca66ca61ca65ca63ca67ca6564c054cad99da30b5656ac7b415d3d64cdb30b567eac0d491a9135367a66d99b663da9ea90bd30e4c3b32edc4b4335357a65d987665da8d6977a63d98f664da8ba91bd3de4cfb307567da97a907534fa65e4cfb31edcfd49bc9c754c854c454cc54c254cad487a92f5319d3014c07321dc4d48fa93fd3c14c0398ca9906320d621acc34846928d3214cc39886338d603a946924d328a60aa6d14c6398c6328d631acf7418d304a6894c7f603a9ce908a62399fec87414d324a6a399fec4f467a64aa6c94c5398aa98fc4cd54c354cc73005988e653a8ea996692a5390a98ea99ee978a610d334a630d374a6194c2730cd649ac57422d35f984e623a996936d3294ca73245984e633a9de90ca63399ce623a9be99ce8baacf69125a3ea66c4f27293df737392df73b293dfb39de4778792df292bb26c505d705a3896d590e1e8f215572531f3f392df5be537631734643c724b9bb15a676ea72fb26a685dc81fa809c6efcf6f5c51e30f57d485fdd31a222b87f92beb13021193182e5f14593dce5f139816f6878607abfc3329e5e7828dff8193b7f14fd979297f9b93f2736ecacfad37fed73292ca934e6cdba6a9a3da46968e983eb5be61ebe4cf59b4747cb8ae7e6d64e5e040c83f251c98e18fac183bbd2e1cf007c3f33197fc0ffbff8ab6aff97f98e6309dbb36cd6777cbaf774dfbeb39e6d5961fe7d008f8388761001f8be5318887d09f3e82705092dcff885258bdc1457321b69c97b99fd38d3680b332371034dee68ab7d28fb7f3d28fb7b9e4a63055e8c82625e3b880e9fcf48e3a9fd2fefa02f3237edc554084e9fc18c44368618a41c61a4652fe0af8401fb5e4a25e26d7e06572312f936bf432b97968729ad2b8f9105b16649ce0f8b4a7713e501a375fbc8548747c69539805e953c1f9aea68287a9490517312d4c9f0a2e4c9f0a2e7223153c0c920a2e84a4828b74a6821859ba10acdc0d80794ef63163184dbb08dc75bad85dece5c0bc4467be8421b758e1a8930384464c5c5eaa70d4e1d85de6e55177b99747dd150a479d9cdc3560e2f26f0a471d8edd122f8fbaa55e1e75cb148e3ad925965d504c642e5738ee90fcaef4f2c85be1e591b752e1c81b299b8598b8bc4ae1b8c3b15be5e55177b59747dd6a85a36e941c8b61e2f21a85a30ec7ee5a2f8fbaebbc7c48b30662cbf5191f5f146a3fa429041dd2ac116fb97f48737dfa439a35e4c670c3c4d20d2ad73d72b6761924149daf55ae7b16cbf62386df373a4b136f449c8c395f435094bae8262fbb4893c4ddac50e2c6c8263666aebd45a1c0e1d8ddeae5c0bc4debdcbb0433377da772eebd420e2130fcbed739b1dc0e9912be83a02875d11d5e76912689bb53a1c48d96a32cccec74974281c3b1bbdbcb81798fd6b9f75accdcf4a3cab977b56ccd62f8add739b1ac854c093f425094bae85e2fbb4893c4dda750e2c6cb063f6676ba5fa1c0e1d83de0e5c07c50ebdc7b25a4f3b249e5dcbb8c6939869fa373627908312564130445a98b1ef6b28b3449dc232a256e21d30accfcf4a84a89c3f17bcccbc1f9b8d6f97715667eca55199c2b99aec2f0cbd339b918c8b4900b4151ea22f6b28b3449dc130a256e1cd3d598d9e94985028763f7949703f369ad73efc598b9a940e5dc7b21d345187ead754e2c7f874c09051014a52e7ac6cb2ed22471cf2a94b8b14c976066a77f2814381cbbe7bc7cd3e5f3105b5ec8b82ebd487bf57d11a8fafe79f196fbd5f72fa4afbe7fde95ea7b4c2cbda8321b5cc37413265b6aa7321bbc81e9460cbfad74cae54b9024a51d0445a98b5ef6b28b3449dc3aad12772b4602daab94b89b996ec1f0eba073fcbe021979ed21284a5df4aa975da449e25ed32a71cf6024a0b34a897b5a76bd30fcb6d5397e5f878cbcce1014a52e7ac3cb2ed224716f6a95b8e73012d045a5c43d2bdb8d187e3be81cbf6f41465e17088a5217bded65176992b877b44adcbd1809d859a5c4ddc3b416c3afabcef1fb2e64e4ed0c4151eaa2f7bcec224d12f7be56897b002301bba994b8fb98eec7f0db5de7f8fd0032f27683a02875d1875e76912689fb48abc4314602f65229718f33190cbf6e3ac7efc79091b7170445a98b3ef1b28b3449dca75a25ee298c04745729714f303d89e1b7afcef1fb1964e47587a02875d1e75e76912689fb42abc4dd8191805e2a25ee36a6db31fcf6d3397eff091979bd20284a5df4a5975da449e2bed22a71776324c0a752e2ee64ba0bc3af50e7f885dc079ded83a02875d1375e76912689fb56abc43d8c9180129512f720d343187ea53ac7efbf2023af0482a2d445df79d9459a24ee7bad12f7184602ca544adc234c8f62f81da073fcfe1b32f2ca20284a5df483875d141f250085937900334afaa9e4f7ada402187efd758638e48ee3ec7e1094fe8089eeca81a1406d6da0667e4364f9f840b0a6d69f7ccb7bc6d611e0b6f3844d53eb6bfd4ceba3f3222b474c9f5a3fbcbaa22e1ccbca8e2c1b54179c168e5103c00bab07068295a1594303fedaaad1f5f3b2960c0ecca0aca5e3c375f598f7cae3e7db1fc527988efa29f371e10ebf9fa2680dc0dc739f95b159852e384ca6962f31d25bae32c1fc42ce0a30fc06aa9c5a1ccc15bee51094812a434042fc654c080c51c9ef45a69730fc86ea0c7107129c43202843b586f81b981018ae92df6b4caf63f88dd019e2d990e01c0e4119a135c43fc184c02895fc3e62fa18c3af426788e74082731404a5426b88bf870981b12af9bdc3f42e86df389d218eb9ce7b2c0445a98bf230db986a360b7f7e5fe18a31fe2a7f689a3fd8b83026ab7eb35e9e94783a896776e2999378e6269e79667d967ccb67a7555abc586c68e2eff3937f5fc04e6b77369b7fc08cd2092a379bbf9743190cbf893a87581b887e4c80a04cd4bcd9ecb4416e363b6ded66738a7bc527988e6aa771b339ceaf9dd2cde6adb46e367f8391de235426b85f317d8de177a4cea9656bc8a4700404e548ad6bb8573121304925bf754caf60f81dad33c4b78104e72408cad15a43fc6d4c0854aae4f726d35b187e93758638e622d84a08ca64ad21fe392604fc2af97dcaf419865fb5ce10ef00094e3f04a55a6b887f880981804a7eef337d80e177acce10ef0809ce000445a98b3a61b631d56c166e6eb379abc4f6f0d689e7368967fbc4b343e2d931f1ec94dc3ceeccceb65bb4d9dc39f9f7dbb1b3fdcfbb28d3c8e900e966cc95a85355c670a26c0550d9034141b8c8bddddc2ed0dddc1dec6e6e8a7bc527988eda51e56eaef0db31ea8606646a5a478848ee0411c93a9d22391c531b0641a9532d923b414572672b9229ee159f603aaaab4a91147e5da3ae64b24bca2b06374aa2b923c9a32bb1b38b1b2b825d3df6462c787984b38b3809b36e3e5ee3642a0415854048a58bb2fb43508e8744914a1761d6ad984ba0a7eb4cc926610e092128d355a764bb4153b2dd6d4a96e25ef109a6a3f650999209bf3d3cbc6edd13229227e814c94acc313304e504d522b9275424f7b22299e25ef109a6a3baa91449e1d7cddd75eb1ef1756b3759b7eeedc6ba751f8fd574e3d7ad7b8b9330ebd6593ad7ad7b2b0a811375ae5b2742506641a208e1a295830321ff947060863fb262ecf4ba70c01f0ccf6f9c07bbf80356d40dbbaa0356860d10fb2d9bab7de97fcdcebeec745fbb898963d9b8f28a438634c8acd17d66da5fef6bce7223f71c88295487a09cac333d2fc7bc570182325be7acb4451f81b1f9310211ee5374ce4a2743506643a2e814d76625c83aafbd1ad5eec94e8ff4aadd23bd6af77443b52195db4e0fc898eda95790325f4df4808cd9d333f7f3ff10437dd2921317f582b8683f88209dee9e20c534c553e6910012b65ed273985da874eab75f7a71ec453f7fd36be65dd50bbcf504dabbd9df5efeba851db83f7493b7b7dde44d71aff804d3513e959bbcc2cfa7f4fdf885e0f7e383a4a9c8c39787825c54ece1cb27412e2af1f0e5852017957af8f23b908bfad8cbd336e7a2bebfb3cbd30a13ef402b4a3c8b13cf92c4b334f1ec9378f64dbe3fad8c9d03b6e8fd6c65c9bf3f909d83dce8a27e1e4bf67ff9c0db173ff0ee2707defdddf0e3c19e0ff5167e3c58fc38e0bf2babd88695550c76053aecae71448a0da7f706ec9ee92874115a1ebd24b26454dd8c9843c9ef94d5bc0ccd6a003872d5d0ba903f50138c8754e3d535fef078ff94903f7ca87f564364e5307f657d792854392b964db1c8ea71fe9ac0b4b03f343c58e59f49293f3bcd66e522cc4a591de72d29afaacace8d2c1d59575915cbc94bba222fa7c9257991a5f1757a43ebe4cf59d4b48cc62c5607b83c53c5e2d349626e294fce2d03d919e486260ef698266e90bb46ec46d250a0406176262422062364735962342fc0c9e697b0ca0d44c18537273b8f4e72385a9fc02ed05745eb3dd8a5e9aa687d07018a7fe41f36d31a125d9c4c1fb21d1733aed29619d70d41396eac9e55315de6b1ea80bf4a0e1afc2d12af1c6adc6ce2b5719e96d76c6b9e0b69587e3c0d93ec2b9986e5e627fd939fdbe4a7fca634ac8d2b69984ff5fb0b86406371a83d7a4a71aff804d35187a83c7a127e874435de83e6c45d86a98b3f53e7a6a80f82320cb2e376a66a8d1b06d5b8e156e352dc2b3ec174d408951a27fc46b872bcee5587c557fd98f28143754aef48fb49235b180a23a1d23bca4a6f8a7bc527988eaa50a924c2af426965d3689d954d633cfc491520178df5f0271d805c34cec337e5835c34dec337ad835c7498bda97b732e9af03bbba97b74e2bc784ce23936f11c97788e4f3c0f4b3c27244f9327b2f3872daa6c9a98fcfbc3d939c28d2e3ad263c9fe2f57e454c42b728e2476fee8861f8ff27ca8b7f0e351e2c749ae5636bd0afb602b95954d6fc33ed4087bde76b4ad6cfa7f57364dfa152a9b0e4fcc2d4727e7963fb1f3673734b1d2639af8fba96c9288a85459d9f48daaab64bc39d9797492c3d1fa1cf6696daa687d08fb842e55b47e8000c53f5f1e9b694db6954da95faa2a9b2a549ffa4f86c6e2147bf494e25ef109a6a3aa541e3d09bf2a9d954d156219a6b2e96c9d9ba2151014ccd6fad9aa35ce0fd5b86aab7129ee159f603aaa46a5c609bf1aa5954d3a1d165ff563ca078e41ea4a74a3411c885ee4de76e435b21d39ae3258553735318c5be4c544d1e617ce7621d3cd8967ba94dd94e93a4d1b8d394d2b03ca69ca745ba564ba6861815d679879081dabe6664cf726b863a113dc7176824b71aff804d351b52af55af8d5465507782d34c0a7da004f71aff804d3514195012efc824a0b24eb3416486266de7a3533af0bfd96f9c75716b5342b0631ab16821272a580a6658d535de2e4b85e9e1da4754cfc14483c8f4f3c43c933e569ec84b7a8be695af2efa7b3336353f5246a0e589b8f32ede7746c06287eb88a18ab905be311d1d3418b211db5182223fed7bad23ffd57116a5ac83c51f56d94a89ee06a1155ca91de9ae491dea090bf32bc8903bd4d55526df46b27cfb3755441d54ba313a04ba399766994e25ef109a6a366a95c1a09bf593a0ff0826219e600ef5c9d07784108ca899003bc73556bdc89508dfb8bd5b814f78a4f301d75924a8d137e27293dc04338ecb7b2ed7ab21d7729ee159f603a6ab6d66dd7d9518d732f667ff3149dfb9b9a36124f455ebb311f2b6f0ef0dd12eadebea165c30a6b5047e0fe2b46e2668b0c20aad441d67450644b4745b6c40b7e946c7a1625666b3d8e3915f26e84e4a892f397083ba745d7657549eec4e536172065fffa6f51b8ce3f35101e129c129a552ffb9923eb6a5a6c67e6d1fccdbe3fa1e5cfd9293fe76c0c97bb61fbb3950bdb9f05f1edcfbc564ddb9ff905cdafd5ba01707a9ce88882acc8aae46b0e0f8647d7cfcf8abfe280aca60dd5361b5eb12d22555f264979c81f6b93dff235db245eb34d5ba8279b5fabd52fbc56825fbb82a6706cd7b491bc9d0bf571ee2dd322d065dae9769996e25ef109a6a3ce50b94c137e67e82eff3a0d1ae067da004f71aff804d35167a90c70e17756d4d5bb4cce88df657216b173f6a6cbcdcfb1e5e6bf95e9b43d546bceb55ad3c2b9e2118cd2cc51a834c26e8ed232d3b9199b55ec8659e7b95c6818d7e6b989f2c0f3e4d9295922783e3b17b898accc810ac85fad80a4b8577c82e9a8a8ca6445f845958a4803ba561d63564c6729f61c084ae3af508add20dad83ea98fb1ce09b53c27f18c259e8d49d59cc7cefccd5e07767ee25fcc4bfe8b05ec2c74ad145b5e0b7818a02573c418d2498b219df5141a9fe3b142e339d042e345b6d05841a1b1ee4db845d0bcf6429bd7a6b8577c82e9a88b54e6b5c2ef229d85c651b10c53683c5767a17114827231a4d078ae6a8dbb18aa7197588d4b71aff804d3518b556a9cf05bacb4d07831b2d0d8eb957898c525d4a44eda0cea6c97dfee75955d7e6fca14af2dbf3714cd5dcace65b6682e5335b14573b6686ecb15e95268aa7fb94df537064c48dae5988eba4265aa2ffcaed0bd5f771934c0ff66033cc5bde2134c472d5119e0c26f89bb457357c48be696103b4b371e05c9a4685d567b40c7171701404aab11206508103f00a40fc22785886cbc4f3102a410e1589fa77aa7b4140152a2a577305d8ca0535abcd1a26d193bcb65d1d619bf28f3f95a2ecaae8f2fca2604fdbfb42c73a865cd6ffb6653725c5856e5c617014e4ed3b24a8e4a719fdbd2b4accaddf4b22a6fc3a7b6e0963a1b9655f9d92d5f33f1893103f25b413dd9fc5a39bff05ac94565f3a7d214342dab3aba7d57376647e44a9d356b2b749ab552a75957693ca0a59fd829c0f05ba5f200ba1d3bdb61f85dad33ac56eb34eb1aadf79e4dc7f0bb566bb9c5020cbfeb7486d51a9d665daf321ae4bf4331fc6ed0fa3164c760f8dda833ac6ed269d6cd3acdba45a759b7ea34eb369d66ddaed3ac3b749a75a74eb3eed269d6dd3acdba47a7596b355d9ee7af4e7c4d96030d08b97b01c51d2ef8fc3e377c9e21a08f20d4eed748cd81507b4023b56c08b5073552cb81507b4823b55c08b5873552cb83507b4423b581106a8f6aa426870f10728fe924b70242ee719de45642c8199de4ae8290639de45641c83da193dcd510724fea24b71a42ee299de4ae81907b5a27b96b21e4feae93dc751072cfe824b70642ee599de4ae8790fb874e723740c83da793dc8d1072cfeb24771384dc0b3ac9dd0c21f7a24e72b740c8bda493dcad10722feb24771b84dc3a9de46e87907b4527b93b20e45ed549ee4e08b9d77492bb0b42ee759de4ee86907b4327b97b20e4ded4496e2d84dc5b3ac95d0a21f7b64e729741c8bda393dc3208b97775925b0e21f79e4e72f742c8bdaf93dc7d10721f6824970fa1f6a1466aad20d43ed248ad0042ed638dd45a43a87da2915a1b08b54f35526b0ba1f699466aed20d43ed7486d2b08b52f3452db1a42ed9f1aa96d03a1f665e6d4a2ebb22439ba9f9d07d879909d87d879989d47d879949dc7d8799c1dc30eb3f3841cb6cb91b41cdccaf1a61c02ca51991c28c9b18b1c4ec816be6c74cb76b06c9acad6a26cc0c936956ce6c896876c0cc8f2591699b21493058ba4f592fc4a8a288994241c3231cb0426422f8228c221034c02513a4c88fd07", + "bytecode": "ed5d0778545516ce796984a2d2542cd85104944983a820a10928a109abaeb81bc8248e86491c060457d1b12bc84e26340b96a508220af62ef6768f6575add87bd77575575771cfcc242c1971e0dbf99f7b7cde7cde17f325fc73fe73cffdefb9f79eb9338fb3e7ac77da46d60cacad9c7ce2c0ba1943a705270faaacad8d2c1b5b5e71d89086580ea5f9656eba5fe651e49af250207cfc147f3830b931da107b694051efd2e2627f9f42bfafc857d9bbb06c52df92dec525934afbfafafa4afa965415f62d2af2f72deedba76c52599fde65bee222bfafbaa4aca8ba77f26bfb9706f4cef00b6fd40e1a8dda51a3515d341ab59346a376d668d42e1a8dda55a3515d351ab59b46a376d768d41e1a8dda53a3517b69346a6f8d46eda3d1a86e1a8dda57a351fb6934aabb46a3f6d768540f8d46f5d468542f8d461da0d1a803351ad51b60d44fd7f42b46fbabfca1a9fe60e3faacdd63edcd865807691da57592d659daf6d27690b6a3b42ed27692b6b3b45da4ed2aadabb4dda4ed2e6d0f697b4adb4bdaded2f691d64ddabed2f693d65ddafed27a48eb29ad97b403a41d28adb7d9d033e62bc43bae48636f166b34aa44a351a51a8deaa3d1a8be1a8d2ad368d4411a8d3a58a351876834aa9f46a3fa6b34ea508d460dd06854b9ebe9d576319fa43945d28aa595482b95d6475a5f6965d20e9276b0b443a4f593d65fdaa1d206482b8fa7470307e1890fce987831dea821191be54bdb1b8db1c1e2d321c974372b36f4b0c8d5034381dada40cdfc0591e5e302c19a5a7f9249a6660c05c4d5b2f250a872e682c6683473300be21288eda55f452f6d1cdc5180ee01c19ae3673d95db7eb32016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100b62412c8805b12016c48258100f8334fcf73eda61c3471c7ec4c88a51a3c78c1d77e4f809bf3beae8637e7fecc4e3fef0c7ca4993abfcd535c7074e38b1764ab0aefea4d0d4f0b4e927cf9879ca9f4e3d6dd6e9e60c1331679ab3ccd9e61c73ae39cf9c6f2e30179ad9668eb9c8cc357f3651d36062a6d1cc33f3cd02b3d02c32179b4bcca5e632b3d85c6eae30579aabcc5fcc12b3d42c33cbcdd566855969ae31abccb566b5b9ce5c6fd698b5e60673a3b9c9dc6c6e31b79adbccede60e73a7b9cbdc6dee31f79a75e63e73bf79c03c681e320f9b47cca3e631f3b879c218c3e649f39479da3c63fe6a9e35cf99bf99e7cd0be645f39279d9bc62d69b57cd6be675f38679d3bc65de36ef9877cd7be67df381f9d07c643e369f984fcd67e673f385f9d2fcdd7c65fe61be36df987f9a7f996fcd77e6dfe67bf383d9607e64ca62222687299b29872997298f299fa9155301536ba6364c6d99da316dc3b42dd3764ced993a307564eac4d499697ba61d987664eac2b413d3ce4cbb30edcad4956937a6dd99f660da93692fa6bd99f661eac6b42fd37e4cdd99f667eac1d493a917d3014c0732f566f23115321531153395309532f561eacb54c67410d3c14c8730f563eacf7428d300a672a6814c839806330d611aca7418d330a6e14c23980e673a8269245305d328a6d14c6398c6328d633a92693cd304a6df311dc57434d3314cbf673a966922d3714c7f60fa235325d324a6c94c554c7ea66aa61aa6e399024c27309dc854cb348529c854c754cf74125388692a5398691ad374a693996630cd643a85e94f4ca7329dc6348be974a63398224c67329dc57436d3394ce7329dc7747e747d56fbc8929175d36379b9c9efb939c9ef39d9c9efd94ef2bb43c9ef94155936a82e38351ccb6ac87074f98aab9298f979c9efadf29bb10b1a321eb9a5cd58ad33b7d3175935b42ee40fd404e3f7e737aea8f1872beac2fea90d9195c3fc95f5098188490c972f8aac1eebaf094c0dfb43c38355fe1994f273c1a6ffc0c9dbf4a7ecbc94bfcd49f93937e5e7d69bfe6b1949e54927b66dd3d4516d234b474c9b52dfb06df2e72c5a3a2e5c57bf2eb2727020e49f1c0e4cf747568c9956170ef883e1f9984bfe87fd7f45dbd7fc3f4c17325db02ecd6777cbaf774ffbeb0bcd6b2d3fcea111f0710ec3003e16cb63100fa13f7d04e1a024b9ff11a5b07aa38b66436c9993b99fd38d3680b332371034de668bb7d28fb739e9c7db6c7253982a7464939271cc65ba28bda32ea2b4bf9e6b7ec08fbb0a88305d148378082d4c31c858c348ca9f011fe8a3965cd4cbe41abc4c2ee665728d5e26370f4d4e531a371f62cb828c131c9ff634ce074ae3e68bb710898e2f6d0ab3207d2a38dfd554f04835a9e022a685e953c185e953c1456ea482474252c18590547091ce5410234b178395bb0130cfc956662346d32e01779d2e76977a39302fd3992f61c82d5638eae4dc208689cbcb158e3a1cbb2bbc3ceaaef4f2a8bb4ae1a893033b50fefe1785a30ec76e899747dd522f8fba650a479dec12cb5e1a2632972b1c77487e577b79e4adf0f2c85ba970e40d97cd424c5c5ea370dce1d8adf2f2a8bbd6cba36eb5c25177b89cf961e2f23a85a30ec7ee7a2f8fba355e3ea4590bb1e5868c8f2f0ab51fd214820e69d68ab7dc3fa4b921fd21cd5a7263b86162e94695eb1e395bbb02128aced72ad73d8b65fb11c3ef1b9da58937214ec69caf21284a5d74b3975da449e26e512871e364131b33d7deaa50e070ec6ef37260deae75ee5d82999bbe5539f75e258710187edfe99c58ee804c09df425094bae84e2fbb4893c4dda550e2c6ca51166676ba5ba1c0e1d8dde3e5c0bc57ebdcbb0a3337fda072ee5d290722187e1b744e2ceb2053c20f1014a52ebacfcb2ed22471f72b94b85172ac86999d1e50287038760f7a39301fd23af75e0ae9bc6c5239f75ecc7409869fa373627918312564130445a98b1ef1b28b3449dca30a256e34d36598d9e93185028763f7b89703f309ad73eff598b92957e5dcbb9ae93a0cbf3c9d138b814c09b91014a52e622fbb4893c43da950e2c630adc1cc4e4f2914381cbba7bd1c98cf689d7bafc6cc4d052ae7de654ccb31fc5aeb9c58fe0a99120a20284a5df4ac975da449e29e5329710b995660e6a7bfa994381cbfe7bd7cd3e50b105b5eccb82ebd487bf57d11a8fafe05f196fbd5f72fa6afbe7fc195ea7b4c2cbda4522ed732dd89c998daa994cbdb99eec0f0db46a75cbe0c4954da415094bae8152fbb4893c4add72a71f76024a0bd4a89bb8be96e0cbf0e3ac7efab9091d71e82a2d445af79d9459a24ee75ad12f72c46023aab94b86764e70bc36f7b9de3f70dc8c8eb0c4151eaa237bdec224d12f79656897b1e23015d544adc73b2e188e1b793cef1fb3664e47581a02875d13b5e769126897b57abc4dd8791805d554adcbd4ceb30fcbaea1cbfef4146deae1014a52e7adfcb2ed224711f6895b8073112b0874a89bb9fe9010cbf3d758edf0f21236f0f088a52177de465176992b88fb54adccd1809d847a5c4ddc87413865f379de3f713c8c8db0782a2d4459f7ad9459a24ee33ad12771b4602baab94b85b986ec5f0db5fe7f8fd1c32f2ba435094bae80b2fbb4893c47da955e2182301bd544adc134c06c3ef009de3f7ef9091d70b82a2d4455f79d9459a24ee1f5a25ee698c04f8544adc934c4f61f815ea1cbf90fba0b37d1014a52efac6cb2ed22471ffd42a718f6024a044a5c43dc4f430865fa9cef1fb2fc8c82b81a02875d1b75e76912689fb4eabc43d8e9180329512f728d363187e07e91cbfff868cbc32088a52177def6117c5470940e198dec48c927e2af9bdcef406865f7f9d210eb9e338bb1f04a53f60a2bb7a6028505b1ba899df10593e2e10aca9f527dff29eb17504b8ed3c61d394fa5a3fd386e8bcc8ca11d3a6d40fafaea80bc7b2b223cb06d505a78663d400f0c2ea8181606568e6d080bfb66a54fdbcac258303d3296be9b8705d3de6bdf2f8f9f607f109a6a37ecc7c5cb8c3efc7285a0330f7dc67656c56a10b0e93a9e57d8cf496ab4c30df657a0fc36fa0caa9c5c15ce15b0e4119a8320424c4bfc584c01095fcfe291b29187e437586b80309ce211094a15a43fc2b4c080c57c9ef4b39f1c5f01ba133c4b321c1391c8232426b88bf820981912af9bdc4f432865f85ce10cf8104e748084a85d610ff1413026354f2fb98e9130cbfb13a431c73a5f718088a5217e561b631d56c16fef4bec215a3fd55fed0547fb071614c56fd66833c29f17412cfecc43327f1cc4d3cf3cc862cf996cf4eabb478b1d8d0c4dfe727ffbe809dd6ee6c36bf8319a5e3556e36bfc5f43686df049d43ac0d443fc643502668de6c76da20379b9db676b339c5bde2134c47b5d3b8d91ce7d74ee966f3365a379b3fc248efd12a13dc0f983ec4f03b46e7d4b22d6452381a82728cd635dcf7981098a892df774cffc6f03b4e67886f0709ce891094e3b486f8379810a854c9ef1f4c5f63f84dd219e2988b602b212893b486f86b9810f0abe4b79ee9550cbf6a9d21de01129c7e084ab5d610ff0213020195fc3e63fa1cc3ef049d21de11129c01088a521775c26c63aad92cdcd266f33689ede16d13cfed12cff6896787c4b363e2d929b979dc999dedb76ab3b973f2ef776067c79f7651a691d301d2cd982b51a7a88ce144d90aa0b207828270917bbbb95da0bbb93bd9dddc14f78a4f301db5b3cadd5ce1b773d40d0dc8d4b48e1091dc052292753a457238a6360c8252a75a2477818ae4ae562453dc2b3ec1745457952229fcba465dc9649794570c6e94447367924757626737375604bb7bec8d58f0f2086737711266dd7c92c6c954082a0a81904a1765f787a09c048922952ec2ac5b3197404fd399924dc41c124250a6a94ec9f680a6647bda942cc5bde2134c47eda53225137e7b7978ddba3744244fd629929598636608cac9aa45726fa848ee634532c5bde2134c4775532992c2af9bbbebd6bde2ebd66eb26eddd78d75eb7e1eabe9c6af5bf7152761d6ad3375ae5bf7551402a7e85cb74e80a0cc844411c2452b070742fec9e1c0747f64c5986975e1803f189edf380f76f107aca81b765507ac0c1b20f65b3757fbd2ff9a9dfdd9e9be6e3313c7b2b1e515870d699059a3fb8cb4bfdedf9ceb46ee391053a80e41394d677a5e8e79af02046596ce5969ab3e0263cb630422dca7eb9c954e83a0cc8244d1e9aecd4a90755e7b35aadd939d1ee955bb477ad5eee9866a432ab79d1e9031db53af2065be9ae80119b36765eee7ff2186faa425272eea0571d10110413acb3d418a698aa7cc2301246cbda4e730bb50e9d4ef80f4e2d88b7efaa6d7ccbbaa1778eb09b47773a0bdfc752b3bf040e8266f6fbbc99be25ef109a6a37c2a3779859f4fe9fbf10bc1efc707495391872f0f05b9a8d8c3974f825c54e2e1cb0b412e2af5f0e5772017f5b197a76dc9457d7f6397a71526de8156947816279e25896769e2d927f1ec9b7c7f5a193b076dd5fbd9ca927f7f303b87b8d145fd3c96ecfffc81b72f7ee0dd4f0ebcfbbbe1c7433d1fea2dfc78a8f871c07f5756b18d2bab18ec0a74d85de388141b4eef2bd83dd351e822b43c7a5964c9c8bae9318792df29ab79199ad50070e4aaa175217fa026180fa9c66b6bfce171fec9217ff870ffcc86c8ca61fecafaf250a872662c9b6291d563fd3581a9617f6878b0ca3f83527e769acdca459895b23ace5b525e55959d1b597a445d65552c272fe98abc9c2697e44596c6d7e90dad933f6751d3321ab3581de0f24c158b4f2789b9a53c39b70c6467901b9a38d8639ab851ee1ab11b4943810285d9999088188c90cd6589d1bc00279befc32a37100517de9cec3c3ac9e168bd02bb405f15ad4f6197a6aba2f5260428fe917fd84c6b487471327dc8765cccb84a5b665c3706e5b8b17a66c53499c7aa03fe2a3968f0b748bc72a8718b89d7a6795a5eb3ad792ea461f9f1344cb2af641a969b9ff44f7e6e939ff29bd2b036aea4613ed5ef2f18028dc5a1f6e829c5bde2134c471da6f2e849f81d16d5780f9a137719a62efe1c9d9ba23e08ca30c88edb39aa356e1854e3865b8d4b71aff804d35123546a9cf01be1caf1ba571d165ff563ca070ed729bd47d84f1ad9ca5038022abd23adf4a6b8577c82e9a80a954a22fc2a9456368dd259d934dac39f540172d1180f7fd201c845633d7c533ec845e33c7cd33ac84547da9bbab7e4a2f1bfb19bba4725ce8b47279e6312cfb189e7b8c4f3c8c4737cf23479023bbfdbaacaa609c9bf3f8a9da3dde8a2633c96ecff7c454e45bc22e71862e7f76ef8f158cf877a0b3f1e2b7e9ce86a65d3f7b00fb65259d9f40dec438db0e76dc7d9caa6ff7765d3c45fa0b2e9a8c4dc725c726ef9033b7f7443132b3da689bf9dca2689884a95954d1fa9ba4ac69b939d4727391cadd7609fd6a68ad617b04fe85245eb1d0850fcf3e5b199d6245bd994faa5aab2a942f5a9ff24682c4eb6474f29ee159f603aaa4ae5d193f0abd259d9542196612a9bced3b9295a0141c16cad9fa75ae3fc508dabb61a97e25ef109a6a36a546a9cf0ab515ad9a4d361f1553fa67ce078a4ae443719c481e825ee6d475e27db91632b8355755312c3b8455e4c146d7ee16c1732dd9c78a64bd94d99aed3b4d198d3b432a09ca64cb7554aa68b1616d875869987d0096a6ec6746f823b013ac19d6827b814f78a4f301d55ab52af855f6d547580d742037c8a0df014f78a4f301d155419e0c22fa8b440b24e63812466e6ad5733f3bad06f997f7c65514bb36210b36a212821570a685ad638d5254e8eebe5d9415ac7c44f81c4f3a4c433943c539eca4e78abea9ba626ff7e1a3bd337574fa2e680b5f928d37e4ec71680e287ab88b10ab9351e113d1db418d2518b2132e27fa92bfdd37f15a1a685cc1355df2689eac9ae1651a51ce9ad4d1ee90d0af92bc39b39d0db5c25d526bf76f23c5b471554bd343a19ba349a61974629ee159f603a6aa6caa591f09ba9f3002f2896610ef02ed079801784a09c0239c0bb40b5c69d02d5b83f598d4b71aff804d351a7aad438e177aad2033c84c37e2ddbaea7d97197e25ef109a6a36669dd769d15d538f762f6374fd7b9bfa96923f10ce4b51bf3b1f2e600df2da1eeed1b5a36acb0067504eebf62246e96c800a24a1d644d0745b67454644bbce047c9a6675162b6d6e3983320ef46488e2a397f89b07366747d5697e44e5c6e730152f62fff168535fe2981f090e0e4d0cc7ad9cf3ca2aea6c576661ecddfe2fb135afe9c9df273cea670b91bb73f5bb9b0fd5910dffecc6bd5b4fd995fd0fc5aad1b00a7c7898e28c88aac4abee6f0607854fdfcacf82b0ec86ada506db3f115db2252f565929487fcb136f92d5fb34de235dbb4857ab2f9b55afdcc6b25f8b52b680ac7764d1bc93bb8501fe7de322d025da69d65976929ee159f603aea6c95cb34e177b6eef2af33a1017e8e0df014f78a4f301d75aeca00177ee7465dbdcbe4ecf85d26e7123be7b9516b747ec6b617bb61d6052e5709c51d7b7ea2b6e70279764ad6f75cc8ceeccd97f4cfb125fdbf9694a53d54cf2fb27adec2b9e2118c9acf55a8e6c26eaeee64652e34b8ff6c833bc5bde2134c474555262bc22faab456bd015dab8e312ba6b3147b2e04a5f11728c56e90f4aa7d32c58a754e245c7312cf58e2d9984cbce6b1337f8bd7815d98f817f392ff62013b0b5d2bc596d7021e0668c96a308674d26248673d85c6733c56683c175a68bcc8161a2b2834d69dd72e82e6b517dbbc36c5bde2134c475da232af157e97e82c348e8a659842e3d93a0b8da310944b2185c6b3556bdca5508dbbcc6a5c8a7bc527988e5aac52e384df62a585c68b9185c65eafc4c32c2ea12675d2665067bbfc76afabecf27b73a6786df9bdb168ee7276aeb0457399aa892d9ab345735baf48974353fd2b6daabf296042d2aec474d4552a537de17795eefdba2ba001fe171be029ee159f603a6a89ca00177e4bdc2d9abb2a5e34b784d859bae928482645ebb3da033abeb80800525a8d00294380f801207d103e294464e37d8a11208508c7fa3cd53ba5a50890122dbd83e962049dd2e24d166dcbd8592e8bb6cef84599cfd7725176437c51363ee8ffb96599432deb51db379b92e3c2b22a37be0870729a965572548afbdc96a66555eee69755791b3fb505b7d4d9b8accacf6ef99a894f8c1990df0aeac9e6d7caf999d74a2e2a9b3f95a6a06959d5d1edbbba313b2257ebac595ba1d3ac953acdba46e3012dfdc84e0186df2a9507d0edd8d901c3ef5a9d61b55aa759d769bdf76c1a86dff55acb2d1660f8add119566b759a7583ca6890ff0ec7f0bb51ebc7901d8fe17793ceb0ba59a759b7e834eb569d66dda6d3acdb759a75874eb3eed469d65d3acdba5ba759f7e834eb5e9d66add374799ebf3af135490e3420e4ee031477b8e0f3fbddf07986803e82507b4023350742ed418dd4b221d41ed2482d0742ed618dd47221d41ed1482d0f42ed518dd40642a83da6919a1c3e40c83dae93dc0a08b92774925b0921677492bb06428e75925b0521f7a44e72d742c83da593dc6a08b9a77592bb0e42ee199de4ae8790fbab4e726b20e49ed5496e2d84dc733ac9dd0021f7379de46e84907b5e27b99b20e45ed049ee6608b9177592bb0542ee259de46e85907b5927b9db20e45ed149ee7608b9f53ac9dd0121f7aa4e727742c8bda693dc5d1072afeb24773784dc1b3ac9dd0321f7a64e72f742c8bda593dc3a08b9b77592bb1c42ee1d9de4ae80907b5727b9651072efe924b71c42ee7d9de4ee8390fb4027b9fb21e43ed4482e1f42ed238dd45a41a87dac915a0184da271aa9b58650fb5423b536106a9f69a4d61642ed738dd4da41a87da191da36106a5f6aa4b62d84dadf3552db0e42edabcca945d7674972f4003b0fb2f3103b0fb3f3083b8fb2f3183b8fb3f3043b861d66e749396c97236939b895e34d390494a3323950926317399c902d7cd9e896ed60d93495ad45d980936d2ad9cc912d0fd91890e5b32c326529260b1649eb25f995145112294938646296094c845e04518443069804a2749810fb0f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/libs/custom-notes/src/claim_note.nr b/yarn-project/noir-contracts/src/libs/custom-notes/src/claim_note.nr new file mode 100644 index 00000000000..a699ae84302 --- /dev/null +++ b/yarn-project/noir-contracts/src/libs/custom-notes/src/claim_note.nr @@ -0,0 +1,75 @@ +use dep::std::hash::pedersen; +use dep::aztec::note::note_interface::NoteInterface; + +global CLAIM_NOTE_LEN: Field = 2; + +struct ClaimNote { + value: Field, + secret_hash: Field, +} + +impl ClaimNote { + fn new(value: Field, secret_hash: Field) -> Self { + ClaimNote { + value, + secret_hash, + } + } + + fn serialise(self) -> [Field; CLAIM_NOTE_LEN] { + [self.value, self.secret_hash] + } + + fn dummy() -> Self { + ClaimNote { + value: 0, + secret_hash: 0, + } + } + + fn is_dummy(self) -> bool { + self.value == 0 + } +} + +fn deserialise(preimage: [Field; CLAIM_NOTE_LEN]) -> ClaimNote { + ClaimNote { + value: preimage[0], + secret_hash: preimage[1], + } +} + +fn serialise(note: ClaimNote) -> [Field; CLAIM_NOTE_LEN] { + note.serialise() +} + +fn compute_note_hash(note: ClaimNote) -> Field { + dep::std::hash::pedersen([ + note.value, + note.secret_hash, + ])[0] +} + +fn compute_nullifier(note: ClaimNote, final_note_hash: Field) -> Field { + dep::std::hash::pedersen([ + final_note_hash, + note.secret_hash, // Include the secret_hash again so that the public won't know the note has been claimed. + ])[0] +} + +fn dummy() -> ClaimNote { + ClaimNote::dummy() +} + +fn is_dummy(note: ClaimNote) -> bool { + note.is_dummy() +} + +global ClaimNoteInterface = NoteInterface { + deserialise, + serialise, + compute_note_hash, + compute_nullifier, + dummy, + is_dummy, +}; diff --git a/yarn-project/noir-contracts/src/libs/custom-notes/src/lib.nr b/yarn-project/noir-contracts/src/libs/custom-notes/src/lib.nr index b5887c6f86c..2de9e06a636 100644 --- a/yarn-project/noir-contracts/src/libs/custom-notes/src/lib.nr +++ b/yarn-project/noir-contracts/src/libs/custom-notes/src/lib.nr @@ -1 +1,2 @@ +mod claim_note; mod transparent_note; \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/libs/noir-aztec/src/note/note_getter.nr b/yarn-project/noir-contracts/src/libs/noir-aztec/src/note/note_getter.nr index 68e0bbe4aff..eabfb8ababd 100644 --- a/yarn-project/noir-contracts/src/libs/noir-aztec/src/note/note_getter.nr +++ b/yarn-project/noir-contracts/src/libs/noir-aztec/src/note/note_getter.nr @@ -10,23 +10,30 @@ global GET_NOTE_ORACLE_RETURN_SIZE = 321; // MAX_READ_REQUESTS * MAX_NOTE_FIELDS global MAX_NOTES_PER_PAGE = 10; global VIEW_NOTE_ORACLE_RETURN_SIZE = 201; // MAX_NOTES_PER_PAGE * MAX_NOTE_FIELDS_SIZE + EXTRA_DATA = 10 * 20 + 1 -fn get_note( +fn ensure_note_exists( mut context: Context, storage_slot: Field, note_interface: NoteInterface, -) -> (Context, Note) { - let deserialise = note_interface.deserialise; - let dummy = note_interface.dummy; - let note = oracle::notes::get_note(storage_slot, deserialise, dummy); - + note: Note, +) -> Context { let mut note_hash = 0; let is_dummy = note_interface.is_dummy; if is_dummy(note) == false { let compute_note_hash = note_interface.compute_note_hash; note_hash = compute_siloed_note_hash(storage_slot, compute_note_hash(note)); }; - context = context.push_read_request(note_hash); + context.push_read_request(note_hash) +} +fn get_note( + mut context: Context, + storage_slot: Field, + note_interface: NoteInterface, +) -> (Context, Note) { + let deserialise = note_interface.deserialise; + let dummy = note_interface.dummy; + let note = oracle::notes::get_note(storage_slot, deserialise, dummy); + context = ensure_note_exists(context, storage_slot, note_interface, note); (context, note) } diff --git a/yarn-project/noir-contracts/src/libs/noir-aztec/src/state_vars/set.nr b/yarn-project/noir-contracts/src/libs/noir-aztec/src/state_vars/set.nr index 228d34fb830..cec25a34048 100644 --- a/yarn-project/noir-contracts/src/libs/noir-aztec/src/state_vars/set.nr +++ b/yarn-project/noir-contracts/src/libs/noir-aztec/src/state_vars/set.nr @@ -1,10 +1,12 @@ use crate::context::Context; use crate::generators; -use crate::note::lifecycle::create_note; -use crate::note::lifecycle::destroy_note; -use crate::note::note_getter::get_notes; -use crate::note::note_getter_options::NoteGetterOptions; -use crate::note::note_interface::NoteInterface; +use crate::note::lifecycle::{create_note, destroy_note}; +use crate::note::{ + note_getter::{get_notes, ensure_note_exists}, + note_getter_options::NoteGetterOptions, + note_interface::NoteInterface, +}; +use crate::oracle::create_commitment::create_commitment; struct Set { storage_slot: Field, @@ -20,6 +22,17 @@ impl Set { create_note(context, self.storage_slot, note, self.note_interface) } + fn insert_from_public(self, note: Note) { + let compute_note_hash = self.note_interface.compute_note_hash; + let note_hash = compute_note_hash(note); + create_commitment(note_hash); + } + + fn has(self, context: Context, note: Note) -> Context { + ensure_note_exists(context, self.storage_slot, self.note_interface, note) + // TODO: Check from oracle and early out if the note doesn't exist. + } + fn remove(self, context: Context, note: Note) -> Context { destroy_note(context, self.storage_slot, note, self.note_interface) } diff --git a/yarn-project/noir-contracts/src/libs/token-utils/src/value_note/utils.nr b/yarn-project/noir-contracts/src/libs/token-utils/src/value_note/utils.nr index 3dc00c1ca54..12ad02ee80c 100644 --- a/yarn-project/noir-contracts/src/libs/token-utils/src/value_note/utils.nr +++ b/yarn-project/noir-contracts/src/libs/token-utils/src/value_note/utils.nr @@ -52,5 +52,30 @@ fn spend_notes( encrypted_data, ); + context +} + +fn send_note( + mut context: Context, + inputs: PrivateContextInputs, + balance: Set, + amount: Field, + recipient: Point, +) -> Context { + // Creates new note for the recipient. + let note = ValueNote::new(amount, recipient); + + // Insert the new note to the recipient's set of notes. + context = balance.insert(context, note); + + // Emit the newly created encrypted note preimages via oracle calls. + context = emit_encrypted_log( + context, + inputs.call_context.storage_contract_address, + balance.storage_slot, + recipient, + note.serialise(), + ); + context } \ No newline at end of file