From db6121e90501cc2a1340aa74325f1237f3c078f4 Mon Sep 17 00:00:00 2001 From: Marco Granelli Date: Mon, 18 Dec 2023 21:21:54 +0100 Subject: [PATCH 1/7] Validates tx expiration again for decrypted tx --- apps/src/lib/node/ledger/shell/mod.rs | 3 +- .../lib/node/ledger/shell/process_proposal.rs | 74 +++++++++++++++++-- 2 files changed, 71 insertions(+), 6 deletions(-) diff --git a/apps/src/lib/node/ledger/shell/mod.rs b/apps/src/lib/node/ledger/shell/mod.rs index 8e33bf87bb..78752858da 100644 --- a/apps/src/lib/node/ledger/shell/mod.rs +++ b/apps/src/lib/node/ledger/shell/mod.rs @@ -156,6 +156,7 @@ pub enum ErrorCodes { FeeError = 12, InvalidVoteExtension = 13, TooLarge = 14, + ExpiredDecryptedTx = 15, } impl ErrorCodes { @@ -166,7 +167,7 @@ impl ErrorCodes { // NOTE: pattern match on all `ErrorCodes` variants, in order // to catch potential bugs when adding new codes match self { - Ok | WasmRuntimeError => true, + Ok | WasmRuntimeError | ExpiredDecryptedTx => true, InvalidTx | InvalidSig | InvalidOrder | ExtraTxs | Undecryptable | AllocationError | ReplayTx | InvalidChainId | ExpiredTx | TxGasLimit | FeeError | InvalidVoteExtension diff --git a/apps/src/lib/node/ledger/shell/process_proposal.rs b/apps/src/lib/node/ledger/shell/process_proposal.rs index 7fad385eda..11241ff02f 100644 --- a/apps/src/lib/node/ledger/shell/process_proposal.rs +++ b/apps/src/lib/node/ledger/shell/process_proposal.rs @@ -546,11 +546,26 @@ where .into(), } } else { - TxResult { - code: ErrorCodes::Ok.into(), - info: "Process Proposal accepted this \ - tranasction" - .into(), + match tx.header().expiration { + Some(tx_expiration) + if block_time > tx_expiration => + { + TxResult { + code: ErrorCodes::ExpiredDecryptedTx + .into(), + info: format!( + "Tx expired at {:#?}, block time: \ + {:#?}", + tx_expiration, block_time + ), + } + } + _ => TxResult { + code: ErrorCodes::Ok.into(), + info: "Process Proposal accepted this \ + tranasction" + .into(), + }, } } } @@ -1735,6 +1750,55 @@ mod test_process_proposal { } } + /// Test that an expired decrypted transaction is marked as rejected but + /// still allows the block to be accepted + #[test] + fn test_expired_decrypted() { + let (mut shell, _recv, _, _) = test_utils::setup(); + let keypair = crate::wallet::defaults::daewon_keypair(); + + let mut wrapper = + Tx::from_type(TxType::Wrapper(Box::new(WrapperTx::new( + Fee { + amount_per_gas_unit: 1.into(), + token: shell.wl_storage.storage.native_token.clone(), + }, + keypair.ref_to(), + Epoch(0), + GAS_LIMIT_MULTIPLIER.into(), + None, + )))); + wrapper.header.chain_id = shell.chain_id.clone(); + wrapper.header.expiration = Some(DateTimeUtc::default()); + wrapper.set_code(Code::new("wasm_code".as_bytes().to_owned(), None)); + wrapper.set_data(Data::new("transaction data".as_bytes().to_owned())); + wrapper.add_section(Section::Signature(Signature::new( + wrapper.sechashes(), + [(0, keypair)].into_iter().collect(), + None, + ))); + + shell.enqueue_tx(wrapper.clone(), GAS_LIMIT_MULTIPLIER.into()); + + let decrypted = + wrapper.update_header(TxType::Decrypted(DecryptedTx::Decrypted)); + + // Run validation + let request = ProcessProposal { + txs: vec![decrypted.to_bytes()], + }; + match shell.process_proposal(request) { + Ok(txs) => { + assert_eq!(txs.len(), 1); + assert_eq!( + txs[0].result.code, + u32::from(ErrorCodes::ExpiredDecryptedTx) + ); + } + Err(_) => panic!("Test failed"), + } + } + /// Check that a tx requiring more gas than the block limit causes a block /// rejection #[test] From d8781279f63b324536d27cc3eb77688ab501270b Mon Sep 17 00:00:00 2001 From: Marco Granelli Date: Tue, 19 Dec 2023 15:35:02 +0100 Subject: [PATCH 2/7] Updates TODO for disposable signer --- sdk/src/wallet/mod.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sdk/src/wallet/mod.rs b/sdk/src/wallet/mod.rs index c5fe54aea9..670bebddbb 100644 --- a/sdk/src/wallet/mod.rs +++ b/sdk/src/wallet/mod.rs @@ -656,8 +656,9 @@ impl Wallet { alias = format!("disposable_{ctr}"); } // Generate a disposable keypair to sign the wrapper if requested - // TODO: once the wrapper transaction has been accepted, this key can be - // deleted from wallet + // TODO: once the wrapper transaction has been applied, this key can be + // deleted from wallet (the transaction being accepted is not enough + // cause we could end up doing a rollback) let (alias, disposable_keypair) = self .gen_store_secret_key( SchemeType::Ed25519, From 23ce09fc926a900f9e15e9c1e3e42dfbdbf7f163 Mon Sep 17 00:00:00 2001 From: Marco Granelli Date: Tue, 19 Dec 2023 16:15:46 +0100 Subject: [PATCH 3/7] MASP vp checks transaction's expiration --- shared/src/ledger/native_vp/masp.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/shared/src/ledger/native_vp/masp.rs b/shared/src/ledger/native_vp/masp.rs index 54048f6759..ca4fe3bb13 100644 --- a/shared/src/ledger/native_vp/masp.rs +++ b/shared/src/ledger/native_vp/masp.rs @@ -124,6 +124,15 @@ where ) -> Result { let epoch = self.ctx.get_block_epoch()?; let (transfer, shielded_tx) = self.ctx.get_shielded_action(tx_data)?; + + let expiry_height: u64 = shielded_tx.expiry_height().into(); + if expiry_height != 0 + && u64::from(self.ctx.get_block_height()?) > expiry_height + { + tracing::debug!("MASP transaction is expired"); + return Ok(false); + } + let mut transparent_tx_pool = I128Sum::zero(); // The Sapling value balance adds to the transparent tx pool transparent_tx_pool += shielded_tx.sapling_value_balance(); From 883925b35744724b85f54173a3d97cd5bf5583d7 Mon Sep 17 00:00:00 2001 From: Marco Granelli Date: Tue, 19 Dec 2023 19:03:37 +0100 Subject: [PATCH 4/7] MASP vp expiration always required --- shared/src/ledger/native_vp/masp.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/shared/src/ledger/native_vp/masp.rs b/shared/src/ledger/native_vp/masp.rs index ca4fe3bb13..4a9aad9d63 100644 --- a/shared/src/ledger/native_vp/masp.rs +++ b/shared/src/ledger/native_vp/masp.rs @@ -125,9 +125,8 @@ where let epoch = self.ctx.get_block_epoch()?; let (transfer, shielded_tx) = self.ctx.get_shielded_action(tx_data)?; - let expiry_height: u64 = shielded_tx.expiry_height().into(); - if expiry_height != 0 - && u64::from(self.ctx.get_block_height()?) > expiry_height + if u64::from(self.ctx.get_block_height()?) + > u64::from(shielded_tx.expiry_height()) { tracing::debug!("MASP transaction is expired"); return Ok(false); From b71beb157254d709c9f1b1e81129560e0e324aaa Mon Sep 17 00:00:00 2001 From: Marco Granelli Date: Tue, 19 Dec 2023 19:05:51 +0100 Subject: [PATCH 5/7] Updates masp tx generation to include expiration --- sdk/src/masp.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/sdk/src/masp.rs b/sdk/src/masp.rs index 68467e2673..f8d3617270 100644 --- a/sdk/src/masp.rs +++ b/sdk/src/masp.rs @@ -55,6 +55,7 @@ use namada_core::types::masp::{ TransferTarget, }; use namada_core::types::storage::{BlockHeight, Epoch, Key, KeySeg, TxIndex}; +use namada_core::types::time::{DateTimeUtc, DurationSecs}; use namada_core::types::token; use namada_core::types::token::{ Change, MaspDenom, Transfer, HEAD_TX_KEY, PIN_KEY_PREFIX, TX_KEY_PREFIX, @@ -1590,8 +1591,50 @@ impl ShieldedContext { }; // Now we build up the transaction within this object - let mut builder = - Builder::::new_with_rng(NETWORK, 1.into(), rng); + let expiration_height: u32 = match context.tx_builder().expiration { + Some(expiration) => { + // Try to match a DateTime expiration with a plausible + // corresponding block height + let last_block_height: u64 = + crate::rpc::query_block(context.client()) + .await? + .map_or_else(|| 1, |block| u64::from(block.height)); + let current_time = DateTimeUtc::now(); + let delta_time = + expiration.0.signed_duration_since(current_time.0); + + let max_expected_time_per_block_key = + namada_core::ledger::parameters::storage::get_max_expected_time_per_block_key(); + let max_block_time = + crate::rpc::query_storage_value::<_, DurationSecs>( + context.client(), + &max_expected_time_per_block_key, + ) + .await?; + + let delta_blocks = u32::try_from( + delta_time.num_seconds() / max_block_time.0 as i64, + ) + .map_err(|e| Error::Other(e.to_string()))?; + u32::try_from(last_block_height) + .map_err(|e| Error::Other(e.to_string()))? + + delta_blocks + } + None => { + // NOTE: The masp library doesn't support optional expiration so + // we set the max to mimic a never-expiring tx. We also need to + // remove 20 which is going to be added back by the builder + u32::MAX - 20 + } + }; + let mut builder = Builder::::new_with_rng( + NETWORK, + // NOTE: this is going to add 20 more blocks to the actual + // expiration but there's no other exposed function that we could + // use from the masp crate to specify the expiration better + expiration_height.into(), + rng, + ); // Convert transaction amount into MASP types let (asset_types, masp_amount) = From bb9d0131155e39c9df8633a1ca398559f36432fe Mon Sep 17 00:00:00 2001 From: Marco Granelli Date: Tue, 19 Dec 2023 19:11:34 +0100 Subject: [PATCH 6/7] Changelog #2315 --- .changelog/unreleased/SDK/2315-tx-expiration-update.md | 2 ++ .changelog/unreleased/improvements/2315-tx-expiration-update.md | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 .changelog/unreleased/SDK/2315-tx-expiration-update.md create mode 100644 .changelog/unreleased/improvements/2315-tx-expiration-update.md diff --git a/.changelog/unreleased/SDK/2315-tx-expiration-update.md b/.changelog/unreleased/SDK/2315-tx-expiration-update.md new file mode 100644 index 0000000000..058aa005f9 --- /dev/null +++ b/.changelog/unreleased/SDK/2315-tx-expiration-update.md @@ -0,0 +1,2 @@ +- Updated `gen_shielded_transfer` to attach a sensible expiration to a MASP + `Transaction`. ([\#2315](https://github.com/anoma/namada/pull/2315)) \ No newline at end of file diff --git a/.changelog/unreleased/improvements/2315-tx-expiration-update.md b/.changelog/unreleased/improvements/2315-tx-expiration-update.md new file mode 100644 index 0000000000..3259838811 --- /dev/null +++ b/.changelog/unreleased/improvements/2315-tx-expiration-update.md @@ -0,0 +1,2 @@ +- Improved validation on transaction's expiration. Added an expiration for MASP + transfers. ([\#2315](https://github.com/anoma/namada/pull/2315)) \ No newline at end of file From 5245b9a47a13592f3c973ddac60cce95ac516ffb Mon Sep 17 00:00:00 2001 From: Marco Granelli Date: Tue, 19 Dec 2023 21:09:42 +0100 Subject: [PATCH 7/7] Updates masp fixtures --- ...FC7D83CE95D11AC98C8B9343E5EED170119A9.bin} | Bin 9941 -> 9941 bytes ...733C557AA7C18902CB851BB4DB93A834ED187.bin} | Bin 7448 -> 7448 bytes ...6B0C21274416797B6508AE6C759537F947AC8.bin} | Bin 7448 -> 7448 bytes ...AE37AFDAA28B0701ED5D313EA859FC8153343.bin} | Bin 7448 -> 7448 bytes ...C1886347E49C18C8E0F35D25956CA06390B17.bin} | Bin 7448 -> 7448 bytes ...9BB39683C7B8AAB924B267369B3143A3FBF89.bin} | Bin 10382 -> 10382 bytes ...E860D9B5DF041F4645BFC329BE9A03AABFE47.bin} | Bin 9941 -> 9941 bytes ...F934075535EBBEC567084302C3D9B469B83FA.bin} | Bin 9649 -> 9649 bytes ...F5FEC42C100CEB0B19DC6C47DBFE88D42FFFC.bin} | Bin 17018 -> 17018 bytes ...5FC957F905749C47816C307B4B8D580DAE5D9.bin} | Bin 24494 -> 24494 bytes ...288D9729C50CA4AE4D1635C6D82007461517F.bin} | Bin 7448 -> 7448 bytes ...7FA3E6D650FE0B00B7DF477B409EEADFE64C8.bin} | Bin 15597 -> 15597 bytes ...1842690C36EA86369DC2145AED8B139748042.bin} | Bin 15257 -> 15257 bytes 13 files changed, 0 insertions(+), 0 deletions(-) rename test_fixtures/masp_proofs/{30E148B3F9E8D21A41ABB09756027024E9AC79985302DD15C96CB57743A74CC3.bin => 28A7EA5FE79BA929443DE88963FFC7D83CE95D11AC98C8B9343E5EED170119A9.bin} (76%) rename test_fixtures/masp_proofs/{8BA2DA741BF1FE1CDEC5295AE3ECBE1A9EAF3496A30D69069DE2FBD293EEC978.bin => 2E68959DFE3412D892C1EB6A83C733C557AA7C18902CB851BB4DB93A834ED187.bin} (80%) rename test_fixtures/masp_proofs/{553C507BF748CC2353DCE98EB91B5464810F6974083CC2FEE2756ED1E97B8143.bin => 375F008787D3797A051D288892F6B0C21274416797B6508AE6C759537F947AC8.bin} (80%) rename test_fixtures/masp_proofs/{F0471ECBD3AF04B4A373D2966781D5DEF92B9A9BB3A159947560514682CC3877.bin => 68DE980FCC7CC858B090D50340BAE37AFDAA28B0701ED5D313EA859FC8153343.bin} (79%) rename test_fixtures/masp_proofs/{4B412E2EA5AC98758E696AB36327E2CFFC5F8055CE2E2FAFB4DE8E7C2216D5F8.bin => 852AFF2FF8758999DA709605017C1886347E49C18C8E0F35D25956CA06390B17.bin} (77%) rename test_fixtures/masp_proofs/{C506FA6C2EFB37B06CD5A473AF5CC6F78791F8954A0219C07B15344AEE0D2E0F.bin => 9267939E4DFBF958BF98337A9099BB39683C7B8AAB924B267369B3143A3FBF89.bin} (73%) rename test_fixtures/masp_proofs/{BB9AA71A4227C9E62948CBA8DB4A5C2232840271F032F756953233DB3E53E757.bin => AA4BBAF45B9610AD4D2BCBDDF61E860D9B5DF041F4645BFC329BE9A03AABFE47.bin} (74%) rename test_fixtures/masp_proofs/{473EDF0B2908F047110AC52C7F7ECD8CFD237A237C63AA565FC44893414EE7FC.bin => D32DFDE8713AB8AAD01125856B8F934075535EBBEC567084302C3D9B469B83FA.bin} (76%) rename test_fixtures/masp_proofs/{DEDF664AD06184041515677A72699E65D4B40A4E1BC9E7A32D63CF28466A2F20.bin => DA1D4780CBA612D7CBA0004D16FF5FEC42C100CEB0B19DC6C47DBFE88D42FFFC.bin} (70%) rename test_fixtures/masp_proofs/{978C35E058808D61F0E265D72DE8DD6A8E6226394EA6E3DFE1CFC10F69C0ACE0.bin => DC5FEEE0E4971DF2083A9D17D645FC957F905749C47816C307B4B8D580DAE5D9.bin} (78%) rename test_fixtures/masp_proofs/{4CCB9ADD3188CD893508CBB4FCB62D08DAA52F4DE496209BDAEFD36E75EAE98D.bin => E3409A9853B0ECDBE4147AD52CF288D9729C50CA4AE4D1635C6D82007461517F.bin} (71%) rename test_fixtures/masp_proofs/{AE4CEC9192B52E8CE5AB0C25936D2AEEF55A6F202D8EB4564017DB5BEF872107.bin => E93FF3062E6FCF83381BEE364347FA3E6D650FE0B00B7DF477B409EEADFE64C8.bin} (75%) rename test_fixtures/masp_proofs/{D007D1734AD42D34174F04566899481AB5F7C8F57502C5EAB2BF7594EA6CED8F.bin => ECBEE7807835F2DF39FA2924DC51842690C36EA86369DC2145AED8B139748042.bin} (75%) diff --git a/test_fixtures/masp_proofs/30E148B3F9E8D21A41ABB09756027024E9AC79985302DD15C96CB57743A74CC3.bin b/test_fixtures/masp_proofs/28A7EA5FE79BA929443DE88963FFC7D83CE95D11AC98C8B9343E5EED170119A9.bin similarity index 76% rename from test_fixtures/masp_proofs/30E148B3F9E8D21A41ABB09756027024E9AC79985302DD15C96CB57743A74CC3.bin rename to test_fixtures/masp_proofs/28A7EA5FE79BA929443DE88963FFC7D83CE95D11AC98C8B9343E5EED170119A9.bin index 95cd7edf2ec4da5262f5e58d251327e33b84a76c..caa09a7e7d2df6a5ca4eff2cbae8f5dba96fc1fa 100644 GIT binary patch delta 1777 zcmV;M1%|NsC00FiDllPMV#kxU^3>;M1%v2ltR1poj4|C9e1KOooz z>mOaJ2If5opc@9Q(`CReA`gYWCS%RzvzaSX-|~}Q89*RRBwRLM#RAT$X@9z*m1D9g z|54LWiv-QO9fX6XsZI)$z8OFu?!wZyP`~q9+sm4E{RoQ^{G9_4Du9gzW0FUcE%l_Z zlO7sDK_TYgW~gT)VaG^l~k;KVJi@(EZ2?5CWW{e0$&8?M^>4|E3gn z0ujOU2B1OE7XHqoW0atZ(do0G8uS7nXjf1FPxwK1wKTlWiz8iyVnc0Xb&TR(5VogY z^)gSiv$P$g0#L;aPJi6vXgy>cAJ3i{fCs z1|+g?FdV2syc=`X<19a!CLCiZ=TF$M<2cTCk*`;t06uG7me-OQDUqEBli46Ze~)j4 zPetY~vboJrdcdURKPkTX^OaZ@9Bu&KK_~iKT4OK*pJBV)Y}7C^R9$eQgPANDXZe^E zHoHCHql1mPXZj@@_vu_J!C|Q;MC6h0a+_|ALc7rnxdl8FrwbN)7YM(|w+}AH{xtLm zmPlN2+mS1^oGjCz5fkQX3xeg^f3nvNg>SaH)ng6IV7i@Y?d>^WqG5|z^&89Xf+tyMN&unHr(h6Qei!}o#YI;15D&uByzSB=3<%I-qs z8vGL=reVJU>g|ZY!@EoIt3-Rln$Imom$W~zmUFY7+)h3+8~36L#MwByf6ef)!U?a4 zFj!)2r+wb7pvG>-^Io=Ux6w78^Xl{r=Ro-qQM2l09xUDEDB!Z9Dt>h4WA;x_PE?5M zg6Aw#cM=RhP_UXvy%Q`=Y<8LFG$oFTyb1NRlnyi*Z~uEt5knZ)^si z_&xfSIaHP7kF3m;F7vszgqDUxI6OO1$W-N+Dh%%b~fAC@=)87^LWf~)} z)N&BWdd`4zMyP~;B=DJlLamiQj3lHXt~d&jL%WG}UzvwVvTzI3I!7q%qm zlY8Re+2oe~mA38%r|Btr0=9C2y*?(6EUY0zF##YoW4UI(e}@rD&Nl*<-9LM}RwK7W zHCVEyT~C&%Q>bb*S7YG$uBi*50IV)agidLQ=hA+ub@8AK+@DOS@=0QFkP{zTdBe`( zLH3{}yT>W@CDs>Rs$w3?i!+ro#m1)Lz_-Q4-E0bp)Y~HqNjrG+0+<<|){kM1&zXTA zPYM5=Z1ZeIdm+ER-7rXXY)gP`Q#WZx27}G=- zx36>fJonGG`58wFC~SgjymgyX28nNOy~l?1xHeWtOXbRZH)Q3ZC@Mijf()PZft>$j zev~fi=hJ!ucNd7FE`42;f9n6O>UsMdsi1A_e;yxtf26XP2JAO_6!M|8SgKo-2tS(=iW72-fNWIwnPTDH2Q(t(@+Fkc8Q-h2K6 zAItOKA=Qbyi6YW!VoP(m9;?+#GrJiIlP7T>=Ztse&%+J)X14)*oa#x=U4 ztZhP+I#RY-h$y%bKBM`X8J5U>#LJGi4lV@<1x+uWVZs>7$6C*H>yY|Cy6uZ#7Wly? zCCeQPr+^Y&xg>ccQ5^z-d;Ssv1BG~*&{ErEe;g9b%exeRn>TeJiT1Bed+Dcl1!AZy z^}&&^n=mGq90r0Bhi9NIO+z?9-W}uiRUqaaUyanV^?I5GgV?iQicz=Yn`ZY@8^FKy zLSeyga~x57hA^%##6@UV0B4~pbR1B; T3!amTNq{6#=130+lbI$wwrOH5 delta 1780 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 OfeL4rl#B+GFCr0 z9DE@sK-$dxtu2_7qH=TFRa*ql#l;@8R}l09AfyZq@q_=-`(GF9Xp|`eEPPKMyC8GRXCD>96<^6MrF(FTNehV~)J?FI8UtygCqOaW zWu{QGNRRO6ZDmpl3E`{%ksDYW!Z7nje=k9#Kt+Rj4t#Zvfvq|*I`NOF4h4;Z4|z~X z0*3=j=if%Ak$pTcVm)x3+6U=y%&IyF9d^L5zf8PJP~}|*H0G?C^fB>YM-?Nj8%ATX z#YDV4`b=()AIyRM>d!Dmkbq&LlzoCF-PdzHPwJAsf~TVvpHZ(Ud=guC4I$q z)E1@p6CI;()b&l)Y$rjMvCod7g)wbbXSMv=jgF~nwo1x?)r$PE+5QgXXv$1CRK8py#tIJ@QTKe~1J!=nriL z#m%@*$;4R*iB&2rF_}RA_mo$jVO6^y!QKtACyxf47hc2X*Y-g8wV|)E=3{3JHr0i> zK%D+N)pnUqlZd1fZnR8WeGUpY_(IV(Y9il@DmqVG`Z3k$VYmXtrqcSmL7c?7V?wWYlTxB<&oe(f9w`bt7YtKk&0Y5DGekIaIWmK7niP?Rt^d6XO{FQ02gW=UGxx<7EHLX_+8oY{zD>}r3$(0)(mzbB3r0C zL6xFgsCsW7e}hc-;w*nw`1u-|-WJO57-1&|InmPS-5UaA7#DEUMiCIa3M6PK3{prY z#~dQdu1dctLX1}cF3+cFQvqxfax@-|<#++5m6jaPHL?3K-2!&WSj)C2imnpQ!_%V~ Orr4e-%aI6^;M1%|NsC01ONa4lP?VO3IG7>|Ns910001!FAO20Dgg@w|NsC0 zlP(PPAYDL{Scoxe#}{6jPE?rKIU}OBn_3c)2iu5WJEa0&sIx;2^a3CcsV7d&s6h!^ zZ3I4~`MY9l%XSRH`o%sJ)oKUt;ytaiR}l09Ak2dF3k@pTa-CU)?xMVPfu550F$LtY z@7}>;1gEsLn6qmW^a3Em4Q)e1Y}1Uy@v$^rNfn>GF-39{jHLxf-c|99WIMpKe-kAYVBkr*DKH38ax;P9&B-{fbLC&-=KotuSt9Rn*jO9nw-#gFI0SUXNLv5q z`~(Te9?dZwQ==~39TE|3}czg&_Ei&ROI_V zNwm)QE%6sN2}X{N-7Sq zS;=LMnZ5|xR;FBB4YAGv1CFcpf1+F}g0i0A+zO5QbhkjX$s)l6v?ji5M+L78koenxS$j!z7npJY;} zpgP`!$(Z_Io5DE!=IZWV3WmatWA=iJU0uT59Z~jQc`)e;a$|yyDMH z4|RmA9kAoJ40@Rn;;x9(sMP_;W^r3vF$A}#yveiMr~2uPd^`_!;?2$cx3EM;5Tyvd zUUOr&B32KhwT7ix*(bUz$G1mSh)J@++OljM`L?$L4x4H#+m5u1Ocw+FihN%`%g?RS zhxx2_&a{Ut`0yPX`kX9Ff72W%gTLZk6AA}s2pBLNQd?wnYKrMKIW^9kiPwD`Fbe?R z(^?jU(N_SR=oInkEQxJ+ZSMUMlnteB=En!B*Q>b*RSFa}Xx}_pvnP_*Du*5>IWVv! z|BnVPdZZr+8w{}Icb|m}ei65Ca(uyRC3!1;^vujaKGj78eQNOh-FqH&2 OhT;b<`3VJ+ delta 1044 zcmV+v1nc{lI+!{P0RR916#xJL1ONa4lP?VO3IG5B000010001!FAO20Dgg@w6#xJL zlP(PPAYf>&>Mdg{s(Ir)k)oS$JSZQj>fh~vU@q@V7vXwz6|+MP^a3C<{BQUhy{xJA zQ~{86?m(hVOP|r7w#4}M+>^h3V}9K5 z-U;0sR|`bqJcuk|JJpg4fzLVCZ%XW%YU5ZJ^^eqMJBYXEi+gy|C8abSR%vR%e;2Aw zdy1;nE)bQIK-G*t?^GCD>5*0381ap?*=DY2_DA6udgOkP^Sp4Jqw-5fz9=H(hYwbO zpTNb?yE1Q4!*HM!%(t4;&M8L{i+S&W=_*0E?&6ZRfYblNBbW!NURf!(oedy2#y9H! zc>|mCc{2UgbkGX{1zU0roNxDye_TS>ms6eQ+r3&gDCpK^yJ4YuN=f+l4=_#i@cs@7 zd|!N^E~N}iM*)kO#8#^5encI+inxBAM#6tDw(JPIg;U~5)!QrfikjQ6h?!!fh4 z<5ZyT#Q6O6;&j@PBgX{VV2 z@k0=kCC1=KhdElbEtiqimG}NzZ+wjLvPQ#3#I3G?Cy$GaV#oxoA)a2Ox3fFf96FA7 zYsLkPF+{$6pti=)WAgJzfH+TJKKd=2kBVS#d-a=a9WjCUN7FKT&xUkKadT_3M$dvV z6(;A4IkvwYI$7XuDe`OEe~CMCY+t_iD`R=tq+A~+@@{%r+uH-X3AaRgoYe0EBXVuR z=BN)$T3)wi9HPsj8!1d;rHkZ>!-NHq?f&g~yR} zfyjWFJoltD$1rsp!-rsBOQ*ptfg)(Hw_t*SI&M#Umw79u8?E^gMp4=;Pa<}ce581dINRp@Qp3} OgxoC6ipva>kI+!{P>;M1%|NsC01ONa4lP?VO3IG7>|Ns910001!FAO5HD*^us1poj4 z|C25Z^&m%Qk}RZ5-ap=t>>m0t{F>YR;c5fAG12%iEBXP}aUHWm4fFyauICe)ktWMJ z^&0pkyKaZv>VPiSpvmcMOX}uqxQwl~vsV!G0w51+D=z$x@hSHnzuiP-G=+W{j^nTV zIF9}59{Q^*W>&Ln6Z8Tg^O6M8huxExXpKuN!f4Lwzd9(>vwXt(98Nnje_x2pvws#P z1AnouuZcTJZ>OxP&${@JGUV_c{U?vfRwe|gOZk65!DeSZX_B~-d9YRdwck0(c_NJ- zS?f72cT3zJB+cSJ59ZY(QYp8TX39fPG@16Dc7|$F#UMd!zxMER@pRn$=NSnoWhw4^ zeA#r-WHax4FilqnafM=AwEKT9i2Ta1D1UeH*-p4`8faZN2iwgB96OtYW}ifLRZakw zm2IC}-#W!{LY%QK1Q;IU-dMyR5u5v&DcvC>DzdXKh-el|(Hv!y+ed)zZ%>&4bn_Fp zD~ukq4XRFex08qH#yl!iACmW)E>gVC(gyK2@+^M7fEsy`xK8+OjpGW-$w2vj^M8zW z7bvJ-E)4uF|K_jS7Pn)P#%U+FhA312XtTyAG#>ZC7^>)^OxRAT3Y3C#joqX$z3AWG zg*+uwNi+G>wY24Y@^M7UFx47tr7z2o95^7F8Vw| zj`5~`^6qyYco1eO4+bJl?igA{JAYY2R+mAeO#pl7W7$Maoshj!Mi|1VpVd9>NeG)R zQi*!<@}0bd4pNfNwan3sNQ2}-7mk5h-)XMQI$u#i)|TzXmgXo~qmNLCu;Y?lofHN@ z-l35b2ESYCxO7QfN!pkSCK&S7fo~l#bOvv-VTuw(WE|%0mPbirENxWc1TkSA=#-Y!?NDSh0i8;(9?xsFt4j&-6C`J?Gc3Y*P2hIb* zA_VE?erz~RK{Ya5$X^ec3Gq+DE$V^B`t&$ai*;o`dL-AV&+8fr4(;g69jy|>vPDZp Pixg2JE$tl&ljIyUFZvC| delta 1045 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 G0002D%!o_? delta 1819 zcmV+$2juvUQI1gz0RR916#xJL00000k#Q`OS{oFROd$jT00027al0A>6#xJLlQ0`U zAkDwe(@3a+3@!l!f>r_ZjG*}-IxhbO!%?xiK-g!fo|BIoKp^AkFfKrp8$-6y&9?JZ zS!rUpH`2+mZzi1l zRB(=C$)C ztUttX&9)B#)xU%DB~bvJhD>HamG<{m!x~CUa)9~%!2v2XWR1qtAdr+)<$BDblTryz zv>R#-ip&}Df}xo}Xl8g;Xu$V=vvNb3GV>jiF&in7od}c4B0ztpdr*CmdE5g|F)pt! z%;SW7k$0{EehDM-O?=9(mAtYN?lox5u-`$^3A0*Y#$On*Em$~&$R&+$^aFtc&(Q0~ zxWz&zxFNHxk&prG6_JcGzceC@=@40P%iob?x>3Rfw=z`XirVixFIADJ>Kv;8+GP1Vk4~zm>)JHS9 zKILNZ?_i8@CNM~dheMZkkDE=88 zq$?yYJ57HzP6_V`uM+gdc~w1<%7R^?(ft<@rXzWjoc+qjHZ9U8dd?x|#Iso<_bl*}QKV)?pm5m{}tERcq6<=-hyUq~Tvr+`E>p;PBSQ?rY!(o>Ed7?Za!@tV#mgZ#Az^3T|G zEx!#6M5f)jrT4%Xg6T#L6*Pgeg7go%rlh%Bt|nklN<_(24$1;GVQWFjU(0W*{px#8T>`DTn2}MZCG-r8%+YcAKoz$10wavVVGbwR8O#R^ zzRNyVxz{*2oPZdcz_ZJCm20zAinJVZ}#S?#U zI`#`*VhgqvcB%;Y=?3h>fxe@4m_hd!!^bn%YkBS@)J}!{8IvOi9}CM*+HH?Mar?SJs|BO{<|GO!P^sS z7b@!AN)N>efY9P5kSDM8La4XPK=Xflr^f^88aP^oom~D|T(ES%J)@R9cLsxzSRc1) z_;`h4YFXj1@xf~r{%O}UD~ZRd2ihYyBzbr+e@v)33F5G@B4^nY9v*eMK|yOB#XbVY zjkEJk50PV+g9t5TlC?YQS(q}}=Qx}^^IZN*&_QUC5ShDxbIbILk{^6zzngz+U5sWx z^2F_rCX=qLKRRT{IkxB&xk!c+Zpxq@-Z1aT+X&t!WgGv5=ouiL$* zVIh@ItUM9nbQ2m(!Q6>D>2ykZh!2(V3A*6mbf4mz4;EWbM14kx z6(8=yTwy+Yuad_etATf@2u(ENv+5^7ItVPuFS04i_OC7_Z~;U?0+U`SD3e|&6bJ?Y J00000008_>X2Jjf diff --git a/test_fixtures/masp_proofs/BB9AA71A4227C9E62948CBA8DB4A5C2232840271F032F756953233DB3E53E757.bin b/test_fixtures/masp_proofs/AA4BBAF45B9610AD4D2BCBDDF61E860D9B5DF041F4645BFC329BE9A03AABFE47.bin similarity index 74% rename from test_fixtures/masp_proofs/BB9AA71A4227C9E62948CBA8DB4A5C2232840271F032F756953233DB3E53E757.bin rename to test_fixtures/masp_proofs/AA4BBAF45B9610AD4D2BCBDDF61E860D9B5DF041F4645BFC329BE9A03AABFE47.bin index 4764bda55dbf61be71b3a9185159639f7e8c8341..898275796083faf2f0f41ac233dece8c11391be4 100644 GIT binary patch delta 1777 zcmV;M1%|NsC00FiDllPMV#kxU^3>;M1%v2ltR1poj4|C9e1KOl>B zvhS3uDF+Hp;;>t(y`trbj#rHE<`VZ6hqH~Wo6VD689*RQw^#E&cq}^|3b8DZ{lNAe z+jq|Rum;{69hzG8sJTj$z8OFulRsMg3Q2^mB`5kXw1R5lyf2s zW}DBK6N19z_i@7SLiIiTL20v~8uS7n2x^*U@TvUA3$V!_=%veWUlv$H+UcyS}B>4@-E0RgK=NLn1yTw$Bq_!Lw86$t0dU z`+p}LF3olu1`@8xBBu4OTHp^e#5On2ToxL)wY>S>zh-t{bL5dbAP8S?+ZnjI&4{*4 zxroxioU2qhI@!;e7L|aMxXD;rf60Nh*-<+FOIND;G7ZNLn_WxGIIpX^%c`2f-vY#ntJ!!kPxQ*uNIGe_% zY!nHPg(ZFDj_(BH>z8ipW)o5t<{87rXv%3yTB?k})@Cc#Ockg$ko22ke|A^ky)FYJ z()udiQ=a7+wlHdOB7B>aOf@393(tA>&Z2<>0v_1>kxo@gLCOQIPO#?Xr@ol?DWN!} z$D)lAL)oYoGf>Sam%p4q)KGX`*Po@)mLo zmZUrDFQX1_8Nq7U)hvmun?n3YE5IuA%s{6!3Ij>k0Hg#Ec?#UWEytzE$glZov0hZLO&rGD=t{RpT7ts% z$-ob2-+uc5Y?h|?YV;f{7g-*43>tO}Qi``yb88Uba_PBW4UkD=0!;rpf$ zf1Ux!z`2Vle_0$b4?qChQq8`nj2`fkhF+^;LeabElxl31!<}<7;Q!R` zYi@nDf1eXpzms69@=SwI0K?CBL&0<_%p^xiw<3J92wH8bIoI!3w4>*C%3kQ043x-+ zmYLqUuqj(N_F0yt&h3SP;A(xC&(0(*EU$&fa)Ug$FG3)eH`a`V#er zj*BO@R#g;F z-2o-5EVwDQIATs({`rLYsU;DJA1k|XWAcSu(-Fchz3T-e?nlQzEuGe6UB@$v3S=cA T3w};E7^0=W;%4dulbI$wwXJ^{ delta 1780 zcmVUv?gNRsVpXj_ z$VL4Uki(-sZEwq7LTgMvyDS0@7qg%m^a3D`^hr%omN^P4d3SB>^>(?}l;ZsZu?`W9 zoTKNlx9*s;v>l`ZP;d+{8xzqnirqQOqog?;7R{YcJ{#CwLK9bJsWpkwN$p9Fu0aAP zM)wtPd+rKo#ETf_YC<_{#TR@@vRo;m8s}HC+c!HZG1M|eg4Z!FMv@sRk(~&W*&slF zsdtwC%xNalMzSuL-;hki(6*}F8qp={wL>L9``glBdL-9abY5nL;M1n^87d8iAjw#O*PKs@|Q?826RUoMdb z1g0n-+iNi^%1l4GN4re88YVg_uu8b!8?jK&QA`KC{$!oA)*>Cm!zuq4`5?pJ{07%wClo>hzOgjTshu zr)K5p1vmkr$Ll$WX^9C<5kZ@Of?_SE+V!|6qfju~*5EMces1x1EcQSjr69VU5FMR6 zmI7MO?vRIY7(JGw1B@CDftu%%aD1O*HQ*pNFdF5xb0x^x_lHw!mb1Oa%JKd9MuMXZ zI=9=->bne||dJXF)PwJ8g%`a_lKM>Z=As%iTvrPYK}AJ#}d2$}c6uh(VT&zaLLz?6HE z84P=TrB^gfR}g0=hf6B3oZgmt2G7u=zKE6m7?Dyba+4l?;geF%ifqU1nRN6DHl#;a z{INhZXYlmE3x97Uxw&9}E1+!v1ys9$Y`WNO7gLjV0K1OQu~S=Gp_z;jA#IkumxgK5 zJyXT?$=d$dp?dG9DdNQikF%ECopN?i@doet=U{7;1rhA*mMo6Ydvn=_+i@(4RTh1* z!n7&DWb`8(U8bY(!FIXrGzQDiaRinj0|OyP$<4fJOJ+)@ICdg`2=nX-BLIrhN19Q= z_}8m}9sE{-m$>C|A>RI;H|EunIlW6t3xU{{mAuYE7fthTFv`EkTB)MNkQ^HqNi6m%D3M$u#VjEX|7nPKxLRmUpUqD*zfCA_e? zMY4}V`Me&2s`73&i!wxU=@MO5il_@bLZ9isKvYqtHiX%~y3mXEec++dZjrYR+*3Bb zr$>lM>W9ie}YA6#vx(li+9W zYm?L?;24}2JE}$x=_mm#bGla&h_d49ryt$4AuH-(DIojDc)`F!o{aOFhcK(p9caB) zMc1EGIz~8u;~2k#;7Q^g$bln7o9nniQbs4qwSZcTASUPlB&s>+%|tmo)IS{bI$%d~ z1$SJxj>`e3r<;sOPNFd*Us!yggG|Q`)0xhy53nsjq?GiX;ODLR*r3A9fb>9u=;k=Q z-r)_xmWO;iX%uud{EL8|(nBj?n3Dta?`3Bau6$a52b4<(TCVAn@dCI2IBkQTmx7$+t2pI%Vy W=;u!h2co!P`<=KxueA%4nI=3IYiXGP diff --git a/test_fixtures/masp_proofs/473EDF0B2908F047110AC52C7F7ECD8CFD237A237C63AA565FC44893414EE7FC.bin b/test_fixtures/masp_proofs/D32DFDE8713AB8AAD01125856B8F934075535EBBEC567084302C3D9B469B83FA.bin similarity index 76% rename from test_fixtures/masp_proofs/473EDF0B2908F047110AC52C7F7ECD8CFD237A237C63AA565FC44893414EE7FC.bin rename to test_fixtures/masp_proofs/D32DFDE8713AB8AAD01125856B8F934075535EBBEC567084302C3D9B469B83FA.bin index 2b6a1976a213269ab230b641d7365eabe7a92c5a..f6344ef81229392739f440ceb416268968ec3204 100644 GIT binary patch delta 1709 zcmV;e22%O4OR-A{>;M1%|NsC00FiDlkvKI3>;M1%v2o@X2LJ#6{{R7z5Ii9QeKcd9 zF8kT@6ni6~y^rW{T=}`0i=!rfo98X@A5Eoele!o{AVlR@=vtlwWNQW^=M9 zTJrZYU4!+T3`QQacp{$DIwbWU?||SisRC%i>%0Q;wgv?(rD0WGOM>eU0}d#+(Ye4} zc^o_V3m2vQ1qYzBycwhde|Q-`!YKefqg$DF1*7K-3Z!#~Nr32WhYrZeRbvGlm)WO| z-WA)UcGCf`5+ve`dgpUe`N?aQ!9!><#r5_+;reKcE412B-4pp4=R%ABzlE#uW_6c7 z>eWP?04aZsoz}ybyZ*WhK4<-ieKDK51@$61AmDA&^VIX z1xhWN2v8KJao2OSWdhqjtZxe<;gz|41B)x`TV+Jj4oDahZ*g18W^svs7n*ciwR+NA zXy}j$l>q*5P+JUEiq=9Q$ed5&jX&Bw3eH9EY!NpU$Y$c{(yj?h#Uzf9mQEa9y=lm~r4)U*eu;QWd5(Hwh_erMeK5^47^qQcnFMarw5y7;!}+&1*Upo)d1@lG@6GUVi}6f@ zi{7eTT#uZWu6AoPw6zZTat}q%8$0~?B;qW&-Asrt0v-lTNPc@ZSbxuEJYHV#JjL~? zuHVh}%}fgj_WWzTR2J-%rOHWKVXmH@5WXK1*jbcyAfGMCY>UrvH#j0_rDfFMYVLG@ z0XM{Kb5KM5}87u(6E8BxW}Sk8PPx0j7eu_BSzM`%Rpd#1R%#XxCi? zFci%!P~r94)W^kO^nW!qb2^NS>8nhdvcCv$zd_6yDN6sA5-FoN7+plpR1YpJi%E{6 zG9S;WcgD_vN;!BhVSu&3q#O5I=9iP?ieMmF0K1P?k>cwyo7QKTiAgC3Q=V`8n33io z%s?QeB1y;@(+IX?`*m_2I3lkUVFvw7l`C73@^`5Y;6I?SJb%WnK?IGq0AvA5i^D>N zWHaHm#jkv4NSBS-o5?l)yuvqXa4KZds5&5NVHttg~L$6fq9T#|eH4&pGVAC6Wdm;W6~0ys_#lHi%Blahhhh z-WCPn6QBw6FMkh2w6d(r`m2&L23|HwdW&qoxe1aN=^y&P_Tr!T?64K-AEpdLxs09D2~bDPtZBlw;o_{0 zVkevjO@)^#Mz*ZV@f(Z^7n*U!3HdBBDb#9ZoB{-*!z#PqEYGm^|H2=Mtm3~>u9*%P zZee7AmLXvN*Bl`(sMaz zU#)`Sn<-=&7y0j!#F|e!Bc_4 zEau~ApGSbFvxr#6&~dMb+NEeV;>#6;&yiudS^}OGNr%j-uxj%l^D0eN6&b81?vvws z_J1951#9a@nE&F7o7S0;Wxg&lo(w!Ylc4N^2JvG|&=66z^|WTJ1=ZvL9Tu78s@Plz z3~;GRdcn^lQU=o@y>R`y0mbA>7wRjqTSMtDvqG{xlW@K6eVi@M08cV9LVuZA#>4LsdreNx?NCmL&F6&ryT%{1JtXTw+dJ zIVu@ugqKYBkL$5F#k`o~`0t9l$hMaZL1q68$D?=}xbw((M$QSh`s1k&T&Xz;lXWFL Dwx~|x delta 1712 zcmV;h22c61OR-A~0RR916#xJL00000k#Q`MI5h+T00027apo5W6#xJL00EH@JRt(P zV+}N^=g*?yzUzl<2KV{YfKM-k3pvt;3M2{l>+ceix)?wpvCl+{pJpk5B2z`$xF_tR zISDoFjyBu_V41SLIavn)lNuR8VSl^a1Ll66L|s2a*435&wxqAh<2A{s@O-HVWTaiO zDqZB{K#TTbOQ;`YAY=Y+s0%f#N5$7*`OIkA}0n8KeS#MqTfYk)ep%jM=Pc+jMRcrLT4#HgNl*)pO@3r-EJ#eq$csDai3t@?;B8N2-K1Pm+0VOmumC4sP;ae_5;Atow3X zm0>h$k$Pe-;Vk;=z>-zPyUXHxGifwU*}=OMc1~gOJRHdNV|2?9)55x+|M-OS7q@`O zW}AQBu|fECk>BX|$Et8~d0!*(}hPAi&9b`Y7qd+b9tR^k^ zB`_kYHg(XldYDHrL7^w?m40g>$F>9J&1 zkNhiw@|$IjaQGhD@+luDg{fV%AXqPG_jf_|cLHYw=v^w3#o(bTJeFs#5z`e27)TqQ zJh7bI`^ye&T$ePdpVL?r0Lbg=3Z*#FsbXnHC2L|}L%N;)mfvU_e|&!13a#R&x?BXSO%!2ZKp zrr{edT}=^>Bt1}-s&G??uvSPP4hap&+@#|)6#=Rn43`fumWOgPZ>%zgOzW$rPERC{ zR6Q+nlX5d+&g(?G)E4hdE&wJYe{gJ(5p1K}5tBn@2bD=mf80G_{tQ-v$Oczse?k=1=HXN^tky0bHb&%4LBFrP3homM~x@odYhw!kBf(k~E4zqhZafSev9?fVAWs(bZM{ky~p31XL z>K`7n^PX450)`!2yv=sqWOY80-7tTy29b8;aURwCf5t0S&23MQ=6Y*)8bx7b2G_&M zoA(Ti&$#%dTq4j`gL>X~Bqo~?H`~XcuD6SY{;EN%44>ZS_geC<9h2Dgz|mQe(;>}c zNVoJ{s18o7$*oAUDe2Q0{`CPWtnBvoGp{w|cr{tH%Z~dha;G7{V(NXHrvY4t7_Y2T zm1EHve_c6;Q~=2gp;cN5ALIF?w|<;s_UmhDOFfrzW)Km045kBrp9VP4NGb@%IJLqU z6siA!$(d4i{JN{Em;I|wn;uJM!2}byUAp*rsu@C3-|FiP@&_PGel08E$oukoSoqw)O;* GbtOD_KRrAE diff --git a/test_fixtures/masp_proofs/DEDF664AD06184041515677A72699E65D4B40A4E1BC9E7A32D63CF28466A2F20.bin b/test_fixtures/masp_proofs/DA1D4780CBA612D7CBA0004D16FF5FEC42C100CEB0B19DC6C47DBFE88D42FFFC.bin similarity index 70% rename from test_fixtures/masp_proofs/DEDF664AD06184041515677A72699E65D4B40A4E1BC9E7A32D63CF28466A2F20.bin rename to test_fixtures/masp_proofs/DA1D4780CBA612D7CBA0004D16FF5FEC42C100CEB0B19DC6C47DBFE88D42FFFC.bin index 456bc93bb45167a7c842df5ab01057b96f38b569..7ac831cc950577636f40f3d6b2fd1722575b72bc 100644 GIT binary patch delta 3098 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 delta 3098 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 diff --git a/test_fixtures/masp_proofs/978C35E058808D61F0E265D72DE8DD6A8E6226394EA6E3DFE1CFC10F69C0ACE0.bin b/test_fixtures/masp_proofs/DC5FEEE0E4971DF2083A9D17D645FC957F905749C47816C307B4B8D580DAE5D9.bin similarity index 78% rename from test_fixtures/masp_proofs/978C35E058808D61F0E265D72DE8DD6A8E6226394EA6E3DFE1CFC10F69C0ACE0.bin rename to test_fixtures/masp_proofs/DC5FEEE0E4971DF2083A9D17D645FC957F905749C47816C307B4B8D580DAE5D9.bin index aa8cdbab4d60086141eddf273fb89a0e3e3cb3cb..a8ef2782352ea711a83288d5f20e265a65ea35e3 100644 GIT binary patch delta 4206 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 Ed>ec&&;S4c delta 4209 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 delta 2781 zcmV<33L^EHcbRtx0RR916#xJLkq9XX0RR91000000h66GAhBAtA|@38000000@6Nd zq}S3l!bQ-Ly*-@l3=O0E#lfd6MPML(`uWnb{v?%)YPWw{uhq3hp5NO`3Z$lFCNwSFntTCBsvs)*X0)JwqDZ(pm zU$~NUIZ|`dF9$&)jjk?E+~_F}A8Zr}FqV@DEpYppAG?>;zf2){QV1O(3z3Z2e(03y z45SvPqVpu%sb(Zm;c$pLutgoQst9)x=uN$7{vax!Xm|n{VkS3v&c947ivtt=_O5NB7ulQ8J20rn(xK5HFA=tROM! zBqJt!tR%~=S3LM`f?)8&HnzmUc>@0swCkK$z3BbZw)Hn!F1~VAH}b4(O*MYoTM!9j zH5gOV=R>C!nZ&CTgzehlgAI*nGXk#c@Lb@0qGMPPG~;)J8|`&1#^0T=>RYpeEtLX) zGGW93PC{84#S5|hO2?}$x;$H3DnpauYgKG6#JDmD)aGykDd)^__OsPd+rcH)rCL3V?8lj?r#UkJinT;1rf z`yn`z=}gAU9nvDdGuL~=yy*DEGXR-rm6IbtE|t)YQY5?a7%AB)T_ae5E9Gmr)IFLB zMrRAWRIdrK_kR?VnRs+K#)AQ*`Y?VM)i6NZ`rp-5w220*T#k&Aqty^a5*mCdi1DnTec@e?G1!nxnS^+Y8!1^#-osBS=4x z7*8FbTz?i>j17t&(#BqErcU2rT%01pp~^??Xi12~I7 z0e{M9omqb-+49sp(`mq-`}z~eR^B9gA_!`F{X|S$XhHCuUN;k66ciD=YeNNtnk&ED zP>g`QgtX!5A_f`)hf3O~|G`;x{VJx4-7$Kz)SqjS#+TXKu!sNtHVzNY20|&>vxlpu z)=K7&R!iA<7|K&_!#JLGz;hOJ&%E*OS%2v>TWyb5exZu0nIlrAHD8GW#Up>UKJp;v zV4qi~N$`Q+$7YX#CSF#KoiV2?f>>+8h_W8L38mkIgZ{^MAN_xVb)hKlifd*={B|mO zZD%)=)tEx;7*7y~QBe?Yx!lv;Ouf(!Qw`m{p2vVW!tlsp=|(hY`B*SO>ME5Y6@O{Y zol$dzrWGdv@aU`PXTgNaf=!OjOH!#XCV^gdkESjVQLdkJAXy5EOjPYjkb2%4oxL|{ zI>S-Jya>!Z#n@Vp#AIAek=lxJ+aTku3_f*M=7a5PbiP&UIT&!EuzmW-#_xy~ebl|5 zPg3me<(l!aSoY;Dzq^~6jZ<}?mnbe=m&_xyM z1a}^~gtN@G+^;(&@)k_k&k1;upLSRy+sbFL7sDLd{+vA2t3hpNLvm~A>wl=W^7WIq ze=4E{vk|Vxqz`!R&mC*SpW53oGRmmtO>^D>(mQWKefWNfR8ajy0?DWqljeQ}r8ZbD zs_3zRkGC;}4xK)}%I;@*>t4%M_&mQ0p@S0k!^+otO2ED`x3>=Hf8>6fDuzOx11F&C z*B=!!?1G=`$w)jX!`fH~GJnar2UZ;CByoQt0T1jeW*|%~sbzR{sw1Id;g0nZFP&zk zwsA%$DVo0&F4F2uBg$#6ODg&Tg8rQ1gWEz5Qe0S4jRFIS4lR47ln$|2UGxUYx4}v zpt&4aP=@q=NaO9zu7AG(j5Hf|=!ni9k8+8kC$+#^?7lkt8yZmT9BI!wx03j%|7Vb^ zKOY0%J!J!vIJl0`=RZx7h4wX2>Cv8;aT5|uPoQTK_J%Z;!){0f5B_o^`G^2k`SFzS z2|21RPY>=4$c!7?_demg`;vVEFoN)p*}hA_ibBvU{;4_AntvzvVN!QnN&Mq