From a3f76dc71ea68724b0d89cb9032a1fb58fc18ae5 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Thu, 28 Dec 2023 22:32:29 -0500 Subject: [PATCH] proto: transaction format cleanup This commit: - Aligns the `TransactionPlan` with the `Transaction` data structure - Moves the `fee` into the `TransactionParameters` Now the transaction body consists solely of: - a list of `Action`s describing changes to the chain state - a set of `TransactionParameters` describing under what conditions those changes can be applied - a set of `DetectionData` (extensible) for assisting with transaction detection - a set of `MemoData` with encrypted information about the transaction's purpose. --- crates/bin/pcli/src/command/view/tx.rs | 8 +- .../app/src/action_handler/transaction.rs | 30 +- .../action_handler/transaction/stateful.rs | 8 +- crates/core/app/src/tests/spend.rs | 2 - crates/core/transaction/src/detection_data.rs | 37 + crates/core/transaction/src/effect_hash.rs | 42 +- crates/core/transaction/src/lib.rs | 6 +- crates/core/transaction/src/parameters.rs | 41 + crates/core/transaction/src/plan.rs | 52 +- crates/core/transaction/src/plan/build.rs | 15 +- .../transaction/src/plan/detection_data.rs | 44 + crates/core/transaction/src/plan/memo.rs | 8 +- crates/core/transaction/src/transaction.rs | 90 +- crates/core/transaction/src/view.rs | 16 +- .../gen/penumbra.core.transaction.v1alpha1.rs | 56 +- ...enumbra.core.transaction.v1alpha1.serde.rs | 411 +++-- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 336062 -> 335890 bytes crates/view/src/planner.rs | 20 +- crates/wallet/src/plan.rs | 11 +- crates/wasm/src/build.rs | 2 +- crates/wasm/src/planner.rs | 18 +- .../cnidarium/v1alpha1/cnidarium.pb.go | 2 +- .../gen/penumbra/core/app/v1alpha1/app.pb.go | 2 +- .../penumbra/core/asset/v1alpha1/asset.pb.go | 2 +- .../core/component/chain/v1alpha1/chain.pb.go | 2 +- .../v1alpha1/compact_block.pb.go | 278 ++- .../core/component/dao/v1alpha1/dao.pb.go | 2 +- .../core/component/dex/v1alpha1/dex.pb.go | 2 +- .../v1alpha1/distributions.pb.go | 2 +- .../core/component/fee/v1alpha1/fee.pb.go | 2 +- .../governance/v1alpha1/governance.pb.go | 2 +- .../core/component/ibc/v1alpha1/ibc.pb.go | 2 +- .../core/component/sct/v1alpha1/sct.pb.go | 222 ++- .../v1alpha1/shielded_pool.pb.go | 2 +- .../core/component/stake/v1alpha1/stake.pb.go | 2 +- .../penumbra/core/keys/v1alpha1/keys.pb.go | 2 +- .../gen/penumbra/core/num/v1alpha1/num.pb.go | 2 +- .../transaction/v1alpha1/transaction.pb.go | 1540 +++++++++-------- .../decaf377_fmd/v1alpha1/decaf377_fmd.pb.go | 2 +- .../v1alpha1/decaf377_frost.pb.go | 2 +- .../v1alpha1/decaf377_rdsa.pb.go | 2 +- .../penumbra/crypto/tct/v1alpha1/tct.pb.go | 2 +- .../threshold/v1alpha1/threshold.pb.go | 2 +- .../penumbra/custody/v1alpha1/custody.pb.go | 2 +- .../tools/summoning/v1alpha1/summoning.pb.go | 2 +- .../v1alpha1/tendermint_proxy.pb.go | 2 +- .../go/gen/penumbra/view/v1alpha1/view.pb.go | 2 +- .../transaction/v1alpha1/transaction.proto | 32 +- 48 files changed, 1579 insertions(+), 1456 deletions(-) create mode 100644 crates/core/transaction/src/detection_data.rs create mode 100644 crates/core/transaction/src/parameters.rs create mode 100644 crates/core/transaction/src/plan/detection_data.rs diff --git a/crates/bin/pcli/src/command/view/tx.rs b/crates/bin/pcli/src/command/view/tx.rs index 00a6a149d3..a4f4c53fae 100644 --- a/crates/bin/pcli/src/command/view/tx.rs +++ b/crates/bin/pcli/src/command/view/tx.rs @@ -433,7 +433,13 @@ impl TxCmd { metadata_table.add_row(vec![ "Transaction Fee", - &tx_info.view.body_view.fee.value().format(&asset_cache), + &tx_info + .view + .body_view + .transaction_parameters + .fee + .value() + .format(&asset_cache), ]); let memo_view = tx_info.view.body_view.memo_view; diff --git a/crates/core/app/src/action_handler/transaction.rs b/crates/core/app/src/action_handler/transaction.rs index 372b780242..d60ffa3d7b 100644 --- a/crates/core/app/src/action_handler/transaction.rs +++ b/crates/core/app/src/action_handler/transaction.rs @@ -113,8 +113,8 @@ mod tests { use penumbra_shielded_pool::{Note, OutputPlan, SpendPlan}; use penumbra_tct as tct; use penumbra_transaction::{ - plan::{CluePlan, TransactionPlan}, - WitnessData, + plan::{CluePlan, DetectionDataPlan, TransactionPlan}, + TransactionParameters, WitnessData, }; use rand_core::OsRng; @@ -151,16 +151,20 @@ mod tests { // Add a single spend and output to the transaction plan such that the // transaction balances. let plan = TransactionPlan { - expiry_height: 0, - fee: Fee::default(), - chain_id: "".into(), + transaction_parameters: TransactionParameters { + expiry_height: 0, + fee: Fee::default(), + chain_id: "".into(), + }, actions: vec![ SpendPlan::new(&mut OsRng, note, auth_path.position()).into(), SpendPlan::new(&mut OsRng, note2, auth_path2.position()).into(), OutputPlan::new(&mut OsRng, value, *test_keys::ADDRESS_1).into(), ], - clue_plans: vec![CluePlan::new(&mut OsRng, *test_keys::ADDRESS_1, 1)], - memo_plan: None, + detection_data: DetectionDataPlan { + clue_plans: vec![CluePlan::new(&mut OsRng, *test_keys::ADDRESS_1, 1)], + }, + memo_data: None, }; // Build the transaction. @@ -213,15 +217,17 @@ mod tests { // Add a single spend and output to the transaction plan such that the // transaction balances. let plan = TransactionPlan { - expiry_height: 0, - fee: Fee::default(), - chain_id: "".into(), + transaction_parameters: TransactionParameters { + expiry_height: 0, + fee: Fee::default(), + chain_id: "".into(), + }, actions: vec![ SpendPlan::new(&mut OsRng, note, auth_path.position()).into(), OutputPlan::new(&mut OsRng, value, *test_keys::ADDRESS_1).into(), ], - clue_plans: vec![], - memo_plan: None, + detection_data: DetectionDataPlan { clue_plans: vec![] }, + memo_data: None, }; // Build the transaction. diff --git a/crates/core/app/src/action_handler/transaction/stateful.rs b/crates/core/app/src/action_handler/transaction/stateful.rs index b2a024c7a4..dd111ba133 100644 --- a/crates/core/app/src/action_handler/transaction/stateful.rs +++ b/crates/core/app/src/action_handler/transaction/stateful.rs @@ -75,7 +75,13 @@ pub(super) async fn fee_greater_than_base_fee( let transaction_base_price = current_gas_prices.price(&transaction.gas_cost()); - if transaction.transaction_body().fee.amount() >= transaction_base_price { + if transaction + .transaction_body() + .transaction_parameters + .fee + .amount() + >= transaction_base_price + { Ok(()) } else { Err(anyhow::anyhow!( diff --git a/crates/core/app/src/tests/spend.rs b/crates/core/app/src/tests/spend.rs index b8aac65fba..520803429d 100644 --- a/crates/core/app/src/tests/spend.rs +++ b/crates/core/app/src/tests/spend.rs @@ -7,7 +7,6 @@ use decaf377_rdsa::SigningKey; use penumbra_asset::Value; use penumbra_chain::{component::StateWriteExt, EffectHash, TransactionContext}; use penumbra_compact_block::component::CompactBlockManager; -use penumbra_fee::Fee; use penumbra_keys::{test_keys, PayloadKey}; use penumbra_num::Amount; use penumbra_sct::component::SourceContext; @@ -249,7 +248,6 @@ async fn spend_duplicate_nullifier_same_transaction() { penumbra_transaction::Action::Output(output), ], transaction_parameters: TransactionParameters::default(), - fee: Fee::from_staking_token_amount(0u64.into()), detection_data: None, memo: None, }; diff --git a/crates/core/transaction/src/detection_data.rs b/crates/core/transaction/src/detection_data.rs new file mode 100644 index 0000000000..c527cf7aab --- /dev/null +++ b/crates/core/transaction/src/detection_data.rs @@ -0,0 +1,37 @@ +use anyhow::Error; +use decaf377_fmd::Clue; +use penumbra_proto::core::transaction::v1alpha1 as pbt; +use penumbra_proto::DomainType; + +/// Detection data used by a detection server using Fuzzy Message Detection. +/// +/// Only present if outputs are present. +#[derive(Clone, Debug, Default)] +pub struct DetectionData { + pub fmd_clues: Vec, +} + +impl DomainType for DetectionData { + type Proto = pbt::DetectionData; +} + +impl TryFrom for DetectionData { + type Error = Error; + + fn try_from(proto: pbt::DetectionData) -> anyhow::Result { + let fmd_clues = proto + .fmd_clues + .into_iter() + .map(|x| x.try_into()) + .collect::, Error>>()?; + Ok(DetectionData { fmd_clues }) + } +} + +impl From for pbt::DetectionData { + fn from(msg: DetectionData) -> Self { + let fmd_clues = msg.fmd_clues.into_iter().map(|x| x.into()).collect(); + + pbt::DetectionData { fmd_clues } + } +} diff --git a/crates/core/transaction/src/effect_hash.rs b/crates/core/transaction/src/effect_hash.rs index 56ff6a8b8a..858547b153 100644 --- a/crates/core/transaction/src/effect_hash.rs +++ b/crates/core/transaction/src/effect_hash.rs @@ -22,7 +22,7 @@ use penumbra_shielded_pool::{output, spend, Ics20Withdrawal}; use penumbra_stake::{validator, Delegate, Undelegate, UndelegateClaimBody}; use crate::{ - memo::MemoCiphertext, plan::TransactionPlan, transaction::DetectionData, Action, Transaction, + memo::MemoCiphertext, plan::TransactionPlan, Action, DetectionData, Transaction, TransactionBody, TransactionParameters, }; @@ -57,7 +57,6 @@ impl TransactionBody { // Hash the fixed data of the transaction body. state.update(self.transaction_parameters.effect_hash().as_bytes()); - state.update(self.fee.effect_hash().as_bytes()); if self.memo.is_some() { let memo_ciphertext = self.memo.clone(); state.update( @@ -104,18 +103,13 @@ impl TransactionPlan { let mut state = create_personalized_state(&pbt::TransactionBody::type_url()); // Hash the fixed data of the transaction body. - let tx_params = TransactionParameters { - chain_id: self.chain_id.clone(), - expiry_height: self.expiry_height, - }; - state.update(tx_params.effect_hash().as_bytes()); - state.update(self.fee.effect_hash().as_bytes()); + state.update(self.transaction_parameters.effect_hash().as_bytes()); // Hash the memo and save the memo key for use with outputs later. let mut memo_key: Option = None; - if self.memo_plan.is_some() { + if self.memo_data.is_some() { let memo_plan = self - .memo_plan + .memo_data .clone() .expect("memo_plan must be present in TransactionPlan"); let memo_ciphertext = memo_plan.memo().expect("can compute ciphertext"); @@ -124,14 +118,8 @@ impl TransactionPlan { } // Hash the detection data. - if !self.clue_plans.is_empty() { - let detection_data = DetectionData { - fmd_clues: self - .clue_plans - .iter() - .map(|clue_plan| clue_plan.clue()) - .collect(), - }; + if !self.detection_data.clue_plans.is_empty() { + let detection_data = self.detection_data.detection_data(); state.update(detection_data.effect_hash().as_bytes()); } @@ -453,8 +441,8 @@ mod tests { use crate::{ memo::MemoPlaintext, - plan::{CluePlan, MemoPlan, TransactionPlan}, - WitnessData, + plan::{CluePlan, DetectionDataPlan, MemoPlan, TransactionPlan}, + TransactionParameters, WitnessData, }; /// This isn't an exhaustive test, but we don't currently have a @@ -525,9 +513,6 @@ mod tests { text: "".to_string(), }; let plan = TransactionPlan { - expiry_height: 0, - fee: Fee::default(), - chain_id: "penumbra-test".to_string(), // Put outputs first to check that the auth hash // computation is not affected by plan ordering. actions: vec![ @@ -544,8 +529,15 @@ mod tests { SpendPlan::new(&mut OsRng, note1, 1u64.into()).into(), SwapPlan::new(&mut OsRng, swap_plaintext).into(), ], - clue_plans: vec![CluePlan::new(&mut OsRng, addr, 1)], - memo_plan: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), + transaction_parameters: TransactionParameters { + expiry_height: 0, + fee: Fee::default(), + chain_id: "penumbra-test".to_string(), + }, + detection_data: DetectionDataPlan { + clue_plans: vec![CluePlan::new(&mut OsRng, addr, 1)], + }, + memo_data: Some(MemoPlan::new(&mut OsRng, memo_plaintext.clone()).unwrap()), }; println!("{}", serde_json::to_string_pretty(&plan).unwrap()); diff --git a/crates/core/transaction/src/lib.rs b/crates/core/transaction/src/lib.rs index cb6ccf19db..6907053574 100644 --- a/crates/core/transaction/src/lib.rs +++ b/crates/core/transaction/src/lib.rs @@ -17,10 +17,12 @@ mod auth_data; mod auth_hash; +mod detection_data; mod effect_hash; mod error; mod id; mod is_action; +mod parameters; mod transaction; mod witness_data; @@ -33,12 +35,14 @@ pub mod view; pub use action::Action; pub use auth_data::AuthorizationData; pub use auth_hash::{AuthHash, AuthorizingData}; +pub use detection_data::DetectionData; pub use effect_hash::EffectingData; pub use error::Error; pub use id::Id; pub use is_action::IsAction; +pub use parameters::TransactionParameters; pub use plan::ActionPlan; -pub use transaction::{Transaction, TransactionBody, TransactionParameters}; +pub use transaction::{Transaction, TransactionBody}; pub use view::{ActionView, MemoPlaintextView, MemoView, TransactionPerspective, TransactionView}; pub use witness_data::WitnessData; diff --git a/crates/core/transaction/src/parameters.rs b/crates/core/transaction/src/parameters.rs new file mode 100644 index 0000000000..9ca5091ec0 --- /dev/null +++ b/crates/core/transaction/src/parameters.rs @@ -0,0 +1,41 @@ +use anyhow::Error; +use penumbra_fee::Fee; +use penumbra_proto::core::transaction::v1alpha1 as pbt; +use penumbra_proto::DomainType; + +/// Parameters determining when the transaction should be accepted to the chain. +#[derive(Clone, Debug, Default)] +pub struct TransactionParameters { + pub expiry_height: u64, + pub chain_id: String, + pub fee: Fee, +} + +impl DomainType for TransactionParameters { + type Proto = pbt::TransactionParameters; +} + +impl TryFrom for TransactionParameters { + type Error = Error; + + fn try_from(proto: pbt::TransactionParameters) -> anyhow::Result { + Ok(TransactionParameters { + expiry_height: proto.expiry_height, + chain_id: proto.chain_id, + fee: proto + .fee + .ok_or_else(|| anyhow::anyhow!("transaction parameters missing fee"))? + .try_into()?, + }) + } +} + +impl From for pbt::TransactionParameters { + fn from(msg: TransactionParameters) -> Self { + pbt::TransactionParameters { + expiry_height: msg.expiry_height, + chain_id: msg.chain_id, + fee: Some(msg.fee.into()), + } + } +} diff --git a/crates/core/transaction/src/plan.rs b/crates/core/transaction/src/plan.rs index 822a7888bf..cff2fe2e92 100644 --- a/crates/core/transaction/src/plan.rs +++ b/crates/core/transaction/src/plan.rs @@ -9,7 +9,6 @@ use penumbra_dex::{ swap::SwapPlan, swap_claim::SwapClaimPlan, }; -use penumbra_fee::Fee; use penumbra_governance::{ DelegatorVotePlan, ProposalDepositClaim, ProposalSubmit, ProposalWithdraw, ValidatorVote, }; @@ -25,24 +24,25 @@ mod action; mod auth; mod build; mod clue; +mod detection_data; mod memo; pub use action::ActionPlan; pub use clue::CluePlan; +pub use detection_data::DetectionDataPlan; pub use memo::MemoPlan; +use crate::TransactionParameters; + /// A declaration of a planned [`Transaction`](crate::Transaction), /// for use in transaction authorization and creation. #[derive(Clone, Debug, Default, Serialize, Deserialize)] #[serde(try_from = "pb::TransactionPlan", into = "pb::TransactionPlan")] pub struct TransactionPlan { - /// A list of this transaction's actions. pub actions: Vec, - pub expiry_height: u64, - pub chain_id: String, - pub fee: Fee, - pub clue_plans: Vec, - pub memo_plan: Option, + pub transaction_parameters: TransactionParameters, + pub detection_data: DetectionDataPlan, + pub memo_data: Option, } impl TransactionPlan { @@ -67,7 +67,7 @@ impl TransactionPlan { } pub fn clue_plans(&self) -> impl Iterator { - self.clue_plans.iter() + self.detection_data.clue_plans.iter() } pub fn delegations(&self) -> impl Iterator { @@ -287,12 +287,12 @@ impl TransactionPlan { clue_plans.push(CluePlan::new(&mut rng, dummy_address, precision_bits)); } - self.clue_plans = clue_plans; + self.detection_data.clue_plans = clue_plans; } /// Convenience method to grab the `MemoKey` from the plan. pub fn memo_key(&self) -> Option { - self.memo_plan + self.memo_data .as_ref() .map(|memo_plan| memo_plan.key.clone()) } @@ -306,11 +306,9 @@ impl From for pb::TransactionPlan { fn from(msg: TransactionPlan) -> Self { Self { actions: msg.actions.into_iter().map(Into::into).collect(), - expiry_height: msg.expiry_height, - chain_id: msg.chain_id, - fee: Some(msg.fee.into()), - clue_plans: msg.clue_plans.into_iter().map(Into::into).collect(), - memo_plan: msg.memo_plan.map(Into::into), + transaction_parameters: Some(msg.transaction_parameters.into()), + detection_data: Some(msg.detection_data.into()), + memo_data: msg.memo_data.map(Into::into), } } } @@ -318,29 +316,21 @@ impl From for pb::TransactionPlan { impl TryFrom for TransactionPlan { type Error = anyhow::Error; fn try_from(value: pb::TransactionPlan) -> Result { - let memo_plan = match value.memo_plan { - Some(plan) => Some(plan.try_into()?), - None => None, - }; - Ok(Self { actions: value .actions .into_iter() .map(TryInto::try_into) .collect::>()?, - expiry_height: value.expiry_height, - chain_id: value.chain_id, - fee: value - .fee - .ok_or_else(|| anyhow::anyhow!("missing fee"))? + transaction_parameters: value + .transaction_parameters + .ok_or_else(|| anyhow::anyhow!("transaction plan missing transaction parameters"))? .try_into()?, - clue_plans: value - .clue_plans - .into_iter() - .map(TryInto::try_into) - .collect::>()?, - memo_plan, + detection_data: value + .detection_data + .ok_or_else(|| anyhow::anyhow!("transaction plan missing detection data"))? + .try_into()?, + memo_data: value.memo_data.map(TryInto::try_into).transpose()?, }) } } diff --git a/crates/core/transaction/src/plan/build.rs b/crates/core/transaction/src/plan/build.rs index b772ea5c31..a0529fd987 100644 --- a/crates/core/transaction/src/plan/build.rs +++ b/crates/core/transaction/src/plan/build.rs @@ -10,9 +10,8 @@ use std::fmt::Debug; use super::TransactionPlan; use crate::ActionPlan; use crate::{ - action::Action, - transaction::{DetectionData, TransactionParameters}, - AuthorizationData, AuthorizingData, Transaction, TransactionBody, WitnessData, + action::Action, AuthorizationData, AuthorizingData, DetectionData, Transaction, + TransactionBody, WitnessData, }; impl TransactionPlan { @@ -26,9 +25,9 @@ impl TransactionPlan { ) -> Result { // Add the memo if it is planned. let memo = self - .memo_plan + .memo_data .as_ref() - .map(|memo_plan| memo_plan.memo()) + .map(|memo_data| memo_data.memo()) .transpose()?; // Add detection data when there are outputs. @@ -44,11 +43,7 @@ impl TransactionPlan { let transaction_body = TransactionBody { actions, - transaction_parameters: TransactionParameters { - expiry_height: self.expiry_height, - chain_id: self.chain_id, - }, - fee: self.fee, + transaction_parameters: self.transaction_parameters, detection_data, memo, }; diff --git a/crates/core/transaction/src/plan/detection_data.rs b/crates/core/transaction/src/plan/detection_data.rs new file mode 100644 index 0000000000..420ad5f1ea --- /dev/null +++ b/crates/core/transaction/src/plan/detection_data.rs @@ -0,0 +1,44 @@ +use crate::DetectionData; + +use super::CluePlan; +use penumbra_proto::{core::transaction::v1alpha1 as pb, DomainType}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Default, Serialize, Deserialize)] +#[serde(try_from = "pb::DetectionDataPlan", into = "pb::DetectionDataPlan")] +pub struct DetectionDataPlan { + pub clue_plans: Vec, +} + +impl DetectionDataPlan { + pub fn detection_data(&self) -> DetectionData { + DetectionData { + fmd_clues: self.clue_plans.iter().map(|x| x.clue()).collect::>(), + } + } +} + +impl TryFrom for DetectionDataPlan { + type Error = anyhow::Error; + fn try_from(value: pb::DetectionDataPlan) -> Result { + Ok(Self { + clue_plans: value + .clue_plans + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl From for pb::DetectionDataPlan { + fn from(msg: DetectionDataPlan) -> Self { + Self { + clue_plans: msg.clue_plans.into_iter().map(Into::into).collect(), + } + } +} + +impl DomainType for DetectionDataPlan { + type Proto = pb::DetectionDataPlan; +} diff --git a/crates/core/transaction/src/plan/memo.rs b/crates/core/transaction/src/plan/memo.rs index 5b254e0d74..6b5ea36a54 100644 --- a/crates/core/transaction/src/plan/memo.rs +++ b/crates/core/transaction/src/plan/memo.rs @@ -29,10 +29,10 @@ impl MemoPlan { } impl DomainType for MemoPlan { - type Proto = pb::MemoPlan; + type Proto = pb::MemoDataPlan; } -impl From for pb::MemoPlan { +impl From for pb::MemoDataPlan { fn from(msg: MemoPlan) -> Self { let return_address = Some(msg.plaintext.return_address.into()); let text = msg.plaintext.text; @@ -46,10 +46,10 @@ impl From for pb::MemoPlan { } } -impl TryFrom for MemoPlan { +impl TryFrom for MemoPlan { type Error = anyhow::Error; - fn try_from(msg: pb::MemoPlan) -> Result { + fn try_from(msg: pb::MemoDataPlan) -> Result { let sender: Address = msg .plaintext .clone() diff --git a/crates/core/transaction/src/transaction.rs b/crates/core/transaction/src/transaction.rs index 8397be6878..ff300c1ebe 100644 --- a/crates/core/transaction/src/transaction.rs +++ b/crates/core/transaction/src/transaction.rs @@ -6,7 +6,6 @@ use std::{ use anyhow::{Context, Error}; use ark_ff::Zero; use decaf377::Fr; -use decaf377_fmd::Clue; use decaf377_rdsa::{Binding, Signature, VerificationKey, VerificationKeyBytes}; use penumbra_chain::TransactionContext; use penumbra_dao::{DaoDeposit, DaoOutput, DaoSpend}; @@ -14,7 +13,6 @@ use penumbra_dex::{ lp::action::{PositionClose, PositionOpen}, swap::Swap, }; -use penumbra_fee::Fee; use penumbra_governance::{DelegatorVote, ProposalSubmit, ProposalWithdraw, ValidatorVote}; use penumbra_ibc::IbcRelay; use penumbra_keys::{FullViewingKey, PayloadKey}; @@ -32,33 +30,18 @@ use serde::{Deserialize, Serialize}; use crate::{ memo::{MemoCiphertext, MemoPlaintext}, view::{action_view::OutputView, MemoView, TransactionBodyView}, - Action, ActionView, Id, IsAction, MemoPlaintextView, TransactionPerspective, TransactionView, + Action, ActionView, DetectionData, Id, IsAction, MemoPlaintextView, TransactionParameters, + TransactionPerspective, TransactionView, }; #[derive(Clone, Debug, Default)] pub struct TransactionBody { pub actions: Vec, pub transaction_parameters: TransactionParameters, - pub fee: Fee, pub detection_data: Option, pub memo: Option, } -#[derive(Clone, Debug, Default)] -/// Parameters determining when the transaction should be accepted to the chain. -pub struct TransactionParameters { - pub expiry_height: u64, - pub chain_id: String, -} - -#[derive(Clone, Debug, Default)] -/// Detection data used by a detection server using Fuzzy Message Detection. -/// -/// Only present if outputs are present. -pub struct DetectionData { - pub fmd_clues: Vec, -} - #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(try_from = "pbt::Transaction", into = "pbt::Transaction")] pub struct Transaction { @@ -279,7 +262,6 @@ impl Transaction { body_view: TransactionBodyView { action_views, transaction_parameters: self.transaction_parameters(), - fee: self.transaction_body().fee, detection_data, memo_view, }, @@ -527,7 +509,11 @@ impl Transaction { // Add fee into binding verification key computation. let fee_v_blinding = Fr::zero(); - let fee_value_commitment = self.transaction_body.fee.commit(fee_v_blinding); + let fee_value_commitment = self + .transaction_body + .transaction_parameters + .fee + .commit(fee_v_blinding); balance_commitments += fee_value_commitment.0; let binding_verification_key_bytes: VerificationKeyBytes = @@ -539,68 +525,22 @@ impl Transaction { } } +/* impl From for Vec { fn from(transaction_body: TransactionBody) -> Vec { let protobuf_serialized: pbt::TransactionBody = transaction_body.into(); protobuf_serialized.encode_to_vec() } } - -impl DomainType for TransactionParameters { - type Proto = pbt::TransactionParameters; -} - -impl TryFrom for TransactionParameters { - type Error = Error; - - fn try_from(proto: pbt::TransactionParameters) -> anyhow::Result { - Ok(TransactionParameters { - expiry_height: proto.expiry_height, - chain_id: proto.chain_id, - }) - } -} - -impl From for pbt::TransactionParameters { - fn from(msg: TransactionParameters) -> Self { - pbt::TransactionParameters { - expiry_height: msg.expiry_height, - chain_id: msg.chain_id, - } - } -} - -impl DomainType for DetectionData { - type Proto = pbt::DetectionData; -} - -impl TryFrom for DetectionData { - type Error = Error; - - fn try_from(proto: pbt::DetectionData) -> anyhow::Result { - let fmd_clues = proto - .fmd_clues - .into_iter() - .map(|x| x.try_into()) - .collect::, Error>>()?; - Ok(DetectionData { fmd_clues }) - } -} - -impl From for pbt::DetectionData { - fn from(msg: DetectionData) -> Self { - let fmd_clues = msg.fmd_clues.into_iter().map(|x| x.into()).collect(); - - pbt::DetectionData { fmd_clues } - } -} - + */ impl DomainType for TransactionBody { type Proto = pbt::TransactionBody; } impl From for pbt::TransactionBody { fn from(msg: TransactionBody) -> Self { + // TODO: this doesn't seem right, why do we have so many different memo handling types + // and behaviors? why are we encoding Some(encrypted_memo) of a possibly-empty byte vector? let encrypted_memo: pbt::MemoData = match msg.memo { Some(memo) => pbt::MemoData { encrypted_memo: memo.0.to_vec(), @@ -613,7 +553,6 @@ impl From for pbt::TransactionBody { pbt::TransactionBody { actions: msg.actions.into_iter().map(|x| x.into()).collect(), transaction_parameters: Some(msg.transaction_parameters.into()), - fee: Some(msg.fee.into()), detection_data: msg.detection_data.map(|x| x.into()), memo_data: Some(encrypted_memo), } @@ -633,12 +572,6 @@ impl TryFrom for TransactionBody { ); } - let fee: Fee = proto - .fee - .ok_or_else(|| anyhow::anyhow!("transaction body missing fee"))? - .try_into() - .context("fee malformed")?; - let encrypted_memo = proto .memo_data .ok_or_else(|| anyhow::anyhow!("transaction body missing memo data field"))? @@ -671,7 +604,6 @@ impl TryFrom for TransactionBody { Ok(TransactionBody { actions, transaction_parameters, - fee, detection_data, memo, }) diff --git a/crates/core/transaction/src/view.rs b/crates/core/transaction/src/view.rs index 63c3f9860f..754aae3b4e 100644 --- a/crates/core/transaction/src/view.rs +++ b/crates/core/transaction/src/view.rs @@ -1,6 +1,5 @@ use anyhow::Context; use decaf377_rdsa::{Binding, Signature}; -use penumbra_fee::Fee; use penumbra_keys::AddressView; use penumbra_proto::{core::transaction::v1alpha1 as pbt, DomainType}; @@ -14,9 +13,8 @@ use penumbra_tct as tct; pub use transaction_perspective::TransactionPerspective; use crate::{ - memo::MemoCiphertext, - transaction::{DetectionData, TransactionParameters}, - Action, Transaction, TransactionBody, + memo::MemoCiphertext, Action, DetectionData, Transaction, TransactionBody, + TransactionParameters, }; #[derive(Clone, Debug, Serialize, Deserialize)] @@ -35,7 +33,6 @@ pub struct TransactionView { pub struct TransactionBodyView { pub action_views: Vec, pub transaction_parameters: TransactionParameters, - pub fee: Fee, pub detection_data: Option, pub memo_view: Option, } @@ -86,7 +83,6 @@ impl TransactionView { transaction_body: TransactionBody { actions, transaction_parameters, - fee: self.body_view.fee.clone(), detection_data, memo: memo_ciphertext.cloned(), }, @@ -143,12 +139,6 @@ impl TryFrom for TransactionBodyView { action_views.push(av.try_into()?); } - let fee = body_view - .fee - .ok_or_else(|| anyhow::anyhow!("transaction view missing fee"))? - .try_into() - .context("transaction fee malformed")?; - let memo_view: Option = match body_view.memo_view { Some(mv) => match mv.memo_view { Some(x) => match x { @@ -201,7 +191,6 @@ impl TryFrom for TransactionBodyView { Ok(TransactionBodyView { action_views, transaction_parameters, - fee, detection_data, memo_view, }) @@ -223,7 +212,6 @@ impl From for pbt::TransactionBodyView { Self { action_views: v.action_views.into_iter().map(Into::into).collect(), transaction_parameters: Some(v.transaction_parameters.into()), - fee: Some(v.fee.into()), detection_data: v.detection_data.map(Into::into), memo_view: v.memo_view.map(|m| m.into()), } diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs index 2756b73cfe..8441a4d640 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.rs @@ -45,9 +45,6 @@ pub struct TransactionBody { /// Parameters determining if a transaction should be accepted by this chain. #[prost(message, optional, tag = "2")] pub transaction_parameters: ::core::option::Option, - /// The transaction fee. - #[prost(message, optional, tag = "3")] - pub fee: ::core::option::Option, /// Detection data for use with Fuzzy Message Detection #[prost(message, optional, tag = "4")] pub detection_data: ::core::option::Option, @@ -91,6 +88,9 @@ pub struct TransactionParameters { /// replaying a transaction on one chain onto a different chain. #[prost(string, tag = "2")] pub chain_id: ::prost::alloc::string::String, + /// The transaction fee. + #[prost(message, optional, tag = "3")] + pub fee: ::core::option::Option, } impl ::prost::Name for TransactionParameters { const NAME: &'static str = "TransactionParameters"; @@ -310,9 +310,6 @@ pub struct TransactionBodyView { /// Transaction parameters. #[prost(message, optional, tag = "2")] pub transaction_parameters: ::core::option::Option, - /// The transaction fee. - #[prost(message, optional, tag = "3")] - pub fee: ::core::option::Option, /// The detection data in this transaction, only populated if /// there are outputs in the actions of this transaction. #[prost(message, optional, tag = "4")] @@ -488,26 +485,24 @@ impl ::prost::Name for WitnessData { } /// Describes a planned transaction. Permits clients to prepare a transaction /// prior submission, so that a user can review it prior to authorizing its execution. +/// +/// The `TransactionPlan` is a fully determined bundle binding all of a transaction's effects. +/// The only thing it does not include is the witness data used for proving. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct TransactionPlan { - /// The planner interface(s) for Actions to be performed, such as a Spend, Swap, - /// or Delegation. See the ActionPlan docs for a full list of options. + /// The sequence of actions planned for this transaction. #[prost(message, repeated, tag = "1")] pub actions: ::prost::alloc::vec::Vec, - /// Time, as block height, after which TransactionPlan should be considered invalid. - #[prost(uint64, tag = "2")] - pub expiry_height: u64, - /// The name of the network for which this TransactionPlan was built. - #[prost(string, tag = "3")] - pub chain_id: ::prost::alloc::string::String, + /// Parameters determining if a transaction should be accepted by this chain. + #[prost(message, optional, tag = "2")] + pub transaction_parameters: ::core::option::Option, + /// Detection data for use with Fuzzy Message Detection #[prost(message, optional, tag = "4")] - pub fee: ::core::option::Option, - #[prost(message, repeated, tag = "5")] - pub clue_plans: ::prost::alloc::vec::Vec, - /// Planning interface for constructing an optional Memo for the Transaction. - #[prost(message, optional, tag = "6")] - pub memo_plan: ::core::option::Option, + pub detection_data: ::core::option::Option, + /// The memo plan for this transaction. + #[prost(message, optional, tag = "5")] + pub memo_data: ::core::option::Option, } impl ::prost::Name for TransactionPlan { const NAME: &'static str = "TransactionPlan"; @@ -516,6 +511,19 @@ impl ::prost::Name for TransactionPlan { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DetectionDataPlan { + #[prost(message, repeated, tag = "5")] + pub clue_plans: ::prost::alloc::vec::Vec, +} +impl ::prost::Name for DetectionDataPlan { + const NAME: &'static str = "DetectionDataPlan"; + const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) + } +} /// Describes a planned transaction action. /// /// Some transaction Actions don't have any private data and are treated as being plans @@ -635,10 +643,10 @@ impl ::prost::Name for CluePlan { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) } } -/// Describes a plan for forming a `Memo`. +/// Describes a plan for forming a `MemoData`. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct MemoPlan { +pub struct MemoDataPlan { /// The plaintext. #[prost(message, optional, tag = "1")] pub plaintext: ::core::option::Option, @@ -646,8 +654,8 @@ pub struct MemoPlan { #[prost(bytes = "vec", tag = "2")] pub key: ::prost::alloc::vec::Vec, } -impl ::prost::Name for MemoPlan { - const NAME: &'static str = "MemoPlan"; +impl ::prost::Name for MemoDataPlan { + const NAME: &'static str = "MemoDataPlan"; const PACKAGE: &'static str = "penumbra.core.transaction.v1alpha1"; fn full_name() -> ::prost::alloc::string::String { ::prost::alloc::format!("penumbra.core.transaction.v1alpha1.{}", Self::NAME) diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs index d9d861551e..39434bba54 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1alpha1.serde.rs @@ -1507,6 +1507,98 @@ impl<'de> serde::Deserialize<'de> for DetectionData { deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.DetectionData", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for DetectionDataPlan { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.clue_plans.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.DetectionDataPlan", len)?; + if !self.clue_plans.is_empty() { + struct_ser.serialize_field("cluePlans", &self.clue_plans)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DetectionDataPlan { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "clue_plans", + "cluePlans", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + CluePlans, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "cluePlans" | "clue_plans" => Ok(GeneratedField::CluePlans), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DetectionDataPlan; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.transaction.v1alpha1.DetectionDataPlan") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut clue_plans__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::CluePlans => { + if clue_plans__.is_some() { + return Err(serde::de::Error::duplicate_field("cluePlans")); + } + clue_plans__ = Some(map_.next_value()?); + } + } + } + Ok(DetectionDataPlan { + clue_plans: clue_plans__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.DetectionDataPlan", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for EffectHash { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result @@ -1884,7 +1976,7 @@ impl<'de> serde::Deserialize<'de> for MemoData { deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoData", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoPlaintext { +impl serde::Serialize for MemoDataPlan { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -1892,38 +1984,38 @@ impl serde::Serialize for MemoPlaintext { { use serde::ser::SerializeStruct; let mut len = 0; - if self.return_address.is_some() { + if self.plaintext.is_some() { len += 1; } - if !self.text.is_empty() { + if !self.key.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", len)?; - if let Some(v) = self.return_address.as_ref() { - struct_ser.serialize_field("returnAddress", v)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoDataPlan", len)?; + if let Some(v) = self.plaintext.as_ref() { + struct_ser.serialize_field("plaintext", v)?; } - if !self.text.is_empty() { - struct_ser.serialize_field("text", &self.text)?; + if !self.key.is_empty() { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoPlaintext { +impl<'de> serde::Deserialize<'de> for MemoDataPlan { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "return_address", - "returnAddress", - "text", + "plaintext", + "key", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - ReturnAddress, - Text, + Plaintext, + Key, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -1945,8 +2037,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { E: serde::de::Error, { match value { - "returnAddress" | "return_address" => Ok(GeneratedField::ReturnAddress), - "text" => Ok(GeneratedField::Text), + "plaintext" => Ok(GeneratedField::Plaintext), + "key" => Ok(GeneratedField::Key), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -1956,44 +2048,46 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoPlaintext; + type Value = MemoDataPlan; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintext") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoDataPlan") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut return_address__ = None; - let mut text__ = None; + let mut plaintext__ = None; + let mut key__ = None; while let Some(k) = map_.next_key()? { match k { - GeneratedField::ReturnAddress => { - if return_address__.is_some() { - return Err(serde::de::Error::duplicate_field("returnAddress")); + GeneratedField::Plaintext => { + if plaintext__.is_some() { + return Err(serde::de::Error::duplicate_field("plaintext")); } - return_address__ = map_.next_value()?; + plaintext__ = map_.next_value()?; } - GeneratedField::Text => { - if text__.is_some() { - return Err(serde::de::Error::duplicate_field("text")); + GeneratedField::Key => { + if key__.is_some() { + return Err(serde::de::Error::duplicate_field("key")); } - text__ = Some(map_.next_value()?); + key__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; } } } - Ok(MemoPlaintext { - return_address: return_address__, - text: text__.unwrap_or_default(), + Ok(MemoDataPlan { + plaintext: plaintext__, + key: key__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoDataPlan", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoPlaintextView { +impl serde::Serialize for MemoPlaintext { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -2007,7 +2101,7 @@ impl serde::Serialize for MemoPlaintextView { if !self.text.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", len)?; if let Some(v) = self.return_address.as_ref() { struct_ser.serialize_field("returnAddress", v)?; } @@ -2017,7 +2111,7 @@ impl serde::Serialize for MemoPlaintextView { struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoPlaintextView { +impl<'de> serde::Deserialize<'de> for MemoPlaintext { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -2065,13 +2159,13 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoPlaintextView; + type Value = MemoPlaintext; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintextView") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintext") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -2093,16 +2187,16 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { } } } - Ok(MemoPlaintextView { + Ok(MemoPlaintext { return_address: return_address__, text: text__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintext", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for MemoPlan { +impl serde::Serialize for MemoPlaintextView { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -2110,38 +2204,38 @@ impl serde::Serialize for MemoPlan { { use serde::ser::SerializeStruct; let mut len = 0; - if self.plaintext.is_some() { + if self.return_address.is_some() { len += 1; } - if !self.key.is_empty() { + if !self.text.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlan", len)?; - if let Some(v) = self.plaintext.as_ref() { - struct_ser.serialize_field("plaintext", v)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", len)?; + if let Some(v) = self.return_address.as_ref() { + struct_ser.serialize_field("returnAddress", v)?; } - if !self.key.is_empty() { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; + if !self.text.is_empty() { + struct_ser.serialize_field("text", &self.text)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for MemoPlan { +impl<'de> serde::Deserialize<'de> for MemoPlaintextView { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "plaintext", - "key", + "return_address", + "returnAddress", + "text", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - Plaintext, - Key, + ReturnAddress, + Text, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -2163,8 +2257,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { E: serde::de::Error, { match value { - "plaintext" => Ok(GeneratedField::Plaintext), - "key" => Ok(GeneratedField::Key), + "returnAddress" | "return_address" => Ok(GeneratedField::ReturnAddress), + "text" => Ok(GeneratedField::Text), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -2174,43 +2268,41 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = MemoPlan; + type Value = MemoPlaintextView; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlan") + formatter.write_str("struct penumbra.core.transaction.v1alpha1.MemoPlaintextView") } - fn visit_map(self, mut map_: V) -> std::result::Result + fn visit_map(self, mut map_: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut plaintext__ = None; - let mut key__ = None; + let mut return_address__ = None; + let mut text__ = None; while let Some(k) = map_.next_key()? { match k { - GeneratedField::Plaintext => { - if plaintext__.is_some() { - return Err(serde::de::Error::duplicate_field("plaintext")); + GeneratedField::ReturnAddress => { + if return_address__.is_some() { + return Err(serde::de::Error::duplicate_field("returnAddress")); } - plaintext__ = map_.next_value()?; + return_address__ = map_.next_value()?; } - GeneratedField::Key => { - if key__.is_some() { - return Err(serde::de::Error::duplicate_field("key")); + GeneratedField::Text => { + if text__.is_some() { + return Err(serde::de::Error::duplicate_field("text")); } - key__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + text__ = Some(map_.next_value()?); } } } - Ok(MemoPlan { - plaintext: plaintext__, - key: key__.unwrap_or_default(), + Ok(MemoPlaintextView { + return_address: return_address__, + text: text__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlan", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.transaction.v1alpha1.MemoPlaintextView", FIELDS, GeneratedVisitor) } } impl serde::Serialize for MemoView { @@ -2881,9 +2973,6 @@ impl serde::Serialize for TransactionBody { if self.transaction_parameters.is_some() { len += 1; } - if self.fee.is_some() { - len += 1; - } if self.detection_data.is_some() { len += 1; } @@ -2897,9 +2986,6 @@ impl serde::Serialize for TransactionBody { if let Some(v) = self.transaction_parameters.as_ref() { struct_ser.serialize_field("transactionParameters", v)?; } - if let Some(v) = self.fee.as_ref() { - struct_ser.serialize_field("fee", v)?; - } if let Some(v) = self.detection_data.as_ref() { struct_ser.serialize_field("detectionData", v)?; } @@ -2919,7 +3005,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { "actions", "transaction_parameters", "transactionParameters", - "fee", "detection_data", "detectionData", "memo_data", @@ -2930,7 +3015,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { enum GeneratedField { Actions, TransactionParameters, - Fee, DetectionData, MemoData, } @@ -2956,7 +3040,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { match value { "actions" => Ok(GeneratedField::Actions), "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), - "fee" => Ok(GeneratedField::Fee), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memoData" | "memo_data" => Ok(GeneratedField::MemoData), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), @@ -2980,7 +3063,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { { let mut actions__ = None; let mut transaction_parameters__ = None; - let mut fee__ = None; let mut detection_data__ = None; let mut memo_data__ = None; while let Some(k) = map_.next_key()? { @@ -2997,12 +3079,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { } transaction_parameters__ = map_.next_value()?; } - GeneratedField::Fee => { - if fee__.is_some() { - return Err(serde::de::Error::duplicate_field("fee")); - } - fee__ = map_.next_value()?; - } GeneratedField::DetectionData => { if detection_data__.is_some() { return Err(serde::de::Error::duplicate_field("detectionData")); @@ -3020,7 +3096,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { Ok(TransactionBody { actions: actions__.unwrap_or_default(), transaction_parameters: transaction_parameters__, - fee: fee__, detection_data: detection_data__, memo_data: memo_data__, }) @@ -3043,9 +3118,6 @@ impl serde::Serialize for TransactionBodyView { if self.transaction_parameters.is_some() { len += 1; } - if self.fee.is_some() { - len += 1; - } if self.detection_data.is_some() { len += 1; } @@ -3059,9 +3131,6 @@ impl serde::Serialize for TransactionBodyView { if let Some(v) = self.transaction_parameters.as_ref() { struct_ser.serialize_field("transactionParameters", v)?; } - if let Some(v) = self.fee.as_ref() { - struct_ser.serialize_field("fee", v)?; - } if let Some(v) = self.detection_data.as_ref() { struct_ser.serialize_field("detectionData", v)?; } @@ -3082,7 +3151,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { "actionViews", "transaction_parameters", "transactionParameters", - "fee", "detection_data", "detectionData", "memo_view", @@ -3093,7 +3161,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { enum GeneratedField { ActionViews, TransactionParameters, - Fee, DetectionData, MemoView, } @@ -3119,7 +3186,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { match value { "actionViews" | "action_views" => Ok(GeneratedField::ActionViews), "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), - "fee" => Ok(GeneratedField::Fee), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memoView" | "memo_view" => Ok(GeneratedField::MemoView), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), @@ -3143,7 +3209,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { { let mut action_views__ = None; let mut transaction_parameters__ = None; - let mut fee__ = None; let mut detection_data__ = None; let mut memo_view__ = None; while let Some(k) = map_.next_key()? { @@ -3160,12 +3225,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { } transaction_parameters__ = map_.next_value()?; } - GeneratedField::Fee => { - if fee__.is_some() { - return Err(serde::de::Error::duplicate_field("fee")); - } - fee__ = map_.next_value()?; - } GeneratedField::DetectionData => { if detection_data__.is_some() { return Err(serde::de::Error::duplicate_field("detectionData")); @@ -3183,7 +3242,6 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { Ok(TransactionBodyView { action_views: action_views__.unwrap_or_default(), transaction_parameters: transaction_parameters__, - fee: fee__, detection_data: detection_data__, memo_view: memo_view__, }) @@ -3206,6 +3264,9 @@ impl serde::Serialize for TransactionParameters { if !self.chain_id.is_empty() { len += 1; } + if self.fee.is_some() { + len += 1; + } let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.TransactionParameters", len)?; if self.expiry_height != 0 { #[allow(clippy::needless_borrow)] @@ -3214,6 +3275,9 @@ impl serde::Serialize for TransactionParameters { if !self.chain_id.is_empty() { struct_ser.serialize_field("chainId", &self.chain_id)?; } + if let Some(v) = self.fee.as_ref() { + struct_ser.serialize_field("fee", v)?; + } struct_ser.end() } } @@ -3228,12 +3292,14 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { "expiryHeight", "chain_id", "chainId", + "fee", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { ExpiryHeight, ChainId, + Fee, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3257,6 +3323,7 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { match value { "expiryHeight" | "expiry_height" => Ok(GeneratedField::ExpiryHeight), "chainId" | "chain_id" => Ok(GeneratedField::ChainId), + "fee" => Ok(GeneratedField::Fee), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -3278,6 +3345,7 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { { let mut expiry_height__ = None; let mut chain_id__ = None; + let mut fee__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::ExpiryHeight => { @@ -3294,11 +3362,18 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { } chain_id__ = Some(map_.next_value()?); } + GeneratedField::Fee => { + if fee__.is_some() { + return Err(serde::de::Error::duplicate_field("fee")); + } + fee__ = map_.next_value()?; + } } } Ok(TransactionParameters { expiry_height: expiry_height__.unwrap_or_default(), chain_id: chain_id__.unwrap_or_default(), + fee: fee__, }) } } @@ -3497,40 +3572,27 @@ impl serde::Serialize for TransactionPlan { if !self.actions.is_empty() { len += 1; } - if self.expiry_height != 0 { - len += 1; - } - if !self.chain_id.is_empty() { - len += 1; - } - if self.fee.is_some() { + if self.transaction_parameters.is_some() { len += 1; } - if !self.clue_plans.is_empty() { + if self.detection_data.is_some() { len += 1; } - if self.memo_plan.is_some() { + if self.memo_data.is_some() { len += 1; } let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1alpha1.TransactionPlan", len)?; if !self.actions.is_empty() { struct_ser.serialize_field("actions", &self.actions)?; } - if self.expiry_height != 0 { - #[allow(clippy::needless_borrow)] - struct_ser.serialize_field("expiryHeight", ToString::to_string(&self.expiry_height).as_str())?; - } - if !self.chain_id.is_empty() { - struct_ser.serialize_field("chainId", &self.chain_id)?; - } - if let Some(v) = self.fee.as_ref() { - struct_ser.serialize_field("fee", v)?; + if let Some(v) = self.transaction_parameters.as_ref() { + struct_ser.serialize_field("transactionParameters", v)?; } - if !self.clue_plans.is_empty() { - struct_ser.serialize_field("cluePlans", &self.clue_plans)?; + if let Some(v) = self.detection_data.as_ref() { + struct_ser.serialize_field("detectionData", v)?; } - if let Some(v) = self.memo_plan.as_ref() { - struct_ser.serialize_field("memoPlan", v)?; + if let Some(v) = self.memo_data.as_ref() { + struct_ser.serialize_field("memoData", v)?; } struct_ser.end() } @@ -3543,25 +3605,20 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { { const FIELDS: &[&str] = &[ "actions", - "expiry_height", - "expiryHeight", - "chain_id", - "chainId", - "fee", - "clue_plans", - "cluePlans", - "memo_plan", - "memoPlan", + "transaction_parameters", + "transactionParameters", + "detection_data", + "detectionData", + "memo_data", + "memoData", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { Actions, - ExpiryHeight, - ChainId, - Fee, - CluePlans, - MemoPlan, + TransactionParameters, + DetectionData, + MemoData, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -3584,11 +3641,9 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { { match value { "actions" => Ok(GeneratedField::Actions), - "expiryHeight" | "expiry_height" => Ok(GeneratedField::ExpiryHeight), - "chainId" | "chain_id" => Ok(GeneratedField::ChainId), - "fee" => Ok(GeneratedField::Fee), - "cluePlans" | "clue_plans" => Ok(GeneratedField::CluePlans), - "memoPlan" | "memo_plan" => Ok(GeneratedField::MemoPlan), + "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), + "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), + "memoData" | "memo_data" => Ok(GeneratedField::MemoData), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -3609,11 +3664,9 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { V: serde::de::MapAccess<'de>, { let mut actions__ = None; - let mut expiry_height__ = None; - let mut chain_id__ = None; - let mut fee__ = None; - let mut clue_plans__ = None; - let mut memo_plan__ = None; + let mut transaction_parameters__ = None; + let mut detection_data__ = None; + let mut memo_data__ = None; while let Some(k) = map_.next_key()? { match k { GeneratedField::Actions => { @@ -3622,47 +3675,31 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { } actions__ = Some(map_.next_value()?); } - GeneratedField::ExpiryHeight => { - if expiry_height__.is_some() { - return Err(serde::de::Error::duplicate_field("expiryHeight")); - } - expiry_height__ = - Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::ChainId => { - if chain_id__.is_some() { - return Err(serde::de::Error::duplicate_field("chainId")); - } - chain_id__ = Some(map_.next_value()?); - } - GeneratedField::Fee => { - if fee__.is_some() { - return Err(serde::de::Error::duplicate_field("fee")); + GeneratedField::TransactionParameters => { + if transaction_parameters__.is_some() { + return Err(serde::de::Error::duplicate_field("transactionParameters")); } - fee__ = map_.next_value()?; + transaction_parameters__ = map_.next_value()?; } - GeneratedField::CluePlans => { - if clue_plans__.is_some() { - return Err(serde::de::Error::duplicate_field("cluePlans")); + GeneratedField::DetectionData => { + if detection_data__.is_some() { + return Err(serde::de::Error::duplicate_field("detectionData")); } - clue_plans__ = Some(map_.next_value()?); + detection_data__ = map_.next_value()?; } - GeneratedField::MemoPlan => { - if memo_plan__.is_some() { - return Err(serde::de::Error::duplicate_field("memoPlan")); + GeneratedField::MemoData => { + if memo_data__.is_some() { + return Err(serde::de::Error::duplicate_field("memoData")); } - memo_plan__ = map_.next_value()?; + memo_data__ = map_.next_value()?; } } } Ok(TransactionPlan { actions: actions__.unwrap_or_default(), - expiry_height: expiry_height__.unwrap_or_default(), - chain_id: chain_id__.unwrap_or_default(), - fee: fee__, - clue_plans: clue_plans__.unwrap_or_default(), - memo_plan: memo_plan__, + transaction_parameters: transaction_parameters__, + detection_data: detection_data__, + memo_data: memo_data__, }) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 7cfebdc11cbc99f7ffcc40e7d16b3923c3688b75..6f3d36c57facc57e2c48fb1f5c72e40f29a8c720 100644 GIT binary patch delta 8825 zcmY*fdvKIhmhXG+O{ep9(&>D8HBAyaA>muf17v=#7%y&k5Q_U)Sm{{z4@6aV5)i_cl?lKmDnU>WWFK%w)ESALrzK zlJLU53WYAzCx%r?qSeduNQQhVL+##gghwjmtGrN~-gkreO)M{x@K$(Ah1esiCvOzz zl}5cH?;M$r!dFF9E|c$(zH66AWj?)8^ogP(uhjdU@WNmT0uPDYBtGdXQ+Zy@%e7wx zK708ySOOQuy>Szkd^L+IWO6A-t{&@~!o&oqqVnWLHe}Z>u`*ue6?^9yqw-aX>h*zL;=FjuEBDrzh7>ncqyK%E z7;mr1HiWNes3uzK8UjY_n#3%x&#_>x)mPmj2HI=C#}fScdn^G~Em(t&MZT=lzq&;X zrR%=OBCzVBMcK9pth$m?3>_vVf~jht`4T9H5qujWF)zwC&b?8ktcgNlMuh=_V`F@F zfDp2=YL24`KP{V7owEt>np9DMz-#iW0|Z`E?L5ar`pv4#nFzFIRURPFnz7JKmc%`1 zZtrw7fEHEdOcJyfl`aS%crCF+fY^0*rQ<1IwyIgqq`+%c(Ex$gnqM3s&|1q9o`;o< z<=PSI68Kvxo{o-4kqKv3X(#!HBHAdFK#%GY`1qjgw>)Hc^XoFqdjt0|W z;*FW3BykdpT@pZS%d<-X2(-mmhrHG#Ve*Hl%Imf~p8X*=ny`U4RBWdT2)v<+N^bzk zW7my@R_N<@i-Gh=q}aqVdu|!Em=pjIY8ly8Y&YJr>iWQjP|KQ{9SyB4rxIu4%$K{& zmC1a0o}CdO(3bnfUOO_#@ztu(4@9z7H{B*$)2kw7CRz>;-zYViXaGoJ)FlCgmPV`X zU;-i9XhWl;!8As8<>i>+8*@nju`Ms=LUIygMZQS_r}5g*I!@v&k{DR)k_dAW<1PsR zBr)!i07A5Jmjn=^jW;yv3xA^eydICjI2SI!0iWI@dc+0$p5G%f&+nl-cdIX67oKk0 zC3`YANx4zdA4s1I%hS5FTwbM@N8}AT_X)3bgZ@dbEY-h`$e~<+p(i&_Oz7KAs&XB_ zPL}KRHi~45^W=Zz(|4r5DV6`40lh3LzS1o<@-p3>E4LS4>cuuqOix@ry=7|hicK4* zHzt&>{yW*EQxREEGro1>{g!eI_z$33AO75J+h;)B@*{`3$uGL&u#jK9=WHX&7Bn3vIx?Km0))i zPjDNqvWxAm>C&kM^3qsWq|)1o2xiap>H`bpjm^E;RnHN6^K1loAVM!99O5Ri34A%A zTYBYvO#@j1uh0Rv!R%()Q9u;lf0Yp2Girzj908?OmOsIv< zhzpZpTL6u_;P$wbSw`bC{K#>MqO(- zD31v>;EXwF4bWzqPdT6-6Scwk6LdO6cERB+JtI6gDW^Xc)|=M8^^r zHw@-eVr02%G}l+hg&K9nTu=c!0|@GI(X}jqpdJ@1S2=3LS5FHS7$cwprh{3Dfcvy) zU+lOMaGw^#BaWNrs}n+<=Ztya0tQ2w2kHsYy)>|bdO|E;>8PHso)K!jGqTPG3?|=8 zgZqr=T^*RgeMXG0bKIz}o|{=mQE&n4oo^J>=R`wK06~3D^ablE-&fBIHRz1_paKSK zAs^J|MPsj5kTy#tAKd4~z#`Xdfv;W=YQ%91zy)j$Ah<7xmLPHgs4s{mOC2@ltIW*& z#6SfMHcbrFjA#p{AO>nWGc!SjzIsupV96AM3pmd;TL|upqAmzk2=0rbgT*B;-?*<{ znpydAPyvI1ii7%+Xb4tG9MqRYPcM|dQdoaQzIp}gIGK}LHoVrJBlw6A_}b)JFG7e{ zM01c^5kkDe%h|T>`|4Gp7CB!ZRKQ@od{AE%Ey0ZYpuQ^l7dq;aVqd)`RIu!d!3At_ zp^CwMO|%9(x)|Ko#KJ-EB%gx$RN||*bna?-D*e_Brv#k0L~AfVCE&a@Ge4!iIw@4J zR7=quV9?7_P)~~H;M^(&^`uxl><#1aEbzm>6rp#8NOq-$CsP}DPG2*%eap=o`8H4K zAFPp0W547hl}Dt2&&<;Ta*t0UARHBdxdB8orv=orv!a>P0`hq&nu+=0Ga~da`pq?R zxbTdCfL?`wF%I~FE?O(cT0an!ZN*4hV3~+SJyNd@n#@EwXy=+|GGkA6;1fR)gXF~8{e^x9ScOm!? zJ}cI5@GeAe3jOeJMd)K4KVM!@_*=eG79wsT_vW0QK3@*Do)ge-JP!DXK<5Octb+)2 zPC(1vYA7&%r2p-FxqIZJAeBPXn~y})9z=lbB)Z331n$j8V$E9bp9#6d{qXNa=nG8X zDbf$GlSk624cAPhuH3MFeGU6>nNDq*n%I$= zoSIH;nY?=I&P@~7a7)uj;l?e~lM_33q*xQCcJ4r9o2Ry?wr!uf0nGUxbhK2whkq~d zQ)W3vBhCZ(pMq+Vy{4TV6W8yYn7n$zWMq1>Bee~E;k*$_Ppyy%{XgqvU-T~x8?inW zdTW;)AK5UjR7R6@*F9XBfvTu#$^OC@~V#ntt z@tG*82_X2NiFtKim*E3_E~qj&&*aV`)+C$FG#xirH+*6)0AJmoi$c53VKou3&hs&? zMSl2?BJ|%vm|@~`>W{o@cpDb+FnuY=-pN3?J^azRML49PMtk#3Srd++}LiyKeKH$Cz)RfO^>d%56CTWrfhWXC| zPY|4v&nbN^RKGQv902V|!wBE6162ix6uu5rmCvL4O>i3mA$`EMv z31pSeJNer{Rsn$vXa@!m)Ncb-1qkZ5fvWNueHYvy2x z(cVR}Zvp-Wa}PP41BgcVkP}ycAnqZEE7oH^;l$iaYCsoUBzw95!37QyW_7ifoVtP) z+`Z(~mCv2KU4ML$EKlQa1~ZMaxVoL3xPleL+sTP5pCGRGkrP)ypaR-!6A;vW-O$Pb{tggXL5J?mfi9%urce z-9yl2Q)W>>TpiNyTr97h^oga_A#y(|06{!N?Zb}9(&`W`Tj4exl-0eY);J?8E5Kl4 zSy|mnT~^%s#LDVk8e8q9O`A|wS|7PY?&|i5b(JP3$pAsrpLeA5P z%VqxMoaAGK2Z0K7teB6@qeQjIn7K4IZrZdRHzw{z4h<`sg4y0*fZ!gb#GJs2mX1=* zT=RRjm=C)r^q$LcuHbK+Gf$9HW`JxXr_2CBe1f3N>P!weLyzhIx?I-u6%!v&#|ZBP zHUSQLjPim6_{=;;$=T*fufz`@r_gh_I$HFfE|b;i;4S7#cenGP9;Zl&SA}LuxT`0K zs*-WjRovrSCZ{L=T4q0A~V-rcV%F6Zx_&;k=$Dio479+6m|p z{qYqtm4*pjfGyV%x$nRF^ahdr!3>0q0B4&N0O9)vRoFcSh^TK+>wJ?@IcM}{kP%RhpJr@R0ybus5g@p4 z1{o#%@JYfuogJeDJWukj;Fp^O3Q*yTC=+yhExs>%hVTA4+FF7>}|!GanG*9o}#@OW}u46a6Zi zC3iP{nmq0Wr^%%T_3liXz-R&=d>0WPKzVm2OH*>d2a_cRf<@PRL>~lA7}50}p_IW3 zBEj*`kh1y_2+=PFwo4rt!Osw?BfNtEk^LDe<4O&4VSFD;)fu_-fcD^l(O6N7vQ(bA z_cI%=mfdCQ^?GmVPj8m9GLPLP_lwM?U2-Hh?@XyJG>(~PSAFe$BC6ltBl}TMG)2Z} zXpXM@pQTd?36t=Hn565NU^ywv6e&|Dhb} zi@8@=e8VecEE<%ckh_dw3)#p>UBoUEDyt#?~Z4 zri2l1Yxi0V8=-uC=UzF#$#<{wAqYi$tZsI#@e8m&zswhHIHXG*wYh*n{emRkP+g ze~3O=RaftA#v;Ljs|j`MJNC)V=^88&UZesCftpM6Y|#@4?71GF$YHi&`O8|>i`|xM zA-Ylvxt7InuZ0-NVl-FVv%rN$gLTvpgyuz42Tu;27PgjM4{>6-X6MR!luEN0{`K|E zGZ?Y!G4VES+^CJz9K_}&)#zdil*N!XS6yu=K&0KIDrRss{F^HIpyGbn+94NT`Q}3= zsB!9o{j#T}mFAd%G{=Z+P1z-H&Jfv(CEv*YTsLl`ER z(5~`bFdmBb0$WUg4IOJoF~QQXe>!k{@$wL+IMAVN;Svb64xIJQ23iL$A4>!11g+QF zxP;P~`=DwdUOLpn;|HY;` zaX>co^@q(iVI%VFPnfbNBed7QaF{b=gckajUc$9AF6s`3R_dZVWlwA{k~07PVCH8? zcl=B&)`QL3_4QKs%B!~ZBEq55TT>ifY zQ-vDQa}LUNO(R)<9>S44TT_Gw5*@*DeWURQSfTGfC~w-j!tFjdz<))qEz<(A3-aOW zH_q!-p)p(iX0KI|YBLq4SUgJnhRs!99+^?<4iFqid-%oI*br`X-|o9)X7^oc@xA{C DSxo|l delta 9059 zcmZWvd2p3gmVfu$o0pd_>-)0ul9&e}5R#BRWML1h1d&Z~bX)>FBqbzt0^&Blh={h! z4BBm9sYcLop_!3U5RJ47j4h0kT5IcPLq++jofRx@VJY*QrCQcI?g_Vt+=~ zmt{dTRFTLAeaBx@RoR>%D~bf#I`aQX)thp8!=SStj;cWGXi6h>as~em!rd6qpNQdJZjH?9>Q->ZO%lX zH7MR`#6`S@hO(I+f!5I6>SzEn)kV%EL7S=4xgLTyGq21e9$H@Mcq){QYLYW4@ETRN zN1!$46nX?&V@X*M;E3bgwno|o{+5cjqcs*c?#yv*qtH-96GbvY*+!Wbn(c0j*`P2I z{@M!SK_C3#z;;G@^i8*mzI117lJRAZX&2d41He_6b7jwJS1d4&f#9ku*Y1}|Qa2@> zNr2W(F^>>ycNTAYhQdJ5x^Zw8AOabxxsin;(XM;bVs3hFtkeV{dH3g0hhYF9Kl7-@ zBY2xPt=S`Zo7dLvXfVyE5@+Hd=DQ#yal++&)r!a^`ZuGZIlUrQVn`XBr9P@N{s1sn zpPLH^4*MqCoB?63zS;|oYu8eWF`VY5Nll!Ky1shX#fIkEz-~t zP!t8@@(5lOGxVZ8qE%de_ljJ+R|zsaFjq&`zDfAuHBR*ZdDB2Nb5YkhpOygIB7a#J_$ z7#P0!+O4U9>$mPKBYi_mRu##lsLfiNxoKGbtx3L0x%DDZkzBtumE1VA`DVSaRhEsNZlyL45%j5cy5s~s-_{GP2XuvHFB z9zA(VaJ8YLkk#pR?eeNdu3~lMivx<4tjo6hOMKB~U1?d+V()xoq*Z^^E?e>&V+Fye zFn18gs6|(F$UU_!uHN9{!$}Jcn!T5Nep>Kmywcvi4t>5u{&`+UtTNaI59a1|>*iT< zcfBt?_R4iJ=BA3NncIpQ(> z#A5ls*;7HzMyAyP!Kp6q%0=101Kf}U0{M0j)%t)y!W~4ZJ0Os8v)pXtUmeuPmdM*% zk!y8OAlY^xk`0J#JIDhC(tRJtoJ}Y?hxOG<<@a0pMjjSOxE;uEhrbcJHv_MCN>T*WTD4-w989gdyw0Wx;JgXDBjHyWIGy24G zIWPT;P|a=(C-WK6vcyABo)ODexY&_Vt^F({rL_ftx1^PtS=(OI#3{p*k+q z3TMoOW58AqK|Lh5C z>Up7-J7X5OfIhWZpgu3!d%YFZ=f#p`jv9pOq)_Xek>xy~KMVn=Cq-xa5^o0gq*%Sy zakE49;>5Yi1{ZL;8=DR8i=wu}Lr`B7UH)9kO%51 zvp;EbO7cVXvQYjA<%0`YpoeWJ}p$8n=KB?X;JTEiGy;QkF%XE4AmK-=D4vTW&`y3 z2|+z08vG82pq>%kvmLcCRA+_qr>qcEzy{-~CWi{aJu7DV8(j$QSuuNV@H$t)94ZRc zIem1cJfA-2Nq7j(IWg1kM-e#ZCibH^ROf~AN3$670s2)IgL+=n`?^&O>UlA5VXzRz zGdGOBB_eMNk!VXU98C7_+PQUTc;J@)odZLIN&V#|vaatfE~%W6T&|fH1jHkkEg+N% zz)TM@%>@B1?yQ*Rf`AzB#WZRV4)fUId;0lRvTx>lf^rNK z58>!Nkz3{=9K9#XD}vh$1;+Pv{iX8ux$pb;LmqK0eqUtUB?9swF=v_c0Fec_qAz%W z6P(9yw-5BEm&(7I`@w_@uE`%vxZslffta(}x!@xFfmpXbxE!m=52GK6$iM0ntL0_+ zAMqS9*g-h@SU?%yZYVH*qDR-r(cVvdDEVeJ zpNMQ*cmR2jXzz0#cr~AhRhI^T$6p2t!sw?W^6%Kd!}{~fsI>$SnuaB^U9XKHv$|E5&!$c*Hcq2c7hO}zOd$(=*Vjj7}g z7>9zgj2fr>`?%BI?ftl_%CF*AHw@HSmNR zw+(H&A!)TK9&ACt$=zEA5Y77G{=t!c6R??QWb4qbZJRmnO<2Of=G1U%Ggf$G|F(h6 zjrL7czni;c7(jFtfp9=`7H6|V$mM;XABo>*h4fbzOap1hZ!PL&(L&G`~cyY z0$L#k2=13&hyj|x5Mq2^3;6Z_l_2}_2C~qnfhE>gBD>HzRw=mpN)%abhS6~K6>GCU zGp-QwH-aW5`jVXJ!GXc+Cr*yZ04IFs@Gk5HOxSX}wf)ZU+`S${! zS$O?%KJwoR)oqRZ^Npc>x4?+8-+HYFh)KWoS})Ff@(2G;1_BkZ$(|8lV|HQ>5Zpg_ zu@~q1@|_oZK;Qz}T>u32JFoQsLH*8ay*Q))@ozXFPyy}x98e?~JFy3BMmw<==iMIF zKi(j_X5nuzN6D!zKukJHPVxbQI7*OwtPd2xI7_pXqoY5dJ#Vp5iPd&x;WSV7!NPU6K067Mc@5)TMeK>P9r1obX*5)Tm6 zyU0nrI6>m=BPa2IKm|-&jRy?wK5`Nd5Zry_Bwm~#@$M!k@qoYuw3QYR)Vs+^JU~$I zCMWUY1c`SKIf(}ZDxehrfN5~=p-wCDfWf_ooWzS0B;LK`emVew3us@^fS}$>^;Y5m zf_g7Gi5DkGy!$7pEb##C>jXwn?rftm!M%Ti3yJptIe8c-mUw{vIOT%-06BRG zE2s|;)Zvgh6p(oP^%Ymj8wTUV0&hP#6%7dDerjIm?iCBX{j_+gyL8ZZ50YBtjI8ef z{l>Dsdyv|edn>39Qr{&3OT#$pyN7klRr1z${0-v6YViwY zk#~R>%91ip5P1i2Z4w#D#S1UBr7TWq7JGQ?_m;KZL2?ok9Jn~hx5v&7srM*3i5aIN zPywyP1O)X_auO2|)JMrl%s4^v9U><&fj|Xp2xjnW0vOywCkDddXz6w%Z~o_X8#Z{9qd8X0jfE?6-O%%x`c0Kt8V%BnoX zBu~+lYV!j-j*ydzfNUct6#+p!LXe8nObjTWNA<1O$SLh1acw$E z?o|m0;!(=-0dToIN{Mo_timvQj3Os^Sv6^X>0F1nSqSkK9OETk1owr!#Ak^vN)&h* z#0uyp|8|BQi^Kr?$pR4UXQ^P4StKB)e3tN$w9Pn!@i?tanW+nxM z+fy`yKgcRo%p37j9}y5D0^J}&$jsT57N=+B7GJBa}d^UnzVwmkHP06FB>Nlgjz(MK~FLE}Lfq{p9t z@;Vh(P7J~9uTygJxDO0CM{4T$0M;9LP(1O#j3}v^cmNmY__En3MHqd9=*{scdAaE~ zDBx9anA}BCKc5H_7*pUu=se;9C_kTw(sWbsz(k2eu-1Bu=p8?W(OPd2x-`6VrR@I# zDf^=h2;Q#*wnrTp&My!eKU|&w5&Z=!;U*MwVSF10!x?$;fVQH-Xsl?nSt{?`+hf1o zDBDYDw05lOX8EMh|Gimuj=g@1?9I&ju-NueSL(;#6h*q>hay`y?vdTa+*8F@+^onv zv`A6O)Os{+sPVKo=u=;tEV2x67_`nx@HepkNx z9*k%3o1g7lY6w{7nP?Yg+J+5FatpxB~~aBi<$S650==MnNxmS+03LH)_nM1?8w5e|Hk?!8OSuA77o zlU*-VpPW?X8;THpa#C}f`GFjP=9A_6$X#-7SNZtrq5NcdwvQjePnI|E2Ul)RLifq? z*>ljM;mpTES*a`b$=15c@#rA-WMyWh8xO4~D{)}E%=j#{m-S8iWKUfc`9>uao~)Ww z?Z!jk$*O77gDp4@IAzt54*k(Sxg}kV^S~!l;P$JjG|e_~fxw;`a2bxW4QF1~s7_q5 zObfA;8c4HojNvs99^)9()pX2qt})?sn&DmZpx#_QhrTc8hg~=l3j!52o8CiLC)#xUpHzv?xL4M8 z^+e76U?T$TDKq_BMp#$R?1dZ>Be?GAy^4E%+?}2mS*}y}%8tBwv84Hj4zn=}^e_K| z=9xf&aUmDr6~;>fLZAy=_r`9@0(>NxiFBH^_v*xbvZ=0jd_3o|_y2XKd(oNZf9F7p zER>7&$bE8c-Qw}_oWR9dwsmToXp2#ycboADeVP91K6!I`nY()^O&Gr{(>9%fcnIR* zUOr0nipWaa%jZ!mVw25AnAUe6@i%ksMRR)ksNEwB?Can!%*FZjP4j7+Bwt~ Y{3s0O;H%TFyFa^Mj(v8&s{g_N0o-3bH2?qr diff --git a/crates/view/src/planner.rs b/crates/view/src/planner.rs index e0f8234b16..119ae5e25b 100644 --- a/crates/view/src/planner.rs +++ b/crates/view/src/planner.rs @@ -137,7 +137,7 @@ impl Planner { /// Set the expiry height for the transaction plan. #[instrument(skip(self))] pub fn expiry_height(&mut self, expiry_height: u64) -> &mut Self { - self.plan.expiry_height = expiry_height; + self.plan.transaction_parameters.expiry_height = expiry_height; self } @@ -146,7 +146,7 @@ impl Planner { /// Errors if the memo is too long. #[instrument(skip(self))] pub fn memo(&mut self, memo: MemoPlaintext) -> anyhow::Result<&mut Self> { - self.plan.memo_plan = Some(MemoPlan::new(&mut self.rng, memo)?); + self.plan.memo_data = Some(MemoPlan::new(&mut self.rng, memo)?); Ok(self) } @@ -156,13 +156,15 @@ impl Planner { #[instrument(skip(self))] pub fn fee(&mut self, fee: Fee) -> &mut Self { self.balance += fee.0; - self.plan.fee = fee; + self.plan.transaction_parameters.fee = fee; self } /// Calculate gas cost-based fees and add to the transaction plan. /// /// This function should be called once. + // TODO: clarify why we have both `add_gas_fees` and `fee` + // should one be `auto_fee` and the other `set_fee`? #[instrument(skip(self))] pub fn add_gas_fees(&mut self) -> &mut Self { let minimum_fee = self.gas_prices.price(&self.plan.gas_cost()); @@ -173,7 +175,7 @@ impl Planner { // change outputs. let fee = Fee::from_staking_token_amount(minimum_fee * Amount::from(2u32)); self.balance += fee.0; - self.plan.fee = fee; + self.plan.transaction_parameters.fee = fee; self } @@ -514,7 +516,7 @@ impl Planner { tracing::debug!(plan = ?self.plan, balance = ?self.balance, "finalizing transaction"); // Fill in the chain id based on the view service - self.plan.chain_id = chain_params.chain_id.clone(); + self.plan.transaction_parameters.chain_id = chain_params.chain_id.clone(); // Add the required spends to the planner for record in spendable_notes { @@ -593,12 +595,12 @@ impl Planner { // to now calculate the transaction's fee again and capture the excess as change // by subtracting the excess from the required value balance. let tx_real_fee = self.gas_prices.price(&self.plan.gas_cost()); - let excess_fee_spent = self.plan.fee.amount() - tx_real_fee; + let excess_fee_spent = self.plan.transaction_parameters.fee.amount() - tx_real_fee; self.balance -= Value { amount: excess_fee_spent, asset_id: *STAKING_TOKEN_ASSET_ID, }; - self.plan.fee = Fee::from_staking_token_amount(tx_real_fee); + self.plan.transaction_parameters.fee = Fee::from_staking_token_amount(tx_real_fee); // For any remaining provided balance, make a single change note for each for value in self.balance.provided().collect::>() { @@ -620,10 +622,10 @@ impl Planner { } // If there are outputs, we check that a memo has been added. If not, we add a blank memo. - if self.plan.num_outputs() > 0 && self.plan.memo_plan.is_none() { + if self.plan.num_outputs() > 0 && self.plan.memo_data.is_none() { self.memo(MemoPlaintext::blank_memo(self_address.clone())) .expect("empty string is a valid memo"); - } else if self.plan.num_outputs() == 0 && self.plan.memo_plan.is_some() { + } else if self.plan.num_outputs() == 0 && self.plan.memo_data.is_some() { anyhow::bail!("if no outputs, no memo should be added"); } diff --git a/crates/wallet/src/plan.rs b/crates/wallet/src/plan.rs index 937fa7bc43..f58cba714e 100644 --- a/crates/wallet/src/plan.rs +++ b/crates/wallet/src/plan.rs @@ -15,7 +15,7 @@ use penumbra_keys::{ use penumbra_num::Amount; use penumbra_stake::rate::RateData; use penumbra_stake::validator; -use penumbra_transaction::{memo::MemoPlaintext, plan::TransactionPlan}; +use penumbra_transaction::{memo::MemoPlaintext, plan::TransactionPlan, TransactionParameters}; use penumbra_view::{SpendableNoteRecord, ViewClient}; use rand_core::{CryptoRng, RngCore}; use tracing::instrument; @@ -179,10 +179,13 @@ where let output_data = swap.output_data; let mut plan = TransactionPlan { - chain_id: chain_params.clone().chain_id, - fee: swap_plaintext.claim_fee.clone(), + transaction_parameters: TransactionParameters { + chain_id: chain_params.clone().chain_id, + fee: swap_plaintext.claim_fee.clone(), + ..Default::default() + }, // The transaction doesn't need a memo, because it's to ourselves. - memo_plan: None, + memo_data: None, ..Default::default() }; diff --git a/crates/wasm/src/build.rs b/crates/wasm/src/build.rs index 0d619dd96b..1d0d626c99 100644 --- a/crates/wasm/src/build.rs +++ b/crates/wasm/src/build.rs @@ -36,7 +36,7 @@ pub fn build_action( let full_viewing_key: FullViewingKey = FullViewingKey::from_str(full_viewing_key)?; - let memo_key = transaction_plan.memo_plan.map(|memo_plan| memo_plan.key); + let memo_key = transaction_plan.memo_data.map(|memo_plan| memo_plan.key); let action = ActionPlan::build_unauth(action_plan, &full_viewing_key, &witness, memo_key)?; diff --git a/crates/wasm/src/planner.rs b/crates/wasm/src/planner.rs index f6f550dc33..bc8d7fe762 100644 --- a/crates/wasm/src/planner.rs +++ b/crates/wasm/src/planner.rs @@ -130,7 +130,7 @@ impl Planner { /// Set the expiry height for the transaction plan. pub fn expiry_height(&mut self, expiry_height: u64) -> &mut Self { - self.plan.expiry_height = expiry_height; + self.plan.transaction_parameters.expiry_height = expiry_height; self } @@ -138,7 +138,7 @@ impl Planner { /// /// Errors if the memo is too long. pub fn memo(&mut self, memo: MemoPlaintext) -> Result<&mut Self> { - self.plan.memo_plan = Some(MemoPlan::new(&mut self.rng, memo)?); + self.plan.memo_data = Some(MemoPlan::new(&mut self.rng, memo)?); Ok(self) } @@ -147,7 +147,7 @@ impl Planner { /// This function should be called once. pub fn fee(&mut self, fee: Fee) -> &mut Self { self.balance += fee.0; - self.plan.fee = fee; + self.plan.transaction_parameters.fee = fee; self } @@ -163,7 +163,7 @@ impl Planner { // change outputs. let fee = Fee::from_staking_token_amount(minimum_fee * Amount::from(2u32)); self.balance += fee.0; - self.plan.fee = fee; + self.plan.transaction_parameters.fee = fee; self } @@ -424,7 +424,7 @@ impl Planner { self_address: Address, ) -> anyhow::Result { // Fill in the chain id based on the view service - self.plan.chain_id = chain_params.chain_id.clone(); + self.plan.transaction_parameters.chain_id = chain_params.chain_id.clone(); // Add the required spends to the planner for record in spendable_notes { @@ -504,12 +504,12 @@ impl Planner { // to now calculate the transaction's fee again and capture the excess as change // by subtracting the excess from the required value balance. let tx_real_fee = self.gas_prices.price(&self.plan.gas_cost()); - let excess_fee_spent = self.plan.fee.amount() - tx_real_fee; + let excess_fee_spent = self.plan.transaction_parameters.fee.amount() - tx_real_fee; self.balance -= Value { amount: excess_fee_spent, asset_id: *STAKING_TOKEN_ASSET_ID, }; - self.plan.fee = Fee::from_staking_token_amount(tx_real_fee); + self.plan.transaction_parameters.fee = Fee::from_staking_token_amount(tx_real_fee); // For any remaining provided balance, make a single change note for each for value in self.balance.provided().collect::>() { @@ -531,9 +531,9 @@ impl Planner { } // If there are outputs, we check that a memo has been added. If not, we add a blank memo. - if self.plan.num_outputs() > 0 && self.plan.memo_plan.is_none() { + if self.plan.num_outputs() > 0 && self.plan.memo_data.is_none() { self.memo(MemoPlaintext::blank_memo(self_address))?; - } else if self.plan.num_outputs() == 0 && self.plan.memo_plan.is_some() { + } else if self.plan.num_outputs() == 0 && self.plan.memo_data.is_some() { anyhow::bail!("if no outputs, no memo should be added"); } diff --git a/proto/go/gen/penumbra/cnidarium/v1alpha1/cnidarium.pb.go b/proto/go/gen/penumbra/cnidarium/v1alpha1/cnidarium.pb.go index 71d63ba1a4..68ceda2c3a 100644 --- a/proto/go/gen/penumbra/cnidarium/v1alpha1/cnidarium.pb.go +++ b/proto/go/gen/penumbra/cnidarium/v1alpha1/cnidarium.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/cnidarium/v1alpha1/cnidarium.proto diff --git a/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go b/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go index b51947e985..ff135d7606 100644 --- a/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go +++ b/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/app/v1alpha1/app.proto diff --git a/proto/go/gen/penumbra/core/asset/v1alpha1/asset.pb.go b/proto/go/gen/penumbra/core/asset/v1alpha1/asset.pb.go index f42fa117c8..2c8407e352 100644 --- a/proto/go/gen/penumbra/core/asset/v1alpha1/asset.pb.go +++ b/proto/go/gen/penumbra/core/asset/v1alpha1/asset.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/asset/v1alpha1/asset.proto diff --git a/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go b/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go index 5e7e80954d..885a003812 100644 --- a/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go +++ b/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/chain/v1alpha1/chain.proto diff --git a/proto/go/gen/penumbra/core/component/compact_block/v1alpha1/compact_block.pb.go b/proto/go/gen/penumbra/core/component/compact_block/v1alpha1/compact_block.pb.go index 986f115279..f10f73e391 100644 --- a/proto/go/gen/penumbra/core/component/compact_block/v1alpha1/compact_block.pb.go +++ b/proto/go/gen/penumbra/core/component/compact_block/v1alpha1/compact_block.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/compact_block/v1alpha1/compact_block.proto @@ -12,7 +12,6 @@ import ( v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" - _ "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/transaction/v1alpha1" v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -557,152 +556,149 @@ var file_penumbra_core_component_compact_block_v1alpha1_compact_block_proto_rawD 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdb, 0x05, 0x0a, 0x0c, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x63, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x6e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, - 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, - 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, - 0x6f, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x72, 0x6f, 0x6f, 0x74, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, - 0x52, 0x09, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x0e, 0x66, 0x6d, 0x64, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x66, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0c, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x73, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x70, 0x70, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x14, 0x61, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, - 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x09, 0x67, - 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x8a, 0x05, 0x0a, 0x0c, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x65, - 0x64, 0x55, 0x70, 0x48, 0x00, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x12, - 0x57, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdb, 0x05, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x63, 0x0a, + 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, + 0x74, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x47, 0x0a, 0x0a, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x09, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x12, 0x5c, 0x0a, 0x0e, 0x66, 0x6d, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x0d, 0x66, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, + 0x0a, 0x0c, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0b, 0x73, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, + 0x61, 0x70, 0x70, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x70, + 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, + 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x09, 0x67, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x8a, 0x05, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x75, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, - 0x70, 0x1a, 0x59, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x12, 0x4d, 0x0a, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x57, 0x0a, 0x04, - 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4f, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x4d, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x45, 0x0a, - 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x42, 0x0f, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x22, 0x7e, - 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0d, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x32, 0xbb, - 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xaa, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x48, 0x00, 0x52, + 0x08, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x12, 0x57, 0x0a, 0x04, 0x6e, 0x6f, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x12, 0x57, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x53, + 0x77, 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x1a, 0x59, 0x0a, 0x08, 0x52, + 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x55, 0x70, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x57, 0x0a, 0x04, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x4f, + 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, + 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, + 0x4d, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x45, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, + 0x70, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x42, 0x0f, + 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0x96, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, + 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x65, + 0x70, 0x5f, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6b, + 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x22, 0x7e, 0x0a, 0x19, 0x43, 0x6f, 0x6d, 0x70, + 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x32, 0xbb, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x95, 0x03, 0x0a, - 0x32, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x42, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, - 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, - 0x50, 0x43, 0x43, 0x43, 0xaa, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, - 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5c, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, - 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5c, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x31, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, - 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, + 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x95, 0x03, 0x0a, 0x32, 0x63, 0x6f, 0x6d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x11, 0x43, + 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, + 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x43, 0xaa, 0x02, + 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, + 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, + 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x31, 0x50, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go b/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go index 95b04ba89b..bc58764418 100644 --- a/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go +++ b/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/dao/v1alpha1/dao.proto diff --git a/proto/go/gen/penumbra/core/component/dex/v1alpha1/dex.pb.go b/proto/go/gen/penumbra/core/component/dex/v1alpha1/dex.pb.go index 301036bbcb..f8d2e0c20d 100644 --- a/proto/go/gen/penumbra/core/component/dex/v1alpha1/dex.pb.go +++ b/proto/go/gen/penumbra/core/component/dex/v1alpha1/dex.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/dex/v1alpha1/dex.proto diff --git a/proto/go/gen/penumbra/core/component/distributions/v1alpha1/distributions.pb.go b/proto/go/gen/penumbra/core/component/distributions/v1alpha1/distributions.pb.go index 07dac232c5..a3a8170413 100644 --- a/proto/go/gen/penumbra/core/component/distributions/v1alpha1/distributions.pb.go +++ b/proto/go/gen/penumbra/core/component/distributions/v1alpha1/distributions.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/distributions/v1alpha1/distributions.proto diff --git a/proto/go/gen/penumbra/core/component/fee/v1alpha1/fee.pb.go b/proto/go/gen/penumbra/core/component/fee/v1alpha1/fee.pb.go index 9e86de8b13..54a03a6eff 100644 --- a/proto/go/gen/penumbra/core/component/fee/v1alpha1/fee.pb.go +++ b/proto/go/gen/penumbra/core/component/fee/v1alpha1/fee.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/fee/v1alpha1/fee.proto diff --git a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go index 69048709f1..114ca3defb 100644 --- a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go +++ b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/governance/v1alpha1/governance.proto diff --git a/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go b/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go index 1db4e7464f..3f01c9da27 100644 --- a/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go +++ b/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/ibc/v1alpha1/ibc.proto diff --git a/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go b/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go index fceeb21fcd..dc2b10a5aa 100644 --- a/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go +++ b/proto/go/gen/penumbra/core/component/sct/v1alpha1/sct.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/sct/v1alpha1/sct.proto package sctv1alpha1 import ( - _ "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -742,123 +741,120 @@ var file_penumbra_core_component_sct_v1alpha1_sct_proto_rawDesc = []byte{ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x24, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x8c, 0x06, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x6e, 0x0a, 0x0f, 0x69, 0x63, 0x73, 0x5f, 0x32, 0x30, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2f, 0x74, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8c, + 0x06, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x48, 0x00, - 0x52, 0x0d, 0x69, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, - 0x80, 0x01, 0x0a, 0x15, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x4a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x13, 0x66, - 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x12, 0x61, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x44, - 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, - 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x47, - 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, - 0x73, 0x1a, 0x09, 0x0a, 0x07, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x1a, 0x1d, 0x0a, 0x0b, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x36, 0x0a, 0x13, 0x46, - 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x1a, 0x0b, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x1a, 0x65, 0x0a, 0x0d, 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x71, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x21, 0x0a, 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, - 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, - 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x46, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xcc, 0x01, 0x0a, - 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6e, 0x0a, 0x0f, 0x69, + 0x63, 0x73, 0x5f, 0x32, 0x30, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x49, 0x63, 0x73, + 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x63, + 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x15, + 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, - 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x22, 0x64, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x70, 0x6f, - 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x04, - 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x66, 0x0a, 0x0e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x32, 0x0e, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x42, 0xca, 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, - 0x08, 0x53, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x3b, 0x73, 0x63, 0x74, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, - 0x43, 0x43, 0x53, 0xaa, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, - 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x63, - 0x74, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0xe2, 0x02, 0x30, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, - 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, - 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x3a, 0x3a, 0x53, 0x63, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x63, 0x65, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x48, 0x00, 0x52, 0x13, 0x66, 0x75, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x61, + 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x5a, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x18, 0x28, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x1a, 0x09, 0x0a, + 0x07, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x1a, 0x1d, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x36, 0x0a, 0x13, 0x46, 0x75, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, + 0x0b, 0x0a, 0x09, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x1a, 0x65, 0x0a, 0x0d, + 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x1d, 0x0a, + 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x53, 0x65, 0x71, 0x12, 0x1d, 0x0a, 0x0a, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x21, 0x0a, + 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, + 0x22, 0x46, 0x0a, 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xcc, 0x01, 0x0a, 0x0f, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0a, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x67, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x22, 0x64, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x6f, + 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x66, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x32, 0x0e, + 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0xca, + 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x08, 0x53, 0x63, 0x74, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, + 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, + 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x63, 0x74, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, 0xaa, + 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x74, 0x2e, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x30, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x63, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, + 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x63, + 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go index 251ab2cb60..ff9964f34e 100644 --- a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go +++ b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto diff --git a/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go b/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go index 7b9cf777de..a44b11cbf5 100644 --- a/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go +++ b/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/component/stake/v1alpha1/stake.proto diff --git a/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go b/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go index baec8b610b..ca4a0d54cb 100644 --- a/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go +++ b/proto/go/gen/penumbra/core/keys/v1alpha1/keys.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/keys/v1alpha1/keys.proto diff --git a/proto/go/gen/penumbra/core/num/v1alpha1/num.pb.go b/proto/go/gen/penumbra/core/num/v1alpha1/num.pb.go index 216c2ebd29..6c8b9b629e 100644 --- a/proto/go/gen/penumbra/core/num/v1alpha1/num.pb.go +++ b/proto/go/gen/penumbra/core/num/v1alpha1/num.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/num/v1alpha1/num.proto diff --git a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go index 7dfffb9a29..f6112c1393 100644 --- a/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/proto/go/gen/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/core/transaction/v1alpha1/transaction.proto @@ -157,8 +157,6 @@ type TransactionBody struct { Actions []*Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` // Parameters determining if a transaction should be accepted by this chain. TransactionParameters *TransactionParameters `protobuf:"bytes,2,opt,name=transaction_parameters,json=transactionParameters,proto3" json:"transaction_parameters,omitempty"` - // The transaction fee. - Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` // Detection data for use with Fuzzy Message Detection DetectionData *DetectionData `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3" json:"detection_data,omitempty"` // Sub-message containing memo ciphertext if a memo was added to the transaction. @@ -211,13 +209,6 @@ func (x *TransactionBody) GetTransactionParameters() *TransactionParameters { return nil } -func (x *TransactionBody) GetFee() *v1alpha11.Fee { - if x != nil { - return x.Fee - } - return nil -} - func (x *TransactionBody) GetDetectionData() *DetectionData { if x != nil { return x.DetectionData @@ -295,6 +286,8 @@ type TransactionParameters struct { // The chain this transaction is intended for. Including this prevents // replaying a transaction on one chain onto a different chain. ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // The transaction fee. + Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` } func (x *TransactionParameters) Reset() { @@ -343,6 +336,13 @@ func (x *TransactionParameters) GetChainId() string { return "" } +func (x *TransactionParameters) GetFee() *v1alpha11.Fee { + if x != nil { + return x.Fee + } + return nil +} + // Detection data used by a detection server performing Fuzzy Message Detection. type DetectionData struct { state protoimpl.MessageState @@ -1040,8 +1040,6 @@ type TransactionBodyView struct { ActionViews []*ActionView `protobuf:"bytes,1,rep,name=action_views,json=actionViews,proto3" json:"action_views,omitempty"` // Transaction parameters. TransactionParameters *TransactionParameters `protobuf:"bytes,2,opt,name=transaction_parameters,json=transactionParameters,proto3" json:"transaction_parameters,omitempty"` - // The transaction fee. - Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` // The detection data in this transaction, only populated if // there are outputs in the actions of this transaction. DetectionData *DetectionData `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3" json:"detection_data,omitempty"` @@ -1096,13 +1094,6 @@ func (x *TransactionBodyView) GetTransactionParameters() *TransactionParameters return nil } -func (x *TransactionBodyView) GetFee() *v1alpha11.Fee { - if x != nil { - return x.Fee - } - return nil -} - func (x *TransactionBodyView) GetDetectionData() *DetectionData { if x != nil { return x.DetectionData @@ -1664,22 +1655,22 @@ func (x *WitnessData) GetStateCommitmentProofs() []*v1alpha1.StateCommitmentProo // Describes a planned transaction. Permits clients to prepare a transaction // prior submission, so that a user can review it prior to authorizing its execution. +// +// The `TransactionPlan` is a fully determined bundle binding all of a transaction's effects. +// The only thing it does not include is the witness data used for proving. type TransactionPlan struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The planner interface(s) for Actions to be performed, such as a Spend, Swap, - // or Delegation. See the ActionPlan docs for a full list of options. + // The sequence of actions planned for this transaction. Actions []*ActionPlan `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` - // Time, as block height, after which TransactionPlan should be considered invalid. - ExpiryHeight uint64 `protobuf:"varint,2,opt,name=expiry_height,json=expiryHeight,proto3" json:"expiry_height,omitempty"` - // The name of the network for which this TransactionPlan was built. - ChainId string `protobuf:"bytes,3,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - Fee *v1alpha11.Fee `protobuf:"bytes,4,opt,name=fee,proto3" json:"fee,omitempty"` - CluePlans []*CluePlan `protobuf:"bytes,5,rep,name=clue_plans,json=cluePlans,proto3" json:"clue_plans,omitempty"` - // Planning interface for constructing an optional Memo for the Transaction. - MemoPlan *MemoPlan `protobuf:"bytes,6,opt,name=memo_plan,json=memoPlan,proto3" json:"memo_plan,omitempty"` + // Parameters determining if a transaction should be accepted by this chain. + TransactionParameters *TransactionParameters `protobuf:"bytes,2,opt,name=transaction_parameters,json=transactionParameters,proto3" json:"transaction_parameters,omitempty"` + // Detection data for use with Fuzzy Message Detection + DetectionData *DetectionDataPlan `protobuf:"bytes,4,opt,name=detection_data,json=detectionData,proto3" json:"detection_data,omitempty"` + // The memo plan for this transaction. + MemoData *MemoDataPlan `protobuf:"bytes,5,opt,name=memo_data,json=memoData,proto3" json:"memo_data,omitempty"` } func (x *TransactionPlan) Reset() { @@ -1721,37 +1712,70 @@ func (x *TransactionPlan) GetActions() []*ActionPlan { return nil } -func (x *TransactionPlan) GetExpiryHeight() uint64 { +func (x *TransactionPlan) GetTransactionParameters() *TransactionParameters { if x != nil { - return x.ExpiryHeight + return x.TransactionParameters } - return 0 + return nil } -func (x *TransactionPlan) GetChainId() string { +func (x *TransactionPlan) GetDetectionData() *DetectionDataPlan { if x != nil { - return x.ChainId + return x.DetectionData } - return "" + return nil } -func (x *TransactionPlan) GetFee() *v1alpha11.Fee { +func (x *TransactionPlan) GetMemoData() *MemoDataPlan { if x != nil { - return x.Fee + return x.MemoData } return nil } -func (x *TransactionPlan) GetCluePlans() []*CluePlan { - if x != nil { - return x.CluePlans +type DetectionDataPlan struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CluePlans []*CluePlan `protobuf:"bytes,5,rep,name=clue_plans,json=cluePlans,proto3" json:"clue_plans,omitempty"` +} + +func (x *DetectionDataPlan) Reset() { + *x = DetectionDataPlan{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *TransactionPlan) GetMemoPlan() *MemoPlan { +func (x *DetectionDataPlan) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DetectionDataPlan) ProtoMessage() {} + +func (x *DetectionDataPlan) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DetectionDataPlan.ProtoReflect.Descriptor instead. +func (*DetectionDataPlan) Descriptor() ([]byte, []int) { + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{17} +} + +func (x *DetectionDataPlan) GetCluePlans() []*CluePlan { if x != nil { - return x.MemoPlan + return x.CluePlans } return nil } @@ -1795,7 +1819,7 @@ type ActionPlan struct { func (x *ActionPlan) Reset() { *x = ActionPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1808,7 +1832,7 @@ func (x *ActionPlan) String() string { func (*ActionPlan) ProtoMessage() {} func (x *ActionPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1821,7 +1845,7 @@ func (x *ActionPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use ActionPlan.ProtoReflect.Descriptor instead. func (*ActionPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{17} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{18} } func (m *ActionPlan) GetAction() isActionPlan_Action { @@ -2147,7 +2171,7 @@ type CluePlan struct { func (x *CluePlan) Reset() { *x = CluePlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2160,7 +2184,7 @@ func (x *CluePlan) String() string { func (*CluePlan) ProtoMessage() {} func (x *CluePlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2173,7 +2197,7 @@ func (x *CluePlan) ProtoReflect() protoreflect.Message { // Deprecated: Use CluePlan.ProtoReflect.Descriptor instead. func (*CluePlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{18} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} } func (x *CluePlan) GetAddress() *v1alpha18.Address { @@ -2197,8 +2221,8 @@ func (x *CluePlan) GetPrecisionBits() uint64 { return 0 } -// Describes a plan for forming a `Memo`. -type MemoPlan struct { +// Describes a plan for forming a `MemoData`. +type MemoDataPlan struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -2209,23 +2233,23 @@ type MemoPlan struct { Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` } -func (x *MemoPlan) Reset() { - *x = MemoPlan{} +func (x *MemoDataPlan) Reset() { + *x = MemoDataPlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *MemoPlan) String() string { +func (x *MemoDataPlan) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MemoPlan) ProtoMessage() {} +func (*MemoDataPlan) ProtoMessage() {} -func (x *MemoPlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19] +func (x *MemoDataPlan) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2236,19 +2260,19 @@ func (x *MemoPlan) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MemoPlan.ProtoReflect.Descriptor instead. -func (*MemoPlan) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{19} +// Deprecated: Use MemoDataPlan.ProtoReflect.Descriptor instead. +func (*MemoDataPlan) Descriptor() ([]byte, []int) { + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{20} } -func (x *MemoPlan) GetPlaintext() *MemoPlaintext { +func (x *MemoDataPlan) GetPlaintext() *MemoPlaintext { if x != nil { return x.Plaintext } return nil } -func (x *MemoPlan) GetKey() []byte { +func (x *MemoDataPlan) GetKey() []byte { if x != nil { return x.Key } @@ -2266,7 +2290,7 @@ type MemoCiphertext struct { func (x *MemoCiphertext) Reset() { *x = MemoCiphertext{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2303,7 @@ func (x *MemoCiphertext) String() string { func (*MemoCiphertext) ProtoMessage() {} func (x *MemoCiphertext) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2316,7 @@ func (x *MemoCiphertext) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoCiphertext.ProtoReflect.Descriptor instead. func (*MemoCiphertext) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{20} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21} } func (x *MemoCiphertext) GetInner() []byte { @@ -2314,7 +2338,7 @@ type MemoPlaintext struct { func (x *MemoPlaintext) Reset() { *x = MemoPlaintext{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2327,7 +2351,7 @@ func (x *MemoPlaintext) String() string { func (*MemoPlaintext) ProtoMessage() {} func (x *MemoPlaintext) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2340,7 +2364,7 @@ func (x *MemoPlaintext) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlaintext.ProtoReflect.Descriptor instead. func (*MemoPlaintext) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{21} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22} } func (x *MemoPlaintext) GetReturnAddress() *v1alpha18.Address { @@ -2369,7 +2393,7 @@ type MemoPlaintextView struct { func (x *MemoPlaintextView) Reset() { *x = MemoPlaintextView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2382,7 +2406,7 @@ func (x *MemoPlaintextView) String() string { func (*MemoPlaintextView) ProtoMessage() {} func (x *MemoPlaintextView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2395,7 +2419,7 @@ func (x *MemoPlaintextView) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoPlaintextView.ProtoReflect.Descriptor instead. func (*MemoPlaintextView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{22} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23} } func (x *MemoPlaintextView) GetReturnAddress() *v1alpha18.AddressView { @@ -2427,7 +2451,7 @@ type MemoView struct { func (x *MemoView) Reset() { *x = MemoView{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2440,7 +2464,7 @@ func (x *MemoView) String() string { func (*MemoView) ProtoMessage() {} func (x *MemoView) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2453,7 +2477,7 @@ func (x *MemoView) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView.ProtoReflect.Descriptor instead. func (*MemoView) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24} } func (m *MemoView) GetMemoView() isMemoView_MemoView { @@ -2505,7 +2529,7 @@ type MemoView_Visible struct { func (x *MemoView_Visible) Reset() { *x = MemoView_Visible{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2518,7 +2542,7 @@ func (x *MemoView_Visible) String() string { func (*MemoView_Visible) ProtoMessage() {} func (x *MemoView_Visible) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2531,7 +2555,7 @@ func (x *MemoView_Visible) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView_Visible.ProtoReflect.Descriptor instead. func (*MemoView_Visible) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23, 0} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24, 0} } func (x *MemoView_Visible) GetCiphertext() *MemoCiphertext { @@ -2559,7 +2583,7 @@ type MemoView_Opaque struct { func (x *MemoView_Opaque) Reset() { *x = MemoView_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2572,7 +2596,7 @@ func (x *MemoView_Opaque) String() string { func (*MemoView_Opaque) ProtoMessage() {} func (x *MemoView_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25] + mi := &file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2585,7 +2609,7 @@ func (x *MemoView_Opaque) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoView_Opaque.ProtoReflect.Descriptor instead. func (*MemoView_Opaque) Descriptor() ([]byte, []int) { - return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{23, 1} + return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP(), []int{24, 1} } func (x *MemoView_Opaque) GetCiphertext() *MemoCiphertext { @@ -2655,7 +2679,7 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x02, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xab, 0x03, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xee, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, @@ -2668,454 +2692,457 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, - 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, - 0x44, 0x61, 0x74, 0x61, 0x22, 0x31, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, - 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x57, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, - 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, - 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbd, 0x10, 0x0a, 0x06, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x05, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, - 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, - 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, 0x61, - 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x31, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, + 0x65, 0x22, 0x59, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x66, 0x6d, 0x64, 0x5f, 0x63, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, + 0x5f, 0x66, 0x6d, 0x64, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, + 0x75, 0x65, 0x52, 0x08, 0x66, 0x6d, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xbd, 0x10, 0x0a, + 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, + 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, + 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, + 0x61, 0x70, 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x77, + 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, + 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, - 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, - 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, - 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, - 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, - 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, - 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, - 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, + 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, + 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, - 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, - 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, - 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, + 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, - 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, - 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, - 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, + 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, - 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, 0x75, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, - 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, - 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, - 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, - 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, - 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, + 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x10, + 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, + 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, + 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, - 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x10, - 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, - 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, - 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, - 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, 0x16, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, 0x64, - 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, + 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, + 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x63, 0x0a, + 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, + 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, + 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x04, 0x0a, + 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, + 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x60, 0x0a, 0x10, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0f, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x57, 0x0a, 0x0c, 0x61, 0x64, + 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, + 0x69, 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x56, 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, + 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, + 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, + 0x11, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, + 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x0b, 0x61, 0x64, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x74, - 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x76, 0x69, - 0x65, 0x77, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, - 0x69, 0x65, 0x77, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, - 0x73, 0x12, 0x43, 0x0a, 0x06, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, - 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x18, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x4b, 0x65, 0x79, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, - 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x11, - 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x74, - 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x0f, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x54, - 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, 0x79, - 0x56, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, - 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xbc, 0x03, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, - 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, - 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x0f, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, + 0x54, 0x0a, 0x09, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, - 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x49, 0x0a, 0x09, 0x6d, - 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x6d, 0x65, - 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x48, - 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, 0x52, 0x08, 0x62, 0x6f, 0x64, + 0x79, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x53, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, + 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x56, 0x69, 0x65, 0x77, + 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, + 0x65, 0x77, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x22, 0xda, 0x10, 0x0a, 0x0a, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, + 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, - 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, + 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x54, 0x0a, 0x06, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, + 0x48, 0x00, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, + 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x04, - 0x73, 0x77, 0x61, 0x70, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, - 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, 0x0a, 0x14, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, - 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, - 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, 0x63, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x48, 0x00, - 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x63, - 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x0d, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x79, 0x0a, 0x16, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x56, 0x69, 0x65, + 0x77, 0x48, 0x00, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x70, + 0x0a, 0x14, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, - 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x62, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x49, 0x62, 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x62, + 0x63, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x0f, + 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x12, 0x6c, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, + 0x52, 0x10, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, + 0x61, 0x77, 0x12, 0x63, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x76, 0x6f, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x67, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x48, + 0x00, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, + 0x12, 0x79, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x59, 0x0a, 0x0d, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, - 0x65, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, - 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, - 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, + 0x6f, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x12, 0x65, 0x0a, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, - 0x72, 0x61, 0x77, 0x48, 0x00, 0x52, 0x10, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x6f, 0x0a, 0x15, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x75, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x13, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x4e, 0x0a, 0x08, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0a, + 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, + 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, + 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x0a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x54, - 0x0a, 0x09, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x32, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x6f, 0x53, - 0x70, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, - 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x34, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, - 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, 0x10, 0x75, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x2b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x48, 0x00, 0x52, 0x0f, - 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, - 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, - 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, - 0x69, 0x65, 0x77, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xaf, 0x02, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, - 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x5b, - 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, - 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, - 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, 0x6c, 0x0a, 0x14, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x75, - 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, - 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x0b, 0x57, 0x69, - 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x06, 0x61, 0x6e, 0x63, - 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x52, - 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, 0x6a, 0x0a, 0x17, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xf0, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x48, + 0x00, 0x52, 0x0a, 0x64, 0x61, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x64, 0x0a, + 0x10, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x48, 0x00, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x12, 0x63, 0x0a, 0x10, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x77, 0x69, 0x74, + 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, 0x74, 0x68, 0x64, + 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, + 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xaf, 0x02, 0x0a, 0x11, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x4f, 0x0a, 0x0b, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x66, 0x66, 0x65, + 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x0a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x48, 0x61, + 0x73, 0x68, 0x12, 0x5b, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x68, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, + 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x73, 0x12, + 0x6c, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x74, + 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, + 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x73, 0x22, 0xbb, 0x01, + 0x0a, 0x0b, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, + 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, + 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x72, + 0x6b, 0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x12, + 0x6a, 0x0a, 0x17, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, + 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x22, 0xfa, 0x02, 0x0a, 0x0f, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, + 0x48, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, + 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x16, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x64, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0d, 0x64, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x07, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, - 0x65, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, - 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x12, - 0x49, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, - 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x22, 0xd5, 0x10, 0x0a, 0x0a, 0x41, + 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x08, + 0x6d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x22, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4b, 0x0a, + 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x52, + 0x09, 0x63, 0x6c, 0x75, 0x65, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x22, 0xd5, 0x10, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x51, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, @@ -3257,82 +3284,82 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc = []byte{ 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x08, - 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x09, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x26, 0x0a, 0x0e, 0x4d, - 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, - 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, - 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, 0x0a, 0x0e, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x0d, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, - 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x12, 0x50, 0x0a, 0x07, - 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4d, - 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, - 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xb2, 0x01, - 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, - 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x53, 0x0a, - 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x52, 0x0a, 0x0a, - 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, - 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x42, 0xcc, 0x02, - 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x65, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, - 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, - 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, - 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x71, 0x0a, 0x0c, + 0x4d, 0x65, 0x6d, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x4f, 0x0a, 0x09, + 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, + 0x26, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x70, 0x0a, 0x0d, 0x4d, 0x65, 0x6d, 0x6f, 0x50, + 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x78, 0x0a, 0x11, 0x4d, 0x65, 0x6d, + 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x4f, + 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, + 0x52, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x22, 0xcb, 0x03, 0x0a, 0x08, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, + 0x12, 0x50, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, 0x2e, + 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, + 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x56, 0x69, 0x65, 0x77, + 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, + 0x65, 0x1a, 0xb2, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x52, 0x0a, + 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, 0x70, 0x68, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, + 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x69, 0x65, 0x77, 0x52, 0x09, 0x70, 0x6c, 0x61, + 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x5c, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, + 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x69, + 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x76, 0x69, 0x65, + 0x77, 0x42, 0xcc, 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x54, 0xaa, 0x02, 0x22, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0xca, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, + 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2e, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x25, 0x50, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3347,7 +3374,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescGZIP() []b return file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDescData } -var file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interface{}{ (*Transaction)(nil), // 0: penumbra.core.transaction.v1alpha1.Transaction (*Id)(nil), // 1: penumbra.core.transaction.v1alpha1.Id @@ -3366,173 +3393,174 @@ var file_penumbra_core_transaction_v1alpha1_transaction_proto_goTypes = []interf (*AuthorizationData)(nil), // 14: penumbra.core.transaction.v1alpha1.AuthorizationData (*WitnessData)(nil), // 15: penumbra.core.transaction.v1alpha1.WitnessData (*TransactionPlan)(nil), // 16: penumbra.core.transaction.v1alpha1.TransactionPlan - (*ActionPlan)(nil), // 17: penumbra.core.transaction.v1alpha1.ActionPlan - (*CluePlan)(nil), // 18: penumbra.core.transaction.v1alpha1.CluePlan - (*MemoPlan)(nil), // 19: penumbra.core.transaction.v1alpha1.MemoPlan - (*MemoCiphertext)(nil), // 20: penumbra.core.transaction.v1alpha1.MemoCiphertext - (*MemoPlaintext)(nil), // 21: penumbra.core.transaction.v1alpha1.MemoPlaintext - (*MemoPlaintextView)(nil), // 22: penumbra.core.transaction.v1alpha1.MemoPlaintextView - (*MemoView)(nil), // 23: penumbra.core.transaction.v1alpha1.MemoView - (*MemoView_Visible)(nil), // 24: penumbra.core.transaction.v1alpha1.MemoView.Visible - (*MemoView_Opaque)(nil), // 25: penumbra.core.transaction.v1alpha1.MemoView.Opaque - (*v1alpha1.MerkleRoot)(nil), // 26: penumbra.crypto.tct.v1alpha1.MerkleRoot - (*v1alpha11.Fee)(nil), // 27: penumbra.core.component.fee.v1alpha1.Fee - (*v1alpha12.Clue)(nil), // 28: penumbra.crypto.decaf377_fmd.v1alpha1.Clue - (*v1alpha13.Spend)(nil), // 29: penumbra.core.component.shielded_pool.v1alpha1.Spend - (*v1alpha13.Output)(nil), // 30: penumbra.core.component.shielded_pool.v1alpha1.Output - (*v1alpha14.Swap)(nil), // 31: penumbra.core.component.dex.v1alpha1.Swap - (*v1alpha14.SwapClaim)(nil), // 32: penumbra.core.component.dex.v1alpha1.SwapClaim - (*v1alpha15.ValidatorDefinition)(nil), // 33: penumbra.core.component.stake.v1alpha1.ValidatorDefinition - (*v1alpha16.IbcRelay)(nil), // 34: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha17.ProposalSubmit)(nil), // 35: penumbra.core.component.governance.v1alpha1.ProposalSubmit - (*v1alpha17.ProposalWithdraw)(nil), // 36: penumbra.core.component.governance.v1alpha1.ProposalWithdraw - (*v1alpha17.ValidatorVote)(nil), // 37: penumbra.core.component.governance.v1alpha1.ValidatorVote - (*v1alpha17.DelegatorVote)(nil), // 38: penumbra.core.component.governance.v1alpha1.DelegatorVote - (*v1alpha17.ProposalDepositClaim)(nil), // 39: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - (*v1alpha14.PositionOpen)(nil), // 40: penumbra.core.component.dex.v1alpha1.PositionOpen - (*v1alpha14.PositionClose)(nil), // 41: penumbra.core.component.dex.v1alpha1.PositionClose - (*v1alpha14.PositionWithdraw)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionWithdraw - (*v1alpha14.PositionRewardClaim)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionRewardClaim - (*v1alpha15.Delegate)(nil), // 44: penumbra.core.component.stake.v1alpha1.Delegate - (*v1alpha15.Undelegate)(nil), // 45: penumbra.core.component.stake.v1alpha1.Undelegate - (*v1alpha15.UndelegateClaim)(nil), // 46: penumbra.core.component.stake.v1alpha1.UndelegateClaim - (*v1alpha17.DaoSpend)(nil), // 47: penumbra.core.component.governance.v1alpha1.DaoSpend - (*v1alpha17.DaoOutput)(nil), // 48: penumbra.core.component.governance.v1alpha1.DaoOutput - (*v1alpha17.DaoDeposit)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoDeposit - (*v1alpha16.Ics20Withdrawal)(nil), // 50: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha13.Note)(nil), // 51: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha18.AddressView)(nil), // 52: penumbra.core.keys.v1alpha1.AddressView - (*v1alpha19.DenomMetadata)(nil), // 53: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha18.PayloadKey)(nil), // 54: penumbra.core.keys.v1alpha1.PayloadKey - (*v1alpha1.StateCommitment)(nil), // 55: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha110.Nullifier)(nil), // 56: penumbra.core.component.sct.v1alpha1.Nullifier - (*v1alpha13.SpendView)(nil), // 57: penumbra.core.component.shielded_pool.v1alpha1.SpendView - (*v1alpha13.OutputView)(nil), // 58: penumbra.core.component.shielded_pool.v1alpha1.OutputView - (*v1alpha14.SwapView)(nil), // 59: penumbra.core.component.dex.v1alpha1.SwapView - (*v1alpha14.SwapClaimView)(nil), // 60: penumbra.core.component.dex.v1alpha1.SwapClaimView - (*v1alpha17.DelegatorVoteView)(nil), // 61: penumbra.core.component.governance.v1alpha1.DelegatorVoteView - (*v1alpha111.SpendAuthSignature)(nil), // 62: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - (*v1alpha1.StateCommitmentProof)(nil), // 63: penumbra.crypto.tct.v1alpha1.StateCommitmentProof - (*v1alpha13.SpendPlan)(nil), // 64: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - (*v1alpha13.OutputPlan)(nil), // 65: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - (*v1alpha14.SwapPlan)(nil), // 66: penumbra.core.component.dex.v1alpha1.SwapPlan - (*v1alpha14.SwapClaimPlan)(nil), // 67: penumbra.core.component.dex.v1alpha1.SwapClaimPlan - (*v1alpha17.DelegatorVotePlan)(nil), // 68: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - (*v1alpha14.PositionWithdrawPlan)(nil), // 69: penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan - (*v1alpha14.PositionRewardClaimPlan)(nil), // 70: penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - (*v1alpha15.UndelegateClaimPlan)(nil), // 71: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - (*v1alpha18.Address)(nil), // 72: penumbra.core.keys.v1alpha1.Address + (*DetectionDataPlan)(nil), // 17: penumbra.core.transaction.v1alpha1.DetectionDataPlan + (*ActionPlan)(nil), // 18: penumbra.core.transaction.v1alpha1.ActionPlan + (*CluePlan)(nil), // 19: penumbra.core.transaction.v1alpha1.CluePlan + (*MemoDataPlan)(nil), // 20: penumbra.core.transaction.v1alpha1.MemoDataPlan + (*MemoCiphertext)(nil), // 21: penumbra.core.transaction.v1alpha1.MemoCiphertext + (*MemoPlaintext)(nil), // 22: penumbra.core.transaction.v1alpha1.MemoPlaintext + (*MemoPlaintextView)(nil), // 23: penumbra.core.transaction.v1alpha1.MemoPlaintextView + (*MemoView)(nil), // 24: penumbra.core.transaction.v1alpha1.MemoView + (*MemoView_Visible)(nil), // 25: penumbra.core.transaction.v1alpha1.MemoView.Visible + (*MemoView_Opaque)(nil), // 26: penumbra.core.transaction.v1alpha1.MemoView.Opaque + (*v1alpha1.MerkleRoot)(nil), // 27: penumbra.crypto.tct.v1alpha1.MerkleRoot + (*v1alpha11.Fee)(nil), // 28: penumbra.core.component.fee.v1alpha1.Fee + (*v1alpha12.Clue)(nil), // 29: penumbra.crypto.decaf377_fmd.v1alpha1.Clue + (*v1alpha13.Spend)(nil), // 30: penumbra.core.component.shielded_pool.v1alpha1.Spend + (*v1alpha13.Output)(nil), // 31: penumbra.core.component.shielded_pool.v1alpha1.Output + (*v1alpha14.Swap)(nil), // 32: penumbra.core.component.dex.v1alpha1.Swap + (*v1alpha14.SwapClaim)(nil), // 33: penumbra.core.component.dex.v1alpha1.SwapClaim + (*v1alpha15.ValidatorDefinition)(nil), // 34: penumbra.core.component.stake.v1alpha1.ValidatorDefinition + (*v1alpha16.IbcRelay)(nil), // 35: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha17.ProposalSubmit)(nil), // 36: penumbra.core.component.governance.v1alpha1.ProposalSubmit + (*v1alpha17.ProposalWithdraw)(nil), // 37: penumbra.core.component.governance.v1alpha1.ProposalWithdraw + (*v1alpha17.ValidatorVote)(nil), // 38: penumbra.core.component.governance.v1alpha1.ValidatorVote + (*v1alpha17.DelegatorVote)(nil), // 39: penumbra.core.component.governance.v1alpha1.DelegatorVote + (*v1alpha17.ProposalDepositClaim)(nil), // 40: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + (*v1alpha14.PositionOpen)(nil), // 41: penumbra.core.component.dex.v1alpha1.PositionOpen + (*v1alpha14.PositionClose)(nil), // 42: penumbra.core.component.dex.v1alpha1.PositionClose + (*v1alpha14.PositionWithdraw)(nil), // 43: penumbra.core.component.dex.v1alpha1.PositionWithdraw + (*v1alpha14.PositionRewardClaim)(nil), // 44: penumbra.core.component.dex.v1alpha1.PositionRewardClaim + (*v1alpha15.Delegate)(nil), // 45: penumbra.core.component.stake.v1alpha1.Delegate + (*v1alpha15.Undelegate)(nil), // 46: penumbra.core.component.stake.v1alpha1.Undelegate + (*v1alpha15.UndelegateClaim)(nil), // 47: penumbra.core.component.stake.v1alpha1.UndelegateClaim + (*v1alpha17.DaoSpend)(nil), // 48: penumbra.core.component.governance.v1alpha1.DaoSpend + (*v1alpha17.DaoOutput)(nil), // 49: penumbra.core.component.governance.v1alpha1.DaoOutput + (*v1alpha17.DaoDeposit)(nil), // 50: penumbra.core.component.governance.v1alpha1.DaoDeposit + (*v1alpha16.Ics20Withdrawal)(nil), // 51: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha13.Note)(nil), // 52: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha18.AddressView)(nil), // 53: penumbra.core.keys.v1alpha1.AddressView + (*v1alpha19.DenomMetadata)(nil), // 54: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha18.PayloadKey)(nil), // 55: penumbra.core.keys.v1alpha1.PayloadKey + (*v1alpha1.StateCommitment)(nil), // 56: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha110.Nullifier)(nil), // 57: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha13.SpendView)(nil), // 58: penumbra.core.component.shielded_pool.v1alpha1.SpendView + (*v1alpha13.OutputView)(nil), // 59: penumbra.core.component.shielded_pool.v1alpha1.OutputView + (*v1alpha14.SwapView)(nil), // 60: penumbra.core.component.dex.v1alpha1.SwapView + (*v1alpha14.SwapClaimView)(nil), // 61: penumbra.core.component.dex.v1alpha1.SwapClaimView + (*v1alpha17.DelegatorVoteView)(nil), // 62: penumbra.core.component.governance.v1alpha1.DelegatorVoteView + (*v1alpha111.SpendAuthSignature)(nil), // 63: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + (*v1alpha1.StateCommitmentProof)(nil), // 64: penumbra.crypto.tct.v1alpha1.StateCommitmentProof + (*v1alpha13.SpendPlan)(nil), // 65: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + (*v1alpha13.OutputPlan)(nil), // 66: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + (*v1alpha14.SwapPlan)(nil), // 67: penumbra.core.component.dex.v1alpha1.SwapPlan + (*v1alpha14.SwapClaimPlan)(nil), // 68: penumbra.core.component.dex.v1alpha1.SwapClaimPlan + (*v1alpha17.DelegatorVotePlan)(nil), // 69: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan + (*v1alpha14.PositionWithdrawPlan)(nil), // 70: penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan + (*v1alpha14.PositionRewardClaimPlan)(nil), // 71: penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan + (*v1alpha15.UndelegateClaimPlan)(nil), // 72: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan + (*v1alpha18.Address)(nil), // 73: penumbra.core.keys.v1alpha1.Address } var file_penumbra_core_transaction_v1alpha1_transaction_proto_depIdxs = []int32{ 2, // 0: penumbra.core.transaction.v1alpha1.Transaction.body:type_name -> penumbra.core.transaction.v1alpha1.TransactionBody - 26, // 1: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 27, // 1: penumbra.core.transaction.v1alpha1.Transaction.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot 6, // 2: penumbra.core.transaction.v1alpha1.TransactionBody.actions:type_name -> penumbra.core.transaction.v1alpha1.Action 4, // 3: penumbra.core.transaction.v1alpha1.TransactionBody.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 27, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 5, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 3, // 6: penumbra.core.transaction.v1alpha1.TransactionBody.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoData - 28, // 7: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue - 29, // 8: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 30, // 9: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 31, // 10: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap - 32, // 11: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim - 33, // 12: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 13: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 14: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 16: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 38, // 17: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 39, // 18: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 40, // 19: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 20: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 42, // 21: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 43, // 22: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 44, // 23: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 24: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 46, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 47, // 26: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 27: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 28: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 50, // 29: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 5, // 4: penumbra.core.transaction.v1alpha1.TransactionBody.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 3, // 5: penumbra.core.transaction.v1alpha1.TransactionBody.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoData + 28, // 6: penumbra.core.transaction.v1alpha1.TransactionParameters.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 29, // 7: penumbra.core.transaction.v1alpha1.DetectionData.fmd_clues:type_name -> penumbra.crypto.decaf377_fmd.v1alpha1.Clue + 30, // 8: penumbra.core.transaction.v1alpha1.Action.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 31, // 9: penumbra.core.transaction.v1alpha1.Action.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 32, // 10: penumbra.core.transaction.v1alpha1.Action.swap:type_name -> penumbra.core.component.dex.v1alpha1.Swap + 33, // 11: penumbra.core.transaction.v1alpha1.Action.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaim + 34, // 12: penumbra.core.transaction.v1alpha1.Action.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 13: penumbra.core.transaction.v1alpha1.Action.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 14: penumbra.core.transaction.v1alpha1.Action.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 15: penumbra.core.transaction.v1alpha1.Action.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 16: penumbra.core.transaction.v1alpha1.Action.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 39, // 17: penumbra.core.transaction.v1alpha1.Action.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 40, // 18: penumbra.core.transaction.v1alpha1.Action.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 41, // 19: penumbra.core.transaction.v1alpha1.Action.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 20: penumbra.core.transaction.v1alpha1.Action.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 43, // 21: penumbra.core.transaction.v1alpha1.Action.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 44, // 22: penumbra.core.transaction.v1alpha1.Action.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 45, // 23: penumbra.core.transaction.v1alpha1.Action.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 24: penumbra.core.transaction.v1alpha1.Action.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 47, // 25: penumbra.core.transaction.v1alpha1.Action.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 48, // 26: penumbra.core.transaction.v1alpha1.Action.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 27: penumbra.core.transaction.v1alpha1.Action.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 28: penumbra.core.transaction.v1alpha1.Action.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 51, // 29: penumbra.core.transaction.v1alpha1.Action.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal 8, // 30: penumbra.core.transaction.v1alpha1.TransactionPerspective.payload_keys:type_name -> penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment 9, // 31: penumbra.core.transaction.v1alpha1.TransactionPerspective.spend_nullifiers:type_name -> penumbra.core.transaction.v1alpha1.NullifierWithNote - 51, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 52, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView - 53, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 52, // 32: penumbra.core.transaction.v1alpha1.TransactionPerspective.advice_notes:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 53, // 33: penumbra.core.transaction.v1alpha1.TransactionPerspective.address_views:type_name -> penumbra.core.keys.v1alpha1.AddressView + 54, // 34: penumbra.core.transaction.v1alpha1.TransactionPerspective.denoms:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata 1, // 35: penumbra.core.transaction.v1alpha1.TransactionPerspective.transaction_id:type_name -> penumbra.core.transaction.v1alpha1.Id - 54, // 36: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey - 55, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 56, // 38: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 51, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 55, // 36: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey + 56, // 37: penumbra.core.transaction.v1alpha1.PayloadKeyWithCommitment.commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 57, // 38: penumbra.core.transaction.v1alpha1.NullifierWithNote.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 52, // 39: penumbra.core.transaction.v1alpha1.NullifierWithNote.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note 11, // 40: penumbra.core.transaction.v1alpha1.TransactionView.body_view:type_name -> penumbra.core.transaction.v1alpha1.TransactionBodyView - 26, // 41: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 27, // 41: penumbra.core.transaction.v1alpha1.TransactionView.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot 12, // 42: penumbra.core.transaction.v1alpha1.TransactionBodyView.action_views:type_name -> penumbra.core.transaction.v1alpha1.ActionView 4, // 43: penumbra.core.transaction.v1alpha1.TransactionBodyView.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters - 27, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 5, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData - 23, // 46: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView - 57, // 47: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView - 58, // 48: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView - 59, // 49: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView - 60, // 50: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView - 33, // 51: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 52: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 53: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 54: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 55: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 61, // 56: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView - 39, // 57: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 40, // 58: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 42, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw - 43, // 61: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim - 44, // 62: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 63: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 47, // 64: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 66: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 46, // 67: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim - 50, // 68: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 13, // 69: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash - 62, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 62, // 71: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - 26, // 72: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot - 63, // 73: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof - 17, // 74: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan - 27, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 18, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan - 19, // 77: penumbra.core.transaction.v1alpha1.TransactionPlan.memo_plan:type_name -> penumbra.core.transaction.v1alpha1.MemoPlan - 64, // 78: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan - 65, // 79: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan - 66, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan - 67, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan - 33, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition - 34, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 35, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit - 36, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw - 37, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote - 68, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan - 39, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim - 50, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 40, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen - 41, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose - 69, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan - 70, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan - 44, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate - 45, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 71, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan - 47, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend - 48, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput - 49, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit - 72, // 100: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address - 21, // 101: penumbra.core.transaction.v1alpha1.MemoPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext - 72, // 102: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address - 52, // 103: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView - 24, // 104: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible - 25, // 105: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque - 20, // 106: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext - 22, // 107: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView - 20, // 108: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 5, // 44: penumbra.core.transaction.v1alpha1.TransactionBodyView.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionData + 24, // 45: penumbra.core.transaction.v1alpha1.TransactionBodyView.memo_view:type_name -> penumbra.core.transaction.v1alpha1.MemoView + 58, // 46: penumbra.core.transaction.v1alpha1.ActionView.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView + 59, // 47: penumbra.core.transaction.v1alpha1.ActionView.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView + 60, // 48: penumbra.core.transaction.v1alpha1.ActionView.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapView + 61, // 49: penumbra.core.transaction.v1alpha1.ActionView.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimView + 34, // 50: penumbra.core.transaction.v1alpha1.ActionView.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 51: penumbra.core.transaction.v1alpha1.ActionView.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 52: penumbra.core.transaction.v1alpha1.ActionView.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 53: penumbra.core.transaction.v1alpha1.ActionView.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 54: penumbra.core.transaction.v1alpha1.ActionView.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 62, // 55: penumbra.core.transaction.v1alpha1.ActionView.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView + 40, // 56: penumbra.core.transaction.v1alpha1.ActionView.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 41, // 57: penumbra.core.transaction.v1alpha1.ActionView.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 58: penumbra.core.transaction.v1alpha1.ActionView.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 43, // 59: penumbra.core.transaction.v1alpha1.ActionView.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdraw + 44, // 60: penumbra.core.transaction.v1alpha1.ActionView.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaim + 45, // 61: penumbra.core.transaction.v1alpha1.ActionView.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 62: penumbra.core.transaction.v1alpha1.ActionView.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 48, // 63: penumbra.core.transaction.v1alpha1.ActionView.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 64: penumbra.core.transaction.v1alpha1.ActionView.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 65: penumbra.core.transaction.v1alpha1.ActionView.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 47, // 66: penumbra.core.transaction.v1alpha1.ActionView.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaim + 51, // 67: penumbra.core.transaction.v1alpha1.ActionView.ics20_withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 13, // 68: penumbra.core.transaction.v1alpha1.AuthorizationData.effect_hash:type_name -> penumbra.core.transaction.v1alpha1.EffectHash + 63, // 69: penumbra.core.transaction.v1alpha1.AuthorizationData.spend_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 63, // 70: penumbra.core.transaction.v1alpha1.AuthorizationData.delegator_vote_auths:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 27, // 71: penumbra.core.transaction.v1alpha1.WitnessData.anchor:type_name -> penumbra.crypto.tct.v1alpha1.MerkleRoot + 64, // 72: penumbra.core.transaction.v1alpha1.WitnessData.state_commitment_proofs:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitmentProof + 18, // 73: penumbra.core.transaction.v1alpha1.TransactionPlan.actions:type_name -> penumbra.core.transaction.v1alpha1.ActionPlan + 4, // 74: penumbra.core.transaction.v1alpha1.TransactionPlan.transaction_parameters:type_name -> penumbra.core.transaction.v1alpha1.TransactionParameters + 17, // 75: penumbra.core.transaction.v1alpha1.TransactionPlan.detection_data:type_name -> penumbra.core.transaction.v1alpha1.DetectionDataPlan + 20, // 76: penumbra.core.transaction.v1alpha1.TransactionPlan.memo_data:type_name -> penumbra.core.transaction.v1alpha1.MemoDataPlan + 19, // 77: penumbra.core.transaction.v1alpha1.DetectionDataPlan.clue_plans:type_name -> penumbra.core.transaction.v1alpha1.CluePlan + 65, // 78: penumbra.core.transaction.v1alpha1.ActionPlan.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendPlan + 66, // 79: penumbra.core.transaction.v1alpha1.ActionPlan.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputPlan + 67, // 80: penumbra.core.transaction.v1alpha1.ActionPlan.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlan + 68, // 81: penumbra.core.transaction.v1alpha1.ActionPlan.swap_claim:type_name -> penumbra.core.component.dex.v1alpha1.SwapClaimPlan + 34, // 82: penumbra.core.transaction.v1alpha1.ActionPlan.validator_definition:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorDefinition + 35, // 83: penumbra.core.transaction.v1alpha1.ActionPlan.ibc_relay_action:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 36, // 84: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_submit:type_name -> penumbra.core.component.governance.v1alpha1.ProposalSubmit + 37, // 85: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_withdraw:type_name -> penumbra.core.component.governance.v1alpha1.ProposalWithdraw + 38, // 86: penumbra.core.transaction.v1alpha1.ActionPlan.validator_vote:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVote + 69, // 87: penumbra.core.transaction.v1alpha1.ActionPlan.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVotePlan + 40, // 88: penumbra.core.transaction.v1alpha1.ActionPlan.proposal_deposit_claim:type_name -> penumbra.core.component.governance.v1alpha1.ProposalDepositClaim + 51, // 89: penumbra.core.transaction.v1alpha1.ActionPlan.withdrawal:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 41, // 90: penumbra.core.transaction.v1alpha1.ActionPlan.position_open:type_name -> penumbra.core.component.dex.v1alpha1.PositionOpen + 42, // 91: penumbra.core.transaction.v1alpha1.ActionPlan.position_close:type_name -> penumbra.core.component.dex.v1alpha1.PositionClose + 70, // 92: penumbra.core.transaction.v1alpha1.ActionPlan.position_withdraw:type_name -> penumbra.core.component.dex.v1alpha1.PositionWithdrawPlan + 71, // 93: penumbra.core.transaction.v1alpha1.ActionPlan.position_reward_claim:type_name -> penumbra.core.component.dex.v1alpha1.PositionRewardClaimPlan + 45, // 94: penumbra.core.transaction.v1alpha1.ActionPlan.delegate:type_name -> penumbra.core.component.stake.v1alpha1.Delegate + 46, // 95: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate + 72, // 96: penumbra.core.transaction.v1alpha1.ActionPlan.undelegate_claim:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan + 48, // 97: penumbra.core.transaction.v1alpha1.ActionPlan.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.DaoSpend + 49, // 98: penumbra.core.transaction.v1alpha1.ActionPlan.dao_output:type_name -> penumbra.core.component.governance.v1alpha1.DaoOutput + 50, // 99: penumbra.core.transaction.v1alpha1.ActionPlan.dao_deposit:type_name -> penumbra.core.component.governance.v1alpha1.DaoDeposit + 73, // 100: penumbra.core.transaction.v1alpha1.CluePlan.address:type_name -> penumbra.core.keys.v1alpha1.Address + 22, // 101: penumbra.core.transaction.v1alpha1.MemoDataPlan.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 73, // 102: penumbra.core.transaction.v1alpha1.MemoPlaintext.return_address:type_name -> penumbra.core.keys.v1alpha1.Address + 53, // 103: penumbra.core.transaction.v1alpha1.MemoPlaintextView.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView + 25, // 104: penumbra.core.transaction.v1alpha1.MemoView.visible:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Visible + 26, // 105: penumbra.core.transaction.v1alpha1.MemoView.opaque:type_name -> penumbra.core.transaction.v1alpha1.MemoView.Opaque + 21, // 106: penumbra.core.transaction.v1alpha1.MemoView.Visible.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext + 23, // 107: penumbra.core.transaction.v1alpha1.MemoView.Visible.plaintext:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintextView + 21, // 108: penumbra.core.transaction.v1alpha1.MemoView.Opaque.ciphertext:type_name -> penumbra.core.transaction.v1alpha1.MemoCiphertext 109, // [109:109] is the sub-list for method output_type 109, // [109:109] is the sub-list for method input_type 109, // [109:109] is the sub-list for extension type_name @@ -3751,7 +3779,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActionPlan); i { + switch v := v.(*DetectionDataPlan); i { case 0: return &v.state case 1: @@ -3763,7 +3791,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CluePlan); i { + switch v := v.(*ActionPlan); i { case 0: return &v.state case 1: @@ -3775,7 +3803,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoPlan); i { + switch v := v.(*CluePlan); i { case 0: return &v.state case 1: @@ -3787,7 +3815,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoCiphertext); i { + switch v := v.(*MemoDataPlan); i { case 0: return &v.state case 1: @@ -3799,7 +3827,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoPlaintext); i { + switch v := v.(*MemoCiphertext); i { case 0: return &v.state case 1: @@ -3811,7 +3839,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoPlaintextView); i { + switch v := v.(*MemoPlaintext); i { case 0: return &v.state case 1: @@ -3823,7 +3851,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoView); i { + switch v := v.(*MemoPlaintextView); i { case 0: return &v.state case 1: @@ -3835,7 +3863,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MemoView_Visible); i { + switch v := v.(*MemoView); i { case 0: return &v.state case 1: @@ -3847,6 +3875,18 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { } } file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MemoView_Visible); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoView_Opaque); i { case 0: return &v.state @@ -3907,7 +3947,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionView_UndelegateClaim)(nil), (*ActionView_Ics20Withdrawal)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[18].OneofWrappers = []interface{}{ (*ActionPlan_Spend)(nil), (*ActionPlan_Output)(nil), (*ActionPlan_Swap)(nil), @@ -3931,7 +3971,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { (*ActionPlan_DaoOutput)(nil), (*ActionPlan_DaoDeposit)(nil), } - file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[23].OneofWrappers = []interface{}{ + file_penumbra_core_transaction_v1alpha1_transaction_proto_msgTypes[24].OneofWrappers = []interface{}{ (*MemoView_Visible_)(nil), (*MemoView_Opaque_)(nil), } @@ -3941,7 +3981,7 @@ func file_penumbra_core_transaction_v1alpha1_transaction_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_transaction_v1alpha1_transaction_proto_rawDesc, NumEnums: 0, - NumMessages: 26, + NumMessages: 27, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.pb.go b/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.pb.go index 38531f67f7..1be2be4dc7 100644 --- a/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.pb.go +++ b/proto/go/gen/penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/crypto/decaf377_fmd/v1alpha1/decaf377_fmd.proto diff --git a/proto/go/gen/penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.pb.go b/proto/go/gen/penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.pb.go index 7fd91635ca..f85fc0d860 100644 --- a/proto/go/gen/penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.pb.go +++ b/proto/go/gen/penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/crypto/decaf377_frost/v1alpha1/decaf377_frost.proto diff --git a/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go b/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go index c4bb76d1f1..454bad2be6 100644 --- a/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go +++ b/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto diff --git a/proto/go/gen/penumbra/crypto/tct/v1alpha1/tct.pb.go b/proto/go/gen/penumbra/crypto/tct/v1alpha1/tct.pb.go index 6f9654a172..99f0b24784 100644 --- a/proto/go/gen/penumbra/crypto/tct/v1alpha1/tct.pb.go +++ b/proto/go/gen/penumbra/crypto/tct/v1alpha1/tct.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/crypto/tct/v1alpha1/tct.proto diff --git a/proto/go/gen/penumbra/custody/threshold/v1alpha1/threshold.pb.go b/proto/go/gen/penumbra/custody/threshold/v1alpha1/threshold.pb.go index f232d28662..3a1cf1bf33 100644 --- a/proto/go/gen/penumbra/custody/threshold/v1alpha1/threshold.pb.go +++ b/proto/go/gen/penumbra/custody/threshold/v1alpha1/threshold.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/custody/threshold/v1alpha1/threshold.proto diff --git a/proto/go/gen/penumbra/custody/v1alpha1/custody.pb.go b/proto/go/gen/penumbra/custody/v1alpha1/custody.pb.go index 7f265f2924..c76f5eb911 100644 --- a/proto/go/gen/penumbra/custody/v1alpha1/custody.pb.go +++ b/proto/go/gen/penumbra/custody/v1alpha1/custody.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/custody/v1alpha1/custody.proto diff --git a/proto/go/gen/penumbra/tools/summoning/v1alpha1/summoning.pb.go b/proto/go/gen/penumbra/tools/summoning/v1alpha1/summoning.pb.go index fcb9d95636..34766389ad 100644 --- a/proto/go/gen/penumbra/tools/summoning/v1alpha1/summoning.pb.go +++ b/proto/go/gen/penumbra/tools/summoning/v1alpha1/summoning.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/tools/summoning/v1alpha1/summoning.proto diff --git a/proto/go/gen/penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.pb.go b/proto/go/gen/penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.pb.go index 926f710aa1..09dcc4bdc9 100644 --- a/proto/go/gen/penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.pb.go +++ b/proto/go/gen/penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/util/tendermint_proxy/v1alpha1/tendermint_proxy.proto diff --git a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go index ccbf528888..55d0a710b5 100644 --- a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go +++ b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.32.0 // protoc (unknown) // source: penumbra/view/v1alpha1/view.proto diff --git a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto index f7e9183133..33ee4ec1ed 100644 --- a/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1alpha1/transaction.proto @@ -35,8 +35,6 @@ message TransactionBody { repeated Action actions = 1; // Parameters determining if a transaction should be accepted by this chain. TransactionParameters transaction_parameters = 2; - // The transaction fee. - component.fee.v1alpha1.Fee fee = 3; // Detection data for use with Fuzzy Message Detection DetectionData detection_data = 4; // Sub-message containing memo ciphertext if a memo was added to the transaction. @@ -59,6 +57,8 @@ message TransactionParameters { // The chain this transaction is intended for. Including this prevents // replaying a transaction on one chain onto a different chain. string chain_id = 2; + // The transaction fee. + component.fee.v1alpha1.Fee fee = 3; } // Detection data used by a detection server performing Fuzzy Message Detection. @@ -150,8 +150,6 @@ message TransactionBodyView { repeated ActionView action_views = 1; // Transaction parameters. TransactionParameters transaction_parameters = 2; - // The transaction fee. - component.fee.v1alpha1.Fee fee = 3; // The detection data in this transaction, only populated if // there are outputs in the actions of this transaction. DetectionData detection_data = 4; @@ -228,18 +226,22 @@ message WitnessData { // Describes a planned transaction. Permits clients to prepare a transaction // prior submission, so that a user can review it prior to authorizing its execution. +// +// The `TransactionPlan` is a fully determined bundle binding all of a transaction's effects. +// The only thing it does not include is the witness data used for proving. message TransactionPlan { - // The planner interface(s) for Actions to be performed, such as a Spend, Swap, - // or Delegation. See the ActionPlan docs for a full list of options. + // The sequence of actions planned for this transaction. repeated ActionPlan actions = 1; - // Time, as block height, after which TransactionPlan should be considered invalid. - uint64 expiry_height = 2; - // The name of the network for which this TransactionPlan was built. - string chain_id = 3; - component.fee.v1alpha1.Fee fee = 4; + // Parameters determining if a transaction should be accepted by this chain. + TransactionParameters transaction_parameters = 2; + // Detection data for use with Fuzzy Message Detection + DetectionDataPlan detection_data = 4; + // The memo plan for this transaction. + MemoDataPlan memo_data = 5; +} + +message DetectionDataPlan { repeated CluePlan clue_plans = 5; - // Planning interface for constructing an optional Memo for the Transaction. - MemoPlan memo_plan = 6; } // Describes a planned transaction action. @@ -298,8 +300,8 @@ message CluePlan { uint64 precision_bits = 3; } -// Describes a plan for forming a `Memo`. -message MemoPlan { +// Describes a plan for forming a `MemoData`. +message MemoDataPlan { // The plaintext. MemoPlaintext plaintext = 1; // The key to use to encrypt the memo.