From 27714fe9f1debe91616d304a8adafe5cc862f2a9 Mon Sep 17 00:00:00 2001 From: jbearer Date: Tue, 19 Dec 2023 15:21:28 +0000 Subject: [PATCH] deploy: 6c1a37ff44ff36427d9357ffdfee1c4ee4ac63f0 --- hotshot_query_service/all.html | 2 +- .../availability/enum.Error.html | 22 +- .../availability/enum.ResourceId.html | 2 +- .../trait.AvailabilityDataSource.html | 2 +- .../trait.UpdateAvailabilityData.html | 2 +- .../availability/type.BlockId.html | 2 +- .../availability/type.LeafId.html | 2 +- hotshot_query_service/data_source/index.html | 2 +- .../data_source/sql/index.html | 4 +- .../data_source/sql/sidebar-items.js | 2 +- .../data_source/sql/struct.Config.html | 29 +- .../data_source/sql/struct.SqlDataSource.html | 129 ++++-- .../data_source/sql/struct.Transaction.html | 82 +++- .../data_source/sql/trait.Query.html | 130 ++++++ .../struct.ExtensibleDataSource.html | 4 +- .../trait.VersionedDataSource.html | 2 +- hotshot_query_service/enum.Error.html | 6 +- hotshot_query_service/enum.QueryError.html | 8 +- .../macro.instantiate_data_source_tests.html | 2 +- .../metrics/enum.MetricsError.html | 2 +- hotshot_query_service/status/enum.Error.html | 6 +- .../status/trait.StatusDataSource.html | 2 +- .../clap_builder/derive/trait.Args.js | 2 +- .../derive/trait.FromArgMatches.js | 2 +- implementors/core/clone/trait.Clone.js | 2 +- implementors/core/cmp/trait.Eq.js | 2 +- implementors/core/cmp/trait.PartialEq.js | 2 +- implementors/core/convert/trait.From.js | 2 +- implementors/core/default/trait.Default.js | 2 +- implementors/core/error/trait.Error.js | 2 +- implementors/core/fmt/trait.Debug.js | 2 +- implementors/core/fmt/trait.Display.js | 2 +- implementors/core/hash/trait.Hash.js | 2 +- implementors/core/marker/trait.Copy.js | 2 +- .../core/marker/trait.StructuralEq.js | 2 +- .../core/marker/trait.StructuralPartialEq.js | 2 +- .../data_source/sql/trait.Query.js | 3 + implementors/serde/de/trait.Deserialize.js | 2 +- implementors/serde/ser/trait.Serialize.js | 2 +- implementors/snafu/trait.ErrorCompat.js | 2 +- implementors/snafu/trait.IntoError.js | 2 +- search-index.js | 2 +- src/hotshot_query_service/data_source.rs.html | 84 ++++ .../data_source/extension.rs.html | 8 + .../data_source/fs.rs.html | 8 + .../data_source/metrics.rs.html | 12 + .../data_source/sql.rs.html | 390 ++++++++++++------ 47 files changed, 737 insertions(+), 250 deletions(-) create mode 100644 hotshot_query_service/data_source/sql/trait.Query.html create mode 100644 implementors/hotshot_query_service/data_source/sql/trait.Query.js diff --git a/hotshot_query_service/all.html b/hotshot_query_service/all.html index 462930f12..2759b5d2d 100644 --- a/hotshot_query_service/all.html +++ b/hotshot_query_service/all.html @@ -1 +1 @@ -List of all items in this crate

List of all items

Structs

Enums

Traits

Macros

Functions

Type Aliases

\ No newline at end of file +List of all items in this crate

List of all items

Structs

Enums

Traits

Macros

Functions

Type Aliases

\ No newline at end of file diff --git a/hotshot_query_service/availability/enum.Error.html b/hotshot_query_service/availability/enum.Error.html index c7754341a..29536762c 100644 --- a/hotshot_query_service/availability/enum.Error.html +++ b/hotshot_query_service/availability/enum.Error.html @@ -45,30 +45,30 @@ Self: Debug + Display,
source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl ErrorCompat for Error

source§

fn backtrace(&self) -> Option<&Backtrace>

Returns a Backtrace that may be printed.
§

fn iter_chain(&self) -> ChainCompat<'_>where Self: AsErrorSource,

Returns an iterator for traversing the chain of errors, starting with the current error -and continuing with recursive calls to Error::source. Read more
source§

impl From<(String, StatusCode)> for Error

source§

fn from(original: (String, StatusCode)) -> Error

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(original: Error) -> Error

Converts to this type from the input type.
source§

impl From<RequestError> for Error

source§

fn from(original: RequestError) -> Error

Converts to this type from the input type.
source§

impl<__T0, __T1> IntoError<Error> for BlockStreamSnafu<__T0, __T1>where +and continuing with recursive calls to Error::source. Read more

source§

impl From<(String, StatusCode)> for Error

source§

fn from(original: (String, StatusCode)) -> Error

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(original: Error) -> Error

Converts to this type from the input type.
source§

impl From<RequestError> for Error

source§

fn from(original: RequestError) -> Error

Converts to this type from the input type.
source§

impl<__T0, __T1> IntoError<Error> for BlockStreamSnafu<__T0, __T1>where Error: Error + ErrorCompat, __T0: Into<usize>, __T1: Into<String>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0, __T1> IntoError<Error> for CustomSnafu<__T0, __T1>where Error: Error + ErrorCompat, __T0: Into<String>, - __T1: Into<StatusCode>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0, __T1> IntoError<Error> for InvalidTransactionIndexSnafu<__T0, __T1>where + __T1: Into<StatusCode>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0, __T1> IntoError<Error> for InvalidTransactionIndexSnafu<__T0, __T1>where Error: Error + ErrorCompat, __T0: Into<u64>, - __T1: Into<u64>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0, __T1> IntoError<Error> for LeafStreamSnafu<__T0, __T1>where + __T1: Into<u64>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0, __T1> IntoError<Error> for LeafStreamSnafu<__T0, __T1>where Error: Error + ErrorCompat, __T0: Into<usize>, - __T1: Into<String>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0> IntoError<Error> for QueryBlockSnafu<__T0>where + __T1: Into<String>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0> IntoError<Error> for QueryBlockSnafu<__T0>where Error: Error + ErrorCompat, - __T0: Into<String>,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0> IntoError<Error> for QueryLeafSnafu<__T0>where + __T0: Into<String>,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0> IntoError<Error> for QueryLeafSnafu<__T0>where Error: Error + ErrorCompat, - __T0: Into<String>,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0> IntoError<Error> for QueryProposalsSnafu<__T0>where + __T0: Into<String>,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0> IntoError<Error> for QueryProposalsSnafu<__T0>where Error: Error + ErrorCompat, - __T0: Into<EncodedPublicKey>,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0> IntoError<Error> for QueryTransactionSnafu<__T0>where + __T0: Into<EncodedPublicKey>,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl<__T0> IntoError<Error> for QueryTransactionSnafu<__T0>where Error: Error + ErrorCompat, - __T0: Into<String>,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl IntoError<Error> for RequestSnafuwhere - Error: Error + ErrorCompat,

§

type Source = RequestError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl IntoError<Error> for StreamBlockSnafuwhere - Error: Error + ErrorCompat,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl IntoError<Error> for StreamLeafSnafuwhere - Error: Error + ErrorCompat,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl Serialize for Error

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __T0: Into<String>,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl IntoError<Error> for RequestSnafuwhere + Error: Error + ErrorCompat,

§

type Source = RequestError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl IntoError<Error> for StreamBlockSnafuwhere + Error: Error + ErrorCompat,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl IntoError<Error> for StreamLeafSnafuwhere + Error: Error + ErrorCompat,

§

type Source = QueryError

The underlying error
source§

fn into_error(self, error: Self::Source) -> Error

Combine the information to produce the error
source§

impl Serialize for Error

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AsErrorSource for Twhere T: Error + 'static,

§

fn as_error_source(&self) -> &(dyn Error + 'static)

For maximum effectiveness, this needs to be called as a method diff --git a/hotshot_query_service/availability/enum.ResourceId.html b/hotshot_query_service/availability/enum.ResourceId.html index 839d67802..5996e802b 100644 --- a/hotshot_query_service/availability/enum.ResourceId.html +++ b/hotshot_query_service/availability/enum.ResourceId.html @@ -1,7 +1,7 @@ ResourceId in hotshot_query_service::availability - Rust
pub enum ResourceId<T: Committable> {
     Number(usize),
     Hash(Commitment<T>),
-}

Variants§

§

Number(usize)

§

Hash(Commitment<T>)

Trait Implementations§

source§

impl<T: Committable> Clone for ResourceId<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Committable> Debug for ResourceId<T>

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> Display for ResourceId<T>

source§

fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> From<Commitment<T>> for ResourceId<T>

source§

fn from(original: Commitment<T>) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> From<usize> for ResourceId<T>

source§

fn from(original: usize) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> Hash for ResourceId<T>

source§

fn hash<__HT>(&self, __state: &mut __HT)where +}

Variants§

§

Number(usize)

§

Hash(Commitment<T>)

Trait Implementations§

source§

impl<T: Committable> Clone for ResourceId<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Committable> Debug for ResourceId<T>

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> Display for ResourceId<T>

source§

fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> From<Commitment<T>> for ResourceId<T>

source§

fn from(original: Commitment<T>) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> From<usize> for ResourceId<T>

source§

fn from(original: usize) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> Hash for ResourceId<T>

source§

fn hash<__HT>(&self, __state: &mut __HT)where __HT: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: Committable> Ord for ResourceId<T>

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere diff --git a/hotshot_query_service/availability/trait.AvailabilityDataSource.html b/hotshot_query_service/availability/trait.AvailabilityDataSource.html index c666debfd..7b527a1f6 100644 --- a/hotshot_query_service/availability/trait.AvailabilityDataSource.html +++ b/hotshot_query_service/availability/trait.AvailabilityDataSource.html @@ -141,7 +141,7 @@ R: RangeBounds<usize> + Send

§

type BlockRange<'a, R> = <D as AvailabilityDataSource<Types>>::BlockRange<'a, R> where Self: 'a, - R: RangeBounds<usize> + Send

source§

impl<Types> AvailabilityDataSource<Types> for SqlDataSource<Types>where + R: RangeBounds<usize> + Send

source§

impl<Types> AvailabilityDataSource<Types> for SqlDataSource<Types>where Types: NodeType, Payload<Types>: QueryablePayload,

§

type LeafStream = Pin<Box<dyn Stream<Item = Result<LeafQueryData<Types>, QueryError>> + Send, Global>>

§

type BlockStream = Pin<Box<dyn Stream<Item = Result<BlockQueryData<Types>, QueryError>> + Send, Global>>

§

type LeafRange<'a, R> = Pin<Box<dyn Stream<Item = Result<LeafQueryData<Types>, QueryError>> + Send, Global>> where diff --git a/hotshot_query_service/availability/trait.UpdateAvailabilityData.html b/hotshot_query_service/availability/trait.UpdateAvailabilityData.html index 87b06fc11..fe78f7128 100644 --- a/hotshot_query_service/availability/trait.UpdateAvailabilityData.html +++ b/hotshot_query_service/availability/trait.UpdateAvailabilityData.html @@ -27,7 +27,7 @@ 'life0: 'async_trait,

Implementors§

source§

impl<D, U, Types> UpdateAvailabilityData<Types> for ExtensibleDataSource<D, U>where D: UpdateAvailabilityData<Types> + Send + Sync, U: Send + Sync, - Types: NodeType,

§

type Error = <D as UpdateAvailabilityData<Types>>::Error

source§

impl<Types> UpdateAvailabilityData<Types> for SqlDataSource<Types>where + Types: NodeType,

§

type Error = <D as UpdateAvailabilityData<Types>>::Error

source§

impl<Types> UpdateAvailabilityData<Types> for SqlDataSource<Types>where Types: NodeType, Payload<Types>: QueryablePayload,

source§

impl<Types: NodeType> UpdateAvailabilityData<Types> for FileSystemDataSource<Types>where Payload<Types>: QueryablePayload,

§

type Error = PersistenceError

\ No newline at end of file diff --git a/hotshot_query_service/availability/type.BlockId.html b/hotshot_query_service/availability/type.BlockId.html index 66b99b644..d3375d1d7 100644 --- a/hotshot_query_service/availability/type.BlockId.html +++ b/hotshot_query_service/availability/type.BlockId.html @@ -1,7 +1,7 @@ BlockId in hotshot_query_service::availability - Rust
pub type BlockId<Types> = ResourceId<Header<Types>>;

Aliased Type§

enum BlockId<Types> {
     Number(usize),
     Hash(Commitment<<Types as NodeType>::BlockHeader>),
-}

Variants§

§

Number(usize)

§

Hash(Commitment<<Types as NodeType>::BlockHeader>)

Trait Implementations§

source§

impl<T: Committable> Clone for ResourceId<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Committable> Debug for ResourceId<T>

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> Display for ResourceId<T>

source§

fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> From<Commitment<T>> for ResourceId<T>

source§

fn from(original: Commitment<T>) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> From<usize> for ResourceId<T>

source§

fn from(original: usize) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> Hash for ResourceId<T>

source§

fn hash<__HT>(&self, __state: &mut __HT)where +}

Variants§

§

Number(usize)

§

Hash(Commitment<<Types as NodeType>::BlockHeader>)

Trait Implementations§

source§

impl<T: Committable> Clone for ResourceId<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Committable> Debug for ResourceId<T>

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> Display for ResourceId<T>

source§

fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> From<Commitment<T>> for ResourceId<T>

source§

fn from(original: Commitment<T>) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> From<usize> for ResourceId<T>

source§

fn from(original: usize) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> Hash for ResourceId<T>

source§

fn hash<__HT>(&self, __state: &mut __HT)where __HT: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: Committable> Ord for ResourceId<T>

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere diff --git a/hotshot_query_service/availability/type.LeafId.html b/hotshot_query_service/availability/type.LeafId.html index 40bee1572..109a7839d 100644 --- a/hotshot_query_service/availability/type.LeafId.html +++ b/hotshot_query_service/availability/type.LeafId.html @@ -1,7 +1,7 @@ LeafId in hotshot_query_service::availability - Rust
pub type LeafId<Types> = ResourceId<Leaf<Types>>;

Aliased Type§

enum LeafId<Types> {
     Number(usize),
     Hash(Commitment<Leaf<Types>>),
-}

Variants§

§

Number(usize)

§

Hash(Commitment<Leaf<Types>>)

Trait Implementations§

source§

impl<T: Committable> Clone for ResourceId<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Committable> Debug for ResourceId<T>

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> Display for ResourceId<T>

source§

fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> From<Commitment<T>> for ResourceId<T>

source§

fn from(original: Commitment<T>) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> From<usize> for ResourceId<T>

source§

fn from(original: usize) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> Hash for ResourceId<T>

source§

fn hash<__HT>(&self, __state: &mut __HT)where +}

Variants§

§

Number(usize)

§

Hash(Commitment<Leaf<Types>>)

Trait Implementations§

source§

impl<T: Committable> Clone for ResourceId<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Committable> Debug for ResourceId<T>

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> Display for ResourceId<T>

source§

fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Committable> From<Commitment<T>> for ResourceId<T>

source§

fn from(original: Commitment<T>) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> From<usize> for ResourceId<T>

source§

fn from(original: usize) -> ResourceId<T>

Converts to this type from the input type.
source§

impl<T: Committable> Hash for ResourceId<T>

source§

fn hash<__HT>(&self, __state: &mut __HT)where __HT: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: Committable> Ord for ResourceId<T>

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere diff --git a/hotshot_query_service/data_source/index.html b/hotshot_query_service/data_source/index.html index fb78980a9..ea50c3f21 100644 --- a/hotshot_query_service/data_source/index.html +++ b/hotshot_query_service/data_source/index.html @@ -1,4 +1,4 @@ -hotshot_query_service::data_source - Rust
Expand description

Persistent storage and sources of data consumed by APIs.

+hotshot_query_service::data_source - Rust
Expand description

Persistent storage and sources of data consumed by APIs.

Naturally, an archival query service such as this is heavily dependent on a persistent storage implementation. The APIs provided by this query service are generic over the specific type of the persistence layer, which we call a data source. This module provides the following diff --git a/hotshot_query_service/data_source/sql/index.html b/hotshot_query_service/data_source/sql/index.html index b59daec97..1303751f2 100644 --- a/hotshot_query_service/data_source/sql/index.html +++ b/hotshot_query_service/data_source/sql/index.html @@ -1,3 +1,3 @@ -hotshot_query_service::data_source::sql - Rust

Re-exports

  • pub use tokio_postgres as postgres;

Macros

Structs

Traits

Functions

\ No newline at end of file diff --git a/hotshot_query_service/data_source/sql/sidebar-items.js b/hotshot_query_service/data_source/sql/sidebar-items.js index 890f99e27..2414ac146 100644 --- a/hotshot_query_service/data_source/sql/sidebar-items.js +++ b/hotshot_query_service/data_source/sql/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"fn":["default_migrations"],"macro":["include_dir","include_migrations"],"struct":["Config","Error","Migration","SqlDataSource","Transaction"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":["default_migrations"],"macro":["include_dir","include_migrations"],"struct":["Config","Error","Migration","SqlDataSource","Transaction"],"trait":["Query"]}; \ No newline at end of file diff --git a/hotshot_query_service/data_source/sql/struct.Config.html b/hotshot_query_service/data_source/sql/struct.Config.html index 273c57038..c3d565bb7 100644 --- a/hotshot_query_service/data_source/sql/struct.Config.html +++ b/hotshot_query_service/data_source/sql/struct.Config.html @@ -1,17 +1,26 @@ -Config in hotshot_query_service::data_source::sql - Rust
pub struct Config { /* private fields */ }
Expand description

Postgres client config.

-

Implementations§

source§

impl Config

source

pub fn host(self, host: impl Into<String>) -> Self

Set the hostname of the database server.

+Config in hotshot_query_service::data_source::sql - Rust
pub struct Config { /* private fields */ }
Expand description

Postgres client config.

+

Implementations§

source§

impl Config

source

pub fn host(self, host: impl Into<String>) -> Self

Set the hostname of the database server.

The default is localhost.

-
source

pub fn port(self, port: u16) -> Self

Set the port on which to connect to the database.

+
source

pub fn port(self, port: u16) -> Self

Set the port on which to connect to the database.

The default is 5432, the default Postgres port.

-
source

pub fn user(self, user: impl Into<String>) -> Self

Set the DB user to connect as.

-
source

pub fn password(self, password: impl Into<String>) -> Self

Set a password for connecting to the database.

-
source

pub fn database(self, database: impl Into<String>) -> Self

Set the name of the database to connect to.

-
source

pub fn migrations(self, migrations: impl IntoIterator<Item = Migration>) -> Self

Add custom migrations to run when connecting to the database.

-
source

pub fn no_migrations(self) -> Self

Skip all migrations when connecting to the database.

-
source

pub async fn connect<Types>(self) -> Result<SqlDataSource<Types>, Error>where +

source

pub fn user(self, user: impl Into<String>) -> Self

Set the DB user to connect as.

+
source

pub fn password(self, password: impl Into<String>) -> Self

Set a password for connecting to the database.

+
source

pub fn database(self, database: impl Into<String>) -> Self

Set the name of the database to connect to.

+
source

pub fn schema(self, schema: impl Into<String>) -> Self

Set the name of the schema to use for queries.

+

The default schema is named hotshot and is created via the default migrations.

+
source

pub fn reset_schema(self) -> Self

Reset the schema on connection.

+

When this Config is used to connect a SqlDataSource, if this +option is set, the relevant schema will first be dropped and then +recreated, yielding a completely fresh instance of the query service.

+

This is a particularly useful capability for development and staging environments. Still, it +must be used with extreme caution, as using this will irrevocably delete any data pertaining +to the query service in the database.

+
source

pub fn migrations(self, migrations: impl IntoIterator<Item = Migration>) -> Self

Add custom migrations to run when connecting to the database.

+
source

pub fn no_migrations(self) -> Self

Skip all migrations when connecting to the database.

+
source

pub async fn connect<Types>(self) -> Result<SqlDataSource<Types>, Error>where Types: NodeType, Payload<Types>: QueryablePayload,

Connect to the database with this config.

-

Trait Implementations§

source§

impl Clone for Config

source§

fn clone(&self) -> Config

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Config

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Config

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +

Trait Implementations§

source§

impl Clone for Config

source§

fn clone(&self) -> Config

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Config

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Config

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere T: 'a,

§

fn implicit( diff --git a/hotshot_query_service/data_source/sql/struct.SqlDataSource.html b/hotshot_query_service/data_source/sql/struct.SqlDataSource.html index 8cf6d1036..99f4d6565 100644 --- a/hotshot_query_service/data_source/sql/struct.SqlDataSource.html +++ b/hotshot_query_service/data_source/sql/struct.SqlDataSource.html @@ -1,4 +1,4 @@ -SqlDataSource in hotshot_query_service::data_source::sql - Rust
pub struct SqlDataSource<Types>where
+SqlDataSource in hotshot_query_service::data_source::sql - Rust
pub struct SqlDataSource<Types>where
     Types: NodeType,{ /* private fields */ }
Expand description

A data source for the APIs provided in this crate, backed by a remote PostgreSQL database.

Administration

This data source will automatically connect to and perform queries on a remote SQL database. @@ -6,6 +6,11 @@

Administration

left out of the scope of this implementation, and is expected to be performed manually using off-the-shelf DBMS adminstration tools. The one exception is migrations, which are handled transparently by the SqlDataSource.

+

Schema

+

All the objects created and used by SqlDataSource are grouped under a schema for easy +management. By default, the schema is named hotshot, and is created the first time a +SqlDataSource is constructed. The name of the schema can be configured by setting +Config::schema.

Initialization

When creating a SqlDataSource, the caller can use Config to specify the host, user, and database to connect to. As such, SqlDataSource is not very opinionated about how the @@ -28,6 +33,13 @@

Initialization

.database("hotshot_query_service") .user("hotshot_user") .password("password")
+

Resetting

+

In general, resetting the database when necessary is left up to the administrator. However, for +convenience, we do provide a reset_schema option which can be used to +wipe out existing state and create a fresh instance of the query service. This is particularly +useful for development and staging environments. This function will permanently delete all +tables associated with the schema used by this query service, but will not reset other schemas +or database.

Migrations

For the SqlDataSource to work, the database must be initialized with the appropriate schema, and the schema must be kept up to date when deploying a new version of this software which @@ -164,26 +176,17 @@

Composition

Ok(app) }

-

Implementations§

source§

impl<Types> SqlDataSource<Types>where +

Implementations§

source§

impl<Types> SqlDataSource<Types>where Types: NodeType, - Payload<Types>: QueryablePayload,

source

pub async fn connect(config: Config) -> Result<Self, Error>

Connect to a remote database.

-
source§

impl<Types> SqlDataSource<Types>where - Types: NodeType,

source

pub async fn query<T, P>( - &self, - query: &T, - params: P -) -> Result<RowStream, Error>where - T: ?Sized + ToStatement, - P: IntoIterator, - P::IntoIter: ExactSizeIterator, - P::Item: BorrowToSql,

Query the underlying SQL database.

-
source

pub async fn transaction(&mut self) -> Result<Transaction<'_>, Error>

Access the transaction which is accumulating all uncommitted changes to the data source.

+ Payload<Types>: QueryablePayload,

source

pub async fn connect(config: Config) -> Result<Self, Error>

Connect to a remote database.

+
source§

impl<Types> SqlDataSource<Types>where + Types: NodeType,

source

pub async fn transaction(&mut self) -> QueryResult<Transaction<'_>>

Access the transaction which is accumulating all uncommitted changes to the data source.

This can be used to manually group database modifications to custom state atomically with modifications made through the SqlDataSource.

If there is no currently open transaction, a new transaction will be opened. No changes made through the transaction objeect returned by this method will be persisted until commit is called.

-

Trait Implementations§

source§

impl<Types> AvailabilityDataSource<Types> for SqlDataSource<Types>where +

Trait Implementations§

source§

impl<Types> AvailabilityDataSource<Types> for SqlDataSource<Types>where Types: NodeType, Payload<Types>: QueryablePayload,

§

type LeafStream = Pin<Box<dyn Stream<Item = Result<LeafQueryData<Types>, QueryError>> + Send, Global>>

§

type BlockStream = Pin<Box<dyn Stream<Item = Result<BlockQueryData<Types>, QueryError>> + Send, Global>>

§

type LeafRange<'a, R> = Pin<Box<dyn Stream<Item = Result<LeafQueryData<Types>, QueryError>> + Send, Global>> where @@ -191,67 +194,123 @@

Composition

R: RangeBounds<usize> + Send

§

type BlockRange<'a, R> = Pin<Box<dyn Stream<Item = Result<BlockQueryData<Types>, QueryError>> + Send, Global>> where Self: 'a, - R: RangeBounds<usize> + Send

source§

fn get_leaf<'life0, 'async_trait, ID>( + R: RangeBounds<usize> + Send

source§

fn get_leaf<'life0, 'async_trait, ID>( &'life0 self, id: ID ) -> Pin<Box<dyn Future<Output = QueryResult<LeafQueryData<Types>>> + Send + 'async_trait>>where ID: Into<LeafId<Types>> + Send + Sync + 'async_trait, Self: 'async_trait, - 'life0: 'async_trait,

source§

fn get_block<'life0, 'async_trait, ID>( + 'life0: 'async_trait,

source§

fn get_block<'life0, 'async_trait, ID>( &'life0 self, id: ID ) -> Pin<Box<dyn Future<Output = QueryResult<BlockQueryData<Types>>> + Send + 'async_trait>>where ID: Into<BlockId<Types>> + Send + Sync + 'async_trait, Self: 'async_trait, - 'life0: 'async_trait,

source§

fn get_leaf_range<'life0, 'async_trait, R>( + 'life0: 'async_trait,

source§

fn get_leaf_range<'life0, 'async_trait, R>( &'life0 self, range: R ) -> Pin<Box<dyn Future<Output = QueryResult<Self::LeafRange<'_, R>>> + Send + 'async_trait>>where R: RangeBounds<usize> + Send + 'async_trait, Self: 'async_trait, - 'life0: 'async_trait,

source§

fn get_block_range<'life0, 'async_trait, R>( + 'life0: 'async_trait,

source§

fn get_block_range<'life0, 'async_trait, R>( &'life0 self, range: R ) -> Pin<Box<dyn Future<Output = QueryResult<Self::BlockRange<'_, R>>> + Send + 'async_trait>>where R: RangeBounds<usize> + Send + 'async_trait, Self: 'async_trait, - 'life0: 'async_trait,

source§

fn get_block_with_transaction<'life0, 'async_trait>( + 'life0: 'async_trait,

source§

fn get_block_with_transaction<'life0, 'async_trait>( &'life0 self, hash: TransactionHash<Types> ) -> Pin<Box<dyn Future<Output = QueryResult<(BlockQueryData<Types>, TransactionIndex<Types>)>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

Returns the block containing a transaction with the given hash and the transaction’s -position in the block.
source§

fn get_proposals<'life0, 'life1, 'async_trait>( +position in the block.

source§

fn get_proposals<'life0, 'life1, 'async_trait>( &'life0 self, proposer: &'life1 EncodedPublicKey, limit: Option<usize> ) -> Pin<Box<dyn Future<Output = QueryResult<Vec<LeafQueryData<Types>>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, - 'life1: 'async_trait,

source§

fn count_proposals<'life0, 'life1, 'async_trait>( + 'life1: 'async_trait,

source§

fn count_proposals<'life0, 'life1, 'async_trait>( &'life0 self, proposer: &'life1 EncodedPublicKey ) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, - 'life1: 'async_trait,

source§

fn subscribe_leaves<'life0, 'async_trait>( + 'life1: 'async_trait,

source§

fn subscribe_leaves<'life0, 'async_trait>( &'life0 self, height: usize ) -> Pin<Box<dyn Future<Output = QueryResult<Self::LeafStream>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

source§

fn subscribe_blocks<'life0, 'async_trait>( + 'life0: 'async_trait,

source§

fn subscribe_blocks<'life0, 'async_trait>( &'life0 self, height: usize ) -> Pin<Box<dyn Future<Output = QueryResult<Self::BlockStream>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

source§

impl<Types> Debug for SqlDataSource<Types>where - Types: NodeType + Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<Types> Drop for SqlDataSource<Types>where - Types: NodeType,

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<Types> StatusDataSource for SqlDataSource<Types>where - Types: NodeType,

source§

fn block_height<'life0, 'async_trait>( + 'life0: 'async_trait,

source§

impl<Types> Debug for SqlDataSource<Types>where + Types: NodeType + Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<Types> Drop for SqlDataSource<Types>where + Types: NodeType,

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<Types> Query for SqlDataSource<Types>where + Types: NodeType,

source§

fn client(&self) -> &Client

source§

fn query<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<BoxStream<'static, QueryResult<Row>>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

source§

fn query_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<BoxStream<'static, QueryResult<Row>>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters.
source§

fn query_one<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<Row>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database, returning exactly one result or failing.
source§

fn query_one_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<Row>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters, returning exactly one result or +failing.
source§

fn query_opt<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<Option<Row>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database, returning zero or one results.
source§

fn query_opt_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<Option<Row>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters, returning zero or one results.
source§

impl<Types> StatusDataSource for SqlDataSource<Types>where + Types: NodeType,

source§

fn block_height<'life0, 'async_trait>( &'life0 self ) -> Pin<Box<dyn Future<Output = QueryResult<usize>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

source§

fn metrics(&self) -> &PrometheusMetrics

source§

fn consensus_metrics(&self) -> QueryResult<PrometheusMetrics>

source§

fn mempool_info<'life0, 'async_trait>( + 'life0: 'async_trait,

source§

fn metrics(&self) -> &PrometheusMetrics

source§

fn consensus_metrics(&self) -> QueryResult<PrometheusMetrics>

source§

fn mempool_info<'life0, 'async_trait>( &'life0 self ) -> Pin<Box<dyn Future<Output = QueryResult<MempoolQueryData>> + Send + 'async_trait>>where Self: Sync + 'async_trait, @@ -259,27 +318,27 @@

Composition

&'life0 self ) -> Pin<Box<dyn Future<Output = QueryResult<f64>> + Send + 'async_trait>>where Self: Sync + 'async_trait, - 'life0: 'async_trait,

source§

impl<Types> UpdateAvailabilityData<Types> for SqlDataSource<Types>where + 'life0: 'async_trait,

source§

impl<Types> UpdateAvailabilityData<Types> for SqlDataSource<Types>where Types: NodeType, - Payload<Types>: QueryablePayload,

§

type Error = QueryError

source§

fn insert_leaf<'life0, 'async_trait>( + Payload<Types>: QueryablePayload,

§

type Error = QueryError

source§

fn insert_leaf<'life0, 'async_trait>( &'life0 mut self, leaf: LeafQueryData<Types> ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

source§

fn insert_block<'life0, 'async_trait>( + 'life0: 'async_trait,

source§

fn insert_block<'life0, 'async_trait>( &'life0 mut self, block: BlockQueryData<Types> ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>where Self: 'async_trait, - 'life0: 'async_trait,

source§

impl<Types> VersionedDataSource for SqlDataSource<Types>where - Types: NodeType,

source§

fn commit<'life0, 'async_trait>( + 'life0: 'async_trait,

source§

impl<Types> VersionedDataSource for SqlDataSource<Types>where + Types: NodeType,

source§

fn commit<'life0, 'async_trait>( &'life0 mut self ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,

Atomically commit to all outstanding modifications to the data.

If this method fails, outstanding changes are left unmodified. The caller may opt to retry or to erase outstanding changes with revert.

-
source§

fn revert<'life0, 'async_trait>( +

source§

fn revert<'life0, 'async_trait>( &'life0 mut self ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where Self: 'async_trait, diff --git a/hotshot_query_service/data_source/sql/struct.Transaction.html b/hotshot_query_service/data_source/sql/struct.Transaction.html index 40f0093c1..a9c96e95a 100644 --- a/hotshot_query_service/data_source/sql/struct.Transaction.html +++ b/hotshot_query_service/data_source/sql/struct.Transaction.html @@ -1,20 +1,9 @@ -Transaction in hotshot_query_service::data_source::sql - Rust
pub struct Transaction<'a> { /* private fields */ }
Expand description

An atomic SQL transaction.

-

Implementations§

source§

impl<'a> Transaction<'a>

source

pub async fn query<T, P>( - &self, - query: &T, - params: P -) -> Result<RowStream, Error>where - T: ?Sized + ToStatement, - P: IntoIterator, - P::IntoIter: ExactSizeIterator, - P::Item: BorrowToSql,

Query the underlying SQL database.

-

The results will reflect the state after the statements thus far added to this transaction -have been applied, even though those effects have not been committed to the database yet.

-
source

pub async fn execute<T, P>( +Transaction in hotshot_query_service::data_source::sql - Rust
pub struct Transaction<'a> { /* private fields */ }
Expand description

An atomic SQL transaction.

+

Implementations§

source§

impl<'a> Transaction<'a>

source

pub async fn execute<T, P>( &mut self, statement: &T, params: P -) -> Result<(), Error>where +) -> QueryResult<()>where T: ?Sized + ToStatement, P: IntoIterator, P::IntoIter: ExactSizeIterator, @@ -22,15 +11,70 @@

The results of the statement will be reflected immediately in future statements made within this transaction, but will not be reflected in the underlying database until the transaction is committed with SqlDataSource::commit.

-

source

pub async fn execute_many<S, T, P>( - &mut self, - statements: S -) -> Result<(), Error>where +

source

pub async fn execute_many<S, T, P>(&mut self, statements: S) -> QueryResult<()>where S: IntoIterator<Item = (T, P)>, T: ToStatement, P: IntoIterator, P::IntoIter: ExactSizeIterator, - P::Item: BorrowToSql,

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Transaction<'a>

§

impl<'a> Send for Transaction<'a>

§

impl<'a> Sync for Transaction<'a>

§

impl<'a> Unpin for Transaction<'a>

§

impl<'a> !UnwindSafe for Transaction<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere + P::Item: BorrowToSql,

Trait Implementations§

source§

impl<'a> Query for Transaction<'a>

Query the underlying SQL database.

+

The results will reflect the state after the statements thus far added to this transaction have +been applied, even though those effects have not been committed to the database yet.

+
source§

fn client(&self) -> &Client

source§

fn query<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<BoxStream<'static, QueryResult<Row>>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

source§

fn query_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<BoxStream<'static, QueryResult<Row>>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters.
source§

fn query_one<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<Row>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database, returning exactly one result or failing.
source§

fn query_one_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<Row>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters, returning exactly one result or +failing.
source§

fn query_opt<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<Option<Row>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database, returning zero or one results.
source§

fn query_opt_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<Option<Row>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters, returning zero or one results.

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Transaction<'a>

§

impl<'a> Send for Transaction<'a>

§

impl<'a> Sync for Transaction<'a>

§

impl<'a> Unpin for Transaction<'a>

§

impl<'a> !UnwindSafe for Transaction<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere T: 'a,

§

fn implicit( diff --git a/hotshot_query_service/data_source/sql/trait.Query.html b/hotshot_query_service/data_source/sql/trait.Query.html new file mode 100644 index 000000000..9fe796ccb --- /dev/null +++ b/hotshot_query_service/data_source/sql/trait.Query.html @@ -0,0 +1,130 @@ +Query in hotshot_query_service::data_source::sql - Rust
pub trait Query {
+    // Required method
+    fn client(&self) -> &Client;
+
+    // Provided methods
+    fn query<'life0, 'life1, 'async_trait, T, P>(
+        &'life0 self,
+        query: &'life1 T,
+        params: P
+    ) -> Pin<Box<dyn Future<Output = QueryResult<BoxStream<'static, QueryResult<Row>>>> + Send + 'async_trait>>
+       where T: ?Sized + ToStatement + Sync + 'async_trait,
+             P: IntoIterator + Send + 'async_trait,
+             P::IntoIter: ExactSizeIterator,
+             P::Item: BorrowToSql,
+             Self: Sync + 'async_trait,
+             'life0: 'async_trait,
+             'life1: 'async_trait { ... }
+    fn query_static<'life0, 'life1, 'async_trait, T>(
+        &'life0 self,
+        query: &'life1 T
+    ) -> Pin<Box<dyn Future<Output = QueryResult<BoxStream<'static, QueryResult<Row>>>> + Send + 'async_trait>>
+       where T: ?Sized + ToStatement + Sync + 'async_trait,
+             Self: Sync + 'async_trait,
+             'life0: 'async_trait,
+             'life1: 'async_trait { ... }
+    fn query_one<'life0, 'life1, 'async_trait, T, P>(
+        &'life0 self,
+        query: &'life1 T,
+        params: P
+    ) -> Pin<Box<dyn Future<Output = QueryResult<Row>> + Send + 'async_trait>>
+       where T: ?Sized + ToStatement + Sync + 'async_trait,
+             P: IntoIterator + Send + 'async_trait,
+             P::IntoIter: ExactSizeIterator,
+             P::Item: BorrowToSql,
+             Self: Sync + 'async_trait,
+             'life0: 'async_trait,
+             'life1: 'async_trait { ... }
+    fn query_one_static<'life0, 'life1, 'async_trait, T>(
+        &'life0 self,
+        query: &'life1 T
+    ) -> Pin<Box<dyn Future<Output = QueryResult<Row>> + Send + 'async_trait>>
+       where T: ?Sized + ToStatement + Sync + 'async_trait,
+             Self: Sync + 'async_trait,
+             'life0: 'async_trait,
+             'life1: 'async_trait { ... }
+    fn query_opt<'life0, 'life1, 'async_trait, T, P>(
+        &'life0 self,
+        query: &'life1 T,
+        params: P
+    ) -> Pin<Box<dyn Future<Output = QueryResult<Option<Row>>> + Send + 'async_trait>>
+       where T: ?Sized + ToStatement + Sync + 'async_trait,
+             P: IntoIterator + Send + 'async_trait,
+             P::IntoIter: ExactSizeIterator,
+             P::Item: BorrowToSql,
+             Self: Sync + 'async_trait,
+             'life0: 'async_trait,
+             'life1: 'async_trait { ... }
+    fn query_opt_static<'life0, 'life1, 'async_trait, T>(
+        &'life0 self,
+        query: &'life1 T
+    ) -> Pin<Box<dyn Future<Output = QueryResult<Option<Row>>> + Send + 'async_trait>>
+       where T: ?Sized + ToStatement + Sync + 'async_trait,
+             Self: Sync + 'async_trait,
+             'life0: 'async_trait,
+             'life1: 'async_trait { ... }
+}

Required Methods§

source

fn client(&self) -> &Client

Provided Methods§

source

fn query<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<BoxStream<'static, QueryResult<Row>>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

source

fn query_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<BoxStream<'static, QueryResult<Row>>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters.

+
source

fn query_one<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<Row>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database, returning exactly one result or failing.

+
source

fn query_one_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<Row>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters, returning exactly one result or +failing.

+
source

fn query_opt<'life0, 'life1, 'async_trait, T, P>( + &'life0 self, + query: &'life1 T, + params: P +) -> Pin<Box<dyn Future<Output = QueryResult<Option<Row>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + P: IntoIterator + Send + 'async_trait, + P::IntoIter: ExactSizeIterator, + P::Item: BorrowToSql, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database, returning zero or one results.

+
source

fn query_opt_static<'life0, 'life1, 'async_trait, T>( + &'life0 self, + query: &'life1 T +) -> Pin<Box<dyn Future<Output = QueryResult<Option<Row>>> + Send + 'async_trait>>where + T: ?Sized + ToStatement + Sync + 'async_trait, + Self: Sync + 'async_trait, + 'life0: 'async_trait, + 'life1: 'async_trait,

Query the underlying SQL database with no parameters, returning zero or one results.

+

Implementors§

source§

impl<'a> Query for Transaction<'a>

Query the underlying SQL database.

+

The results will reflect the state after the statements thus far added to this transaction have +been applied, even though those effects have not been committed to the database yet.

+
source§

impl<Types> Query for SqlDataSource<Types>where + Types: NodeType,

\ No newline at end of file diff --git a/hotshot_query_service/data_source/struct.ExtensibleDataSource.html b/hotshot_query_service/data_source/struct.ExtensibleDataSource.html index 3a337a662..0eaa5f5d7 100644 --- a/hotshot_query_service/data_source/struct.ExtensibleDataSource.html +++ b/hotshot_query_service/data_source/struct.ExtensibleDataSource.html @@ -109,7 +109,7 @@ 'life0: 'async_trait,

source§

impl<D, U, Types> UpdateAvailabilityData<Types> for ExtensibleDataSource<D, U>where D: UpdateAvailabilityData<Types> + Send + Sync, U: Send + Sync, - Types: NodeType,

§

type Error = <D as UpdateAvailabilityData<Types>>::Error

source§

fn insert_leaf<'life0, 'async_trait>( + Types: NodeType,

§

type Error = <D as UpdateAvailabilityData<Types>>::Error

source§

fn insert_leaf<'life0, 'async_trait>( &'life0 mut self, leaf: LeafQueryData<Types> ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>where @@ -121,7 +121,7 @@ Self: 'async_trait, 'life0: 'async_trait,

source§

impl<D, U> VersionedDataSource for ExtensibleDataSource<D, U>where D: VersionedDataSource + Send, - U: Send,

§

type Error = <D as VersionedDataSource>::Error

source§

fn commit<'life0, 'async_trait>( + U: Send,

§

type Error = <D as VersionedDataSource>::Error

source§

fn commit<'life0, 'async_trait>( &'life0 mut self ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>where Self: 'async_trait, diff --git a/hotshot_query_service/data_source/trait.VersionedDataSource.html b/hotshot_query_service/data_source/trait.VersionedDataSource.html index 543a0d6e0..07e585c57 100644 --- a/hotshot_query_service/data_source/trait.VersionedDataSource.html +++ b/hotshot_query_service/data_source/trait.VersionedDataSource.html @@ -39,6 +39,6 @@ changes to the database is considered a fatal error, and this function may panic.

Implementors§

source§

impl<D, U> VersionedDataSource for ExtensibleDataSource<D, U>where D: VersionedDataSource + Send, - U: Send,

source§

impl<Types> VersionedDataSource for SqlDataSource<Types>where + U: Send,

source§

impl<Types> VersionedDataSource for SqlDataSource<Types>where Types: NodeType,

§

type Error = Error

source§

impl<Types: NodeType> VersionedDataSource for FileSystemDataSource<Types>where Payload<Types>: QueryablePayload,

§

type Error = PersistenceError

\ No newline at end of file diff --git a/hotshot_query_service/enum.Error.html b/hotshot_query_service/enum.Error.html index cdec11900..31e38015f 100644 --- a/hotshot_query_service/enum.Error.html +++ b/hotshot_query_service/enum.Error.html @@ -9,14 +9,14 @@ message: String, status: StatusCode, }, -}

Variants§

§

Availability

Fields

§source: Error
§

Status

Fields

§source: Error
§

Custom

Fields

§message: String
§status: StatusCode

Implementations§

source§

impl Error

source

pub fn internal<M: Display>(message: M) -> Self

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Error

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Error

source§

fn fmt(&self, __snafu_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn catch_all(status: StatusCode, message: String) -> Self

source§

fn status(&self) -> StatusCode

§

fn from_io_error(source: Error) -> Self

§

fn from_config_error(source: ConfigError) -> Self

§

fn from_route_error<E>(source: RouteError<E>) -> Selfwhere +}

Variants§

§

Availability

Fields

§source: Error
§

Status

Fields

§source: Error
§

Custom

Fields

§message: String
§status: StatusCode

Implementations§

source§

impl Error

source

pub fn internal<M: Display>(message: M) -> Self

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Error

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Error

source§

fn fmt(&self, __snafu_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn catch_all(status: StatusCode, message: String) -> Self

source§

fn status(&self) -> StatusCode

§

fn from_io_error(source: Error) -> Self

§

fn from_config_error(source: ConfigError) -> Self

§

fn from_route_error<E>(source: RouteError<E>) -> Selfwhere E: Display,

§

fn from_request_error(source: RequestError) -> Self

§

fn from_socket_error<E>(source: SocketError<E>) -> Selfwhere E: Display,

§

fn into_tide_error(self) -> Error

§

fn from_server_error(source: Error) -> Self

source§

impl Error for Errorwhere Self: Debug + Display,

source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl ErrorCompat for Error

source§

fn backtrace(&self) -> Option<&Backtrace>

Returns a Backtrace that may be printed.
§

fn iter_chain(&self) -> ChainCompat<'_>where Self: AsErrorSource,

Returns an iterator for traversing the chain of errors, starting with the current error -and continuing with recursive calls to Error::source. Read more
source§

impl From<(String, StatusCode)> for Error

source§

fn from(original: (String, StatusCode)) -> Error

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(original: Error) -> Error

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(original: Error) -> Error

Converts to this type from the input type.
source§

impl Serialize for Error

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where +and continuing with recursive calls to Error::source. Read more

source§

impl From<(String, StatusCode)> for Error

source§

fn from(original: (String, StatusCode)) -> Error

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(original: Error) -> Error

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(original: Error) -> Error

Converts to this type from the input type.
source§

impl Serialize for Error

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AsErrorSource for Twhere T: Error + 'static,

§

fn as_error_source(&self) -> &(dyn Error + 'static)

For maximum effectiveness, this needs to be called as a method diff --git a/hotshot_query_service/enum.QueryError.html b/hotshot_query_service/enum.QueryError.html index d715ad954..861a930bb 100644 --- a/hotshot_query_service/enum.QueryError.html +++ b/hotshot_query_service/enum.QueryError.html @@ -8,16 +8,16 @@
§

Missing

The requested resource exists but is not currently available.

In most cases a missing resource can be recovered from DA.

§

Error

Fields

§message: String

There was an error while trying to fetch the requested resource.

-

Implementations§

source§

impl QueryError

source

pub fn status(&self) -> StatusCode

Trait Implementations§

source§

impl Clone for QueryError

source§

fn clone(&self) -> QueryError

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for QueryError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for QueryError

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for QueryError

source§

fn fmt(&self, __snafu_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for QueryErrorwhere +

Implementations§

source§

impl QueryError

source

pub fn status(&self) -> StatusCode

Trait Implementations§

source§

impl Clone for QueryError

source§

fn clone(&self) -> QueryError

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for QueryError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for QueryError

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for QueryError

source§

fn fmt(&self, __snafu_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for QueryErrorwhere Self: Debug + Display,

source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl ErrorCompat for QueryError

source§

fn backtrace(&self) -> Option<&Backtrace>

Returns a Backtrace that may be printed.
§

fn iter_chain(&self) -> ChainCompat<'_>where Self: AsErrorSource,

Returns an iterator for traversing the chain of errors, starting with the current error and continuing with recursive calls to Error::source. Read more
source§

impl IntoError<QueryError> for MissingSnafuwhere QueryError: Error + ErrorCompat,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> QueryError

Combine the information to produce the error
source§

impl IntoError<QueryError> for NotFoundSnafuwhere - QueryError: Error + ErrorCompat,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> QueryError

Combine the information to produce the error
source§

impl<__T0> IntoError<QueryError> for Snafu<__T0>where + QueryError: Error + ErrorCompat,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> QueryError

Combine the information to produce the error
source§

impl<__T0> IntoError<QueryError> for Snafu<__T0>where QueryError: Error + ErrorCompat, - __T0: Into<String>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> QueryError

Combine the information to produce the error
source§

impl Serialize for QueryError

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __T0: Into<String>,

§

type Source = NoneError

The underlying error
source§

fn into_error(self, error: Self::Source) -> QueryError

Combine the information to produce the error
source§

impl Serialize for QueryError

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AsErrorSource for Twhere T: Error + 'static,

§

fn as_error_source(&self) -> &(dyn Error + 'static)

For maximum effectiveness, this needs to be called as a method diff --git a/hotshot_query_service/macro.instantiate_data_source_tests.html b/hotshot_query_service/macro.instantiate_data_source_tests.html index 77508f965..7d256cb73 100644 --- a/hotshot_query_service/macro.instantiate_data_source_tests.html +++ b/hotshot_query_service/macro.instantiate_data_source_tests.html @@ -1,3 +1,3 @@ -instantiate_data_source_tests in hotshot_query_service - Rust
macro_rules! instantiate_data_source_tests {
+instantiate_data_source_tests in hotshot_query_service - Rust
macro_rules! instantiate_data_source_tests {
     ($t:ty) => { ... };
 }
\ No newline at end of file diff --git a/hotshot_query_service/metrics/enum.MetricsError.html b/hotshot_query_service/metrics/enum.MetricsError.html index b5586e4bf..e36ddfa85 100644 --- a/hotshot_query_service/metrics/enum.MetricsError.html +++ b/hotshot_query_service/metrics/enum.MetricsError.html @@ -9,7 +9,7 @@ Prometheus { source: Error, }, -}

Variants§

§

NoSuchSubgroup

Fields

§path: Vec<String>
§

NoSuchMetric

Fields

§namespace: Vec<String>
§label: String
§

Prometheus

Fields

§source: Error

Trait Implementations§

source§

impl Debug for MetricsError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for MetricsError

source§

fn fmt(&self, __snafu_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for MetricsErrorwhere +}

Variants§

§

NoSuchSubgroup

Fields

§path: Vec<String>
§

NoSuchMetric

Fields

§namespace: Vec<String>
§label: String
§

Prometheus

Fields

§source: Error

Trait Implementations§

source§

impl Debug for MetricsError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for MetricsError

source§

fn fmt(&self, __snafu_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for MetricsErrorwhere Self: Debug + Display,

source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl ErrorCompat for MetricsError

source§

fn backtrace(&self) -> Option<&Backtrace>

Returns a Backtrace that may be printed.
§

fn iter_chain(&self) -> ChainCompat<'_>where Self: AsErrorSource,

Returns an iterator for traversing the chain of errors, starting with the current error diff --git a/hotshot_query_service/status/enum.Error.html b/hotshot_query_service/status/enum.Error.html index ff675803c..7b19a0005 100644 --- a/hotshot_query_service/status/enum.Error.html +++ b/hotshot_query_service/status/enum.Error.html @@ -5,12 +5,12 @@ Internal { reason: String, }, -}

Variants§

§

Request

Fields

§source: RequestError
§

Internal

Fields

§reason: String

Implementations§

source§

impl Error

source

pub fn status(&self) -> StatusCode

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Error

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Error

source§

fn fmt(&self, __snafu_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Errorwhere +}

Variants§

§

Request

Fields

§source: RequestError
§

Internal

Fields

§reason: String

Implementations§

source§

impl Error

source

pub fn status(&self) -> StatusCode

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Error

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Error

source§

fn fmt(&self, __snafu_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Errorwhere Self: Debug + Display,

source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl ErrorCompat for Error

source§

fn backtrace(&self) -> Option<&Backtrace>

Returns a Backtrace that may be printed.
§

fn iter_chain(&self) -> ChainCompat<'_>where Self: AsErrorSource,

Returns an iterator for traversing the chain of errors, starting with the current error -and continuing with recursive calls to Error::source. Read more
source§

impl From<Error> for Error

source§

fn from(original: Error) -> Error

Converts to this type from the input type.
source§

impl From<RequestError> for Error

source§

fn from(original: RequestError) -> Error

Converts to this type from the input type.
source§

impl From<String> for Error

source§

fn from(original: String) -> Error

Converts to this type from the input type.
source§

impl Serialize for Error

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where +and continuing with recursive calls to Error::source. Read more

source§

impl From<Error> for Error

source§

fn from(original: Error) -> Error

Converts to this type from the input type.
source§

impl From<RequestError> for Error

source§

fn from(original: RequestError) -> Error

Converts to this type from the input type.
source§

impl From<String> for Error

source§

fn from(original: String) -> Error

Converts to this type from the input type.
source§

impl Serialize for Error

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AsErrorSource for Twhere T: Error + 'static,

§

fn as_error_source(&self) -> &(dyn Error + 'static)

For maximum effectiveness, this needs to be called as a method diff --git a/hotshot_query_service/status/trait.StatusDataSource.html b/hotshot_query_service/status/trait.StatusDataSource.html index 42d94933a..2e6261b54 100644 --- a/hotshot_query_service/status/trait.StatusDataSource.html +++ b/hotshot_query_service/status/trait.StatusDataSource.html @@ -33,6 +33,6 @@ Self: Sync + 'async_trait, 'life0: 'async_trait,

Implementors§

source§

impl StatusDataSource for MetricsDataSource

source§

impl<D, U> StatusDataSource for ExtensibleDataSource<D, U>where D: StatusDataSource + Send + Sync, - U: Send + Sync,

source§

impl<Types> StatusDataSource for SqlDataSource<Types>where + U: Send + Sync,

source§

impl<Types> StatusDataSource for SqlDataSource<Types>where Types: NodeType,

source§

impl<Types: NodeType> StatusDataSource for FileSystemDataSource<Types>where Payload<Types>: QueryablePayload,

\ No newline at end of file diff --git a/implementors/clap_builder/derive/trait.Args.js b/implementors/clap_builder/derive/trait.Args.js index 88128810f..01cc1b31c 100644 --- a/implementors/clap_builder/derive/trait.Args.js +++ b/implementors/clap_builder/derive/trait.Args.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl Args for Options"],["impl Args for Options"],["impl Args for Options"]] +"hotshot_query_service":[["impl Args for Options"],["impl Args for Options"],["impl Args for Options"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap_builder/derive/trait.FromArgMatches.js b/implementors/clap_builder/derive/trait.FromArgMatches.js index 3ee59f434..076c4c50a 100644 --- a/implementors/clap_builder/derive/trait.FromArgMatches.js +++ b/implementors/clap_builder/derive/trait.FromArgMatches.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl FromArgMatches for Options"],["impl FromArgMatches for Options"],["impl FromArgMatches for Options"]] +"hotshot_query_service":[["impl FromArgMatches for Options"],["impl FromArgMatches for Options"],["impl FromArgMatches for Options"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/clone/trait.Clone.js b/implementors/core/clone/trait.Clone.js index 132bd8d23..c18d21a40 100644 --- a/implementors/core/clone/trait.Clone.js +++ b/implementors/core/clone/trait.Clone.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl Clone for Label"],["impl<__T0: Clone> Clone for QueryTransactionSnafu<__T0>"],["impl<Types: Clone + NodeType> Clone for BlockQueryData<Types>"],["impl Clone for Error"],["impl Clone for MetricsDataSource"],["impl Clone for Counter"],["impl<__T0: Clone> Clone for QueryBlockSnafu<__T0>"],["impl<D: Clone, U: Clone> Clone for ExtensibleDataSource<D, U>"],["impl Clone for Error"],["impl Clone for RequestSnafu"],["impl Clone for Config"],["impl Clone for NotFoundSnafu"],["impl<T: Committable> Clone for ResourceId<T>"],["impl<Types: Clone + NodeType> Clone for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl<__T0: Clone> Clone for QueryLeafSnafu<__T0>"],["impl Clone for PrometheusMetrics"],["impl Clone for Gauge"],["impl<__T0: Clone, __T1: Clone> Clone for LeafStreamSnafu<__T0, __T1>"],["impl Clone for Histogram"],["impl<__T0: Clone, __T1: Clone> Clone for BlockStreamSnafu<__T0, __T1>"],["impl Clone for MempoolQueryData"],["impl<__T0: Clone> Clone for Snafu<__T0>"],["impl Clone for StreamBlockSnafu"],["impl Clone for Error"],["impl<__T0: Clone, __T1: Clone> Clone for InvalidTransactionIndexSnafu<__T0, __T1>"],["impl Clone for MissingSnafu"],["impl<Types: Clone + NodeType> Clone for InconsistentLeafError<Types>"],["impl Clone for QueryError"],["impl<Types: Clone + NodeType> Clone for LeafQueryData<Types>"],["impl<__T0: Clone> Clone for QueryProposalsSnafu<__T0>"],["impl<__T0: Clone, __T1: Clone> Clone for CustomSnafu<__T0, __T1>"],["impl Clone for StreamLeafSnafu"]] +"hotshot_query_service":[["impl<__T0: Clone> Clone for QueryProposalsSnafu<__T0>"],["impl<__T0: Clone> Clone for QueryLeafSnafu<__T0>"],["impl<__T0: Clone, __T1: Clone> Clone for InvalidTransactionIndexSnafu<__T0, __T1>"],["impl Clone for MissingSnafu"],["impl Clone for Error"],["impl Clone for Error"],["impl Clone for MempoolQueryData"],["impl<__T0: Clone, __T1: Clone> Clone for BlockStreamSnafu<__T0, __T1>"],["impl<D: Clone, U: Clone> Clone for ExtensibleDataSource<D, U>"],["impl Clone for StreamBlockSnafu"],["impl<Types: Clone + NodeType> Clone for BlockQueryData<Types>"],["impl<__T0: Clone> Clone for QueryBlockSnafu<__T0>"],["impl Clone for NotFoundSnafu"],["impl<Types: Clone + NodeType> Clone for LeafQueryData<Types>"],["impl Clone for Config"],["impl Clone for Gauge"],["impl<Types: Clone + NodeType> Clone for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl<__T0: Clone> Clone for Snafu<__T0>"],["impl<__T0: Clone, __T1: Clone> Clone for CustomSnafu<__T0, __T1>"],["impl Clone for Histogram"],["impl Clone for RequestSnafu"],["impl<__T0: Clone, __T1: Clone> Clone for LeafStreamSnafu<__T0, __T1>"],["impl Clone for Error"],["impl Clone for Label"],["impl Clone for Counter"],["impl<T: Committable> Clone for ResourceId<T>"],["impl<Types: Clone + NodeType> Clone for InconsistentLeafError<Types>"],["impl Clone for MetricsDataSource"],["impl<__T0: Clone> Clone for QueryTransactionSnafu<__T0>"],["impl Clone for StreamLeafSnafu"],["impl Clone for PrometheusMetrics"],["impl Clone for QueryError"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.Eq.js b/implementors/core/cmp/trait.Eq.js index d6515476c..5b2b98555 100644 --- a/implementors/core/cmp/trait.Eq.js +++ b/implementors/core/cmp/trait.Eq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<Types: Eq + NodeType> Eq for BlockQueryData<Types>"],["impl<Types: Eq + NodeType> Eq for LeafQueryData<Types>"],["impl<Types: Eq + NodeType> Eq for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl Eq for MempoolQueryData"],["impl<T: Committable> Eq for ResourceId<T>"]] +"hotshot_query_service":[["impl<Types: Eq + NodeType> Eq for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl<T: Committable> Eq for ResourceId<T>"],["impl<Types: Eq + NodeType> Eq for LeafQueryData<Types>"],["impl Eq for MempoolQueryData"],["impl<Types: Eq + NodeType> Eq for BlockQueryData<Types>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.PartialEq.js b/implementors/core/cmp/trait.PartialEq.js index ef66da962..942daabe9 100644 --- a/implementors/core/cmp/trait.PartialEq.js +++ b/implementors/core/cmp/trait.PartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl PartialEq<MempoolQueryData> for MempoolQueryData"],["impl<T: Committable> PartialEq<ResourceId<T>> for ResourceId<T>"],["impl<Types: PartialEq + NodeType> PartialEq<TransactionQueryData<Types>> for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl<Types: PartialEq + NodeType> PartialEq<LeafQueryData<Types>> for LeafQueryData<Types>"],["impl<Types: PartialEq + NodeType> PartialEq<BlockQueryData<Types>> for BlockQueryData<Types>"]] +"hotshot_query_service":[["impl<Types: PartialEq + NodeType> PartialEq<LeafQueryData<Types>> for LeafQueryData<Types>"],["impl<T: Committable> PartialEq<ResourceId<T>> for ResourceId<T>"],["impl<Types: PartialEq + NodeType> PartialEq<BlockQueryData<Types>> for BlockQueryData<Types>"],["impl<Types: PartialEq + NodeType> PartialEq<TransactionQueryData<Types>> for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl PartialEq<MempoolQueryData> for MempoolQueryData"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/convert/trait.From.js b/implementors/core/convert/trait.From.js index ae55b2cb7..11ed5264c 100644 --- a/implementors/core/convert/trait.From.js +++ b/implementors/core/convert/trait.From.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<T: Committable> From<usize> for ResourceId<T>"],["impl From<(String, StatusCode)> for Error"],["impl From<(String, StatusCode)> for Error"],["impl From<String> for Error"],["impl From<RequestError> for Error"],["impl From<Error> for MetricsError"],["impl From<Error> for Error"],["impl From<RequestError> for Error"],["impl From<Error> for Error"],["impl<T: Committable> From<Commitment<T>> for ResourceId<T>"]] +"hotshot_query_service":[["impl<T: Committable> From<Commitment<T>> for ResourceId<T>"],["impl<T: Committable> From<usize> for ResourceId<T>"],["impl From<RequestError> for Error"],["impl From<Error> for Error"],["impl From<(String, StatusCode)> for Error"],["impl From<String> for Error"],["impl From<RequestError> for Error"],["impl From<Error> for MetricsError"],["impl From<Error> for Error"],["impl From<(String, StatusCode)> for Error"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/default/trait.Default.js b/implementors/core/default/trait.Default.js index 33add66e1..8f14e060c 100644 --- a/implementors/core/default/trait.Default.js +++ b/implementors/core/default/trait.Default.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl Default for MempoolQueryData"],["impl Default for Options"],["impl Default for Config"],["impl Default for MetricsDataSource"],["impl Default for Options"],["impl Default for PrometheusMetrics"],["impl Default for Options"]] +"hotshot_query_service":[["impl Default for Options"],["impl Default for Options"],["impl Default for PrometheusMetrics"],["impl Default for Options"],["impl Default for MempoolQueryData"],["impl Default for MetricsDataSource"],["impl Default for Config"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/error/trait.Error.js b/implementors/core/error/trait.Error.js index eb3804d81..50d8403fc 100644 --- a/implementors/core/error/trait.Error.js +++ b/implementors/core/error/trait.Error.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl Error for Errorwhere\n Self: Debug + Display,"],["impl Error for QueryErrorwhere\n Self: Debug + Display,"],["impl Error for Errorwhere\n Self: Debug + Display,"],["impl<Types: NodeType> Error for InconsistentLeafError<Types>where\n Self: Debug + Display,"],["impl Error for Errorwhere\n Self: Debug + Display,"],["impl Error for MetricsErrorwhere\n Self: Debug + Display,"]] +"hotshot_query_service":[["impl Error for Errorwhere\n Self: Debug + Display,"],["impl Error for MetricsErrorwhere\n Self: Debug + Display,"],["impl Error for Errorwhere\n Self: Debug + Display,"],["impl Error for Errorwhere\n Self: Debug + Display,"],["impl<Types: NodeType> Error for InconsistentLeafError<Types>where\n Self: Debug + Display,"],["impl Error for QueryErrorwhere\n Self: Debug + Display,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Debug.js b/implementors/core/fmt/trait.Debug.js index 934bf943d..2ec127e5a 100644 --- a/implementors/core/fmt/trait.Debug.js +++ b/implementors/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<__T0: Debug> Debug for QueryLeafSnafu<__T0>"],["impl<D: Debug, U: Debug> Debug for ExtensibleDataSource<D, U>"],["impl<Types: Debug + NodeType> Debug for LeafQueryData<Types>"],["impl<__T0: Debug> Debug for QueryBlockSnafu<__T0>"],["impl Debug for MissingSnafu"],["impl<__T0: Debug, __T1: Debug> Debug for InvalidTransactionIndexSnafu<__T0, __T1>"],["impl<Types: Debug + NodeType> Debug for BlockQueryData<Types>"],["impl Debug for Error"],["impl<__T0: Debug> Debug for Snafu<__T0>"],["impl Debug for RequestSnafu"],["impl<Types> Debug for SqlDataSource<Types>where\n Types: NodeType + Debug,"],["impl Debug for MempoolQueryData"],["impl Debug for Error"],["impl Debug for MetricsDataSource"],["impl Debug for Label"],["impl<__T0: Debug> Debug for QueryTransactionSnafu<__T0>"],["impl<__T0: Debug, __T1: Debug> Debug for CustomSnafu<__T0, __T1>"],["impl Debug for StreamBlockSnafu"],["impl<__T0: Debug> Debug for QueryProposalsSnafu<__T0>"],["impl Debug for Error"],["impl Debug for Counter"],["impl Debug for NotFoundSnafu"],["impl Debug for Gauge"],["impl<Types: NodeType> Debug for FileSystemDataSource<Types>where\n Payload<Types>: QueryablePayload,\n HashMap<LeafHash<Types>, u64>: Debug,\n HashMap<BlockHash<Types>, u64>: Debug,\n HashMap<TransactionHash<Types>, (u64, TransactionIndex<Types>)>: Debug,\n LedgerLog<LeafQueryData<Types>>: Debug,\n LedgerLog<BlockQueryData<Types>>: Debug,"],["impl Debug for PrometheusMetrics"],["impl<__T0: Debug, __T1: Debug> Debug for LeafStreamSnafu<__T0, __T1>"],["impl Debug for MetricsError"],["impl<__T0: Debug, __T1: Debug> Debug for BlockStreamSnafu<__T0, __T1>"],["impl<T: Committable> Debug for ResourceId<T>"],["impl Debug for Histogram"],["impl Debug for StreamLeafSnafu"],["impl Debug for Config"],["impl<Types: Debug + NodeType> Debug for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl Debug for QueryError"],["impl<Types: Debug + NodeType> Debug for InconsistentLeafError<Types>"]] +"hotshot_query_service":[["impl<Types> Debug for SqlDataSource<Types>where\n Types: NodeType + Debug,"],["impl Debug for Label"],["impl Debug for MetricsError"],["impl Debug for Error"],["impl<__T0: Debug> Debug for Snafu<__T0>"],["impl Debug for MetricsDataSource"],["impl<__T0: Debug> Debug for QueryLeafSnafu<__T0>"],["impl<Types: NodeType> Debug for FileSystemDataSource<Types>where\n Payload<Types>: QueryablePayload,\n HashMap<LeafHash<Types>, u64>: Debug,\n HashMap<BlockHash<Types>, u64>: Debug,\n HashMap<TransactionHash<Types>, (u64, TransactionIndex<Types>)>: Debug,\n LedgerLog<LeafQueryData<Types>>: Debug,\n LedgerLog<BlockQueryData<Types>>: Debug,"],["impl<__T0: Debug> Debug for QueryBlockSnafu<__T0>"],["impl<Types: Debug + NodeType> Debug for BlockQueryData<Types>"],["impl Debug for RequestSnafu"],["impl Debug for StreamLeafSnafu"],["impl Debug for PrometheusMetrics"],["impl<D: Debug, U: Debug> Debug for ExtensibleDataSource<D, U>"],["impl Debug for QueryError"],["impl Debug for StreamBlockSnafu"],["impl<__T0: Debug, __T1: Debug> Debug for InvalidTransactionIndexSnafu<__T0, __T1>"],["impl<__T0: Debug> Debug for QueryTransactionSnafu<__T0>"],["impl Debug for Error"],["impl<Types: Debug + NodeType> Debug for LeafQueryData<Types>"],["impl<__T0: Debug, __T1: Debug> Debug for CustomSnafu<__T0, __T1>"],["impl<Types: Debug + NodeType> Debug for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl<Types: Debug + NodeType> Debug for InconsistentLeafError<Types>"],["impl<__T0: Debug> Debug for QueryProposalsSnafu<__T0>"],["impl Debug for NotFoundSnafu"],["impl<T: Committable> Debug for ResourceId<T>"],["impl Debug for Gauge"],["impl<__T0: Debug, __T1: Debug> Debug for LeafStreamSnafu<__T0, __T1>"],["impl Debug for Counter"],["impl Debug for Error"],["impl Debug for MempoolQueryData"],["impl Debug for Histogram"],["impl Debug for MissingSnafu"],["impl Debug for Config"],["impl<__T0: Debug, __T1: Debug> Debug for BlockStreamSnafu<__T0, __T1>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Display.js b/implementors/core/fmt/trait.Display.js index 3bd46aeb4..f7c06c4aa 100644 --- a/implementors/core/fmt/trait.Display.js +++ b/implementors/core/fmt/trait.Display.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<T: Committable> Display for ResourceId<T>"],["impl Display for MetricsError"],["impl Display for Error"],["impl Display for QueryError"],["impl Display for Error"],["impl Display for Error"],["impl<Types: NodeType> Display for InconsistentLeafError<Types>"]] +"hotshot_query_service":[["impl Display for MetricsError"],["impl Display for Error"],["impl Display for Error"],["impl<Types: NodeType> Display for InconsistentLeafError<Types>"],["impl Display for QueryError"],["impl Display for Error"],["impl<T: Committable> Display for ResourceId<T>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/hash/trait.Hash.js b/implementors/core/hash/trait.Hash.js index b114602ed..54bd15b6e 100644 --- a/implementors/core/hash/trait.Hash.js +++ b/implementors/core/hash/trait.Hash.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl Hash for MempoolQueryData"],["impl<T: Committable> Hash for ResourceId<T>"]] +"hotshot_query_service":[["impl<T: Committable> Hash for ResourceId<T>"],["impl Hash for MempoolQueryData"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Copy.js b/implementors/core/marker/trait.Copy.js index f0a4ca03b..c4401f1c5 100644 --- a/implementors/core/marker/trait.Copy.js +++ b/implementors/core/marker/trait.Copy.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl Copy for MissingSnafu"],["impl<__T0: Copy> Copy for Snafu<__T0>"],["impl Copy for StreamBlockSnafu"],["impl<__T0: Copy, __T1: Copy> Copy for BlockStreamSnafu<__T0, __T1>"],["impl<__T0: Copy> Copy for QueryTransactionSnafu<__T0>"],["impl<D: Copy, U: Copy> Copy for ExtensibleDataSource<D, U>"],["impl Copy for StreamLeafSnafu"],["impl Copy for NotFoundSnafu"],["impl<__T0: Copy> Copy for QueryProposalsSnafu<__T0>"],["impl<T: Committable> Copy for ResourceId<T>"],["impl<__T0: Copy> Copy for QueryLeafSnafu<__T0>"],["impl<__T0: Copy, __T1: Copy> Copy for InvalidTransactionIndexSnafu<__T0, __T1>"],["impl<__T0: Copy, __T1: Copy> Copy for LeafStreamSnafu<__T0, __T1>"],["impl<__T0: Copy, __T1: Copy> Copy for CustomSnafu<__T0, __T1>"],["impl<__T0: Copy> Copy for QueryBlockSnafu<__T0>"],["impl Copy for RequestSnafu"]] +"hotshot_query_service":[["impl<__T0: Copy, __T1: Copy> Copy for BlockStreamSnafu<__T0, __T1>"],["impl Copy for StreamBlockSnafu"],["impl<D: Copy, U: Copy> Copy for ExtensibleDataSource<D, U>"],["impl<__T0: Copy, __T1: Copy> Copy for LeafStreamSnafu<__T0, __T1>"],["impl<T: Committable> Copy for ResourceId<T>"],["impl<__T0: Copy, __T1: Copy> Copy for CustomSnafu<__T0, __T1>"],["impl<__T0: Copy> Copy for QueryBlockSnafu<__T0>"],["impl Copy for RequestSnafu"],["impl Copy for NotFoundSnafu"],["impl<__T0: Copy> Copy for QueryLeafSnafu<__T0>"],["impl<__T0: Copy> Copy for QueryProposalsSnafu<__T0>"],["impl Copy for MissingSnafu"],["impl<__T0: Copy> Copy for Snafu<__T0>"],["impl<__T0: Copy, __T1: Copy> Copy for InvalidTransactionIndexSnafu<__T0, __T1>"],["impl<__T0: Copy> Copy for QueryTransactionSnafu<__T0>"],["impl Copy for StreamLeafSnafu"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralEq.js b/implementors/core/marker/trait.StructuralEq.js index cf708191f..3f47ed8ab 100644 --- a/implementors/core/marker/trait.StructuralEq.js +++ b/implementors/core/marker/trait.StructuralEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<Types: NodeType> StructuralEq for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl StructuralEq for MempoolQueryData"],["impl<Types: NodeType> StructuralEq for LeafQueryData<Types>"],["impl<Types: NodeType> StructuralEq for BlockQueryData<Types>"]] +"hotshot_query_service":[["impl StructuralEq for MempoolQueryData"],["impl<Types: NodeType> StructuralEq for LeafQueryData<Types>"],["impl<Types: NodeType> StructuralEq for BlockQueryData<Types>"],["impl<Types: NodeType> StructuralEq for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralPartialEq.js b/implementors/core/marker/trait.StructuralPartialEq.js index dea99a6ec..56951c1de 100644 --- a/implementors/core/marker/trait.StructuralPartialEq.js +++ b/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<Types: NodeType> StructuralPartialEq for LeafQueryData<Types>"],["impl<Types: NodeType> StructuralPartialEq for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl<Types: NodeType> StructuralPartialEq for BlockQueryData<Types>"],["impl StructuralPartialEq for MempoolQueryData"]] +"hotshot_query_service":[["impl<Types: NodeType> StructuralPartialEq for LeafQueryData<Types>"],["impl<Types: NodeType> StructuralPartialEq for BlockQueryData<Types>"],["impl<Types: NodeType> StructuralPartialEq for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl StructuralPartialEq for MempoolQueryData"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/hotshot_query_service/data_source/sql/trait.Query.js b/implementors/hotshot_query_service/data_source/sql/trait.Query.js new file mode 100644 index 000000000..146940164 --- /dev/null +++ b/implementors/hotshot_query_service/data_source/sql/trait.Query.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"hotshot_query_service":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/serde/de/trait.Deserialize.js b/implementors/serde/de/trait.Deserialize.js index 713143af3..4a649d212 100644 --- a/implementors/serde/de/trait.Deserialize.js +++ b/implementors/serde/de/trait.Deserialize.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<'de> Deserialize<'de> for Error"],["impl<'de> Deserialize<'de> for QueryError"],["impl<'de, Types: NodeType> Deserialize<'de> for BlockQueryData<Types>"],["impl<'de, Types: NodeType> Deserialize<'de> for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl<'de> Deserialize<'de> for MempoolQueryData"],["impl<'de, Types: NodeType> Deserialize<'de> for LeafQueryData<Types>"],["impl<'de> Deserialize<'de> for Error"],["impl<'de> Deserialize<'de> for Error"]] +"hotshot_query_service":[["impl<'de> Deserialize<'de> for QueryError"],["impl<'de, Types: NodeType> Deserialize<'de> for BlockQueryData<Types>"],["impl<'de> Deserialize<'de> for Error"],["impl<'de> Deserialize<'de> for Error"],["impl<'de> Deserialize<'de> for Error"],["impl<'de, Types: NodeType> Deserialize<'de> for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl<'de> Deserialize<'de> for MempoolQueryData"],["impl<'de, Types: NodeType> Deserialize<'de> for LeafQueryData<Types>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/serde/ser/trait.Serialize.js b/implementors/serde/ser/trait.Serialize.js index 7ec2e71f7..42190f5ec 100644 --- a/implementors/serde/ser/trait.Serialize.js +++ b/implementors/serde/ser/trait.Serialize.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<Types: NodeType> Serialize for BlockQueryData<Types>"],["impl Serialize for Error"],["impl<Types: NodeType> Serialize for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl Serialize for Error"],["impl Serialize for QueryError"],["impl Serialize for Error"],["impl Serialize for MempoolQueryData"],["impl<Types: NodeType> Serialize for LeafQueryData<Types>"]] +"hotshot_query_service":[["impl<Types: NodeType> Serialize for TransactionQueryData<Types>where\n Payload<Types>: QueryablePayload,"],["impl Serialize for QueryError"],["impl<Types: NodeType> Serialize for LeafQueryData<Types>"],["impl Serialize for Error"],["impl Serialize for MempoolQueryData"],["impl Serialize for Error"],["impl<Types: NodeType> Serialize for BlockQueryData<Types>"],["impl Serialize for Error"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/snafu/trait.ErrorCompat.js b/implementors/snafu/trait.ErrorCompat.js index 1cb0ceb64..fe6df7e9f 100644 --- a/implementors/snafu/trait.ErrorCompat.js +++ b/implementors/snafu/trait.ErrorCompat.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl ErrorCompat for QueryError"],["impl ErrorCompat for MetricsError"],["impl<Types: NodeType> ErrorCompat for InconsistentLeafError<Types>"],["impl ErrorCompat for Error"],["impl ErrorCompat for Error"],["impl ErrorCompat for Error"]] +"hotshot_query_service":[["impl ErrorCompat for MetricsError"],["impl ErrorCompat for Error"],["impl<Types: NodeType> ErrorCompat for InconsistentLeafError<Types>"],["impl ErrorCompat for Error"],["impl ErrorCompat for QueryError"],["impl ErrorCompat for Error"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/snafu/trait.IntoError.js b/implementors/snafu/trait.IntoError.js index 0c504d32d..e1c3dce8c 100644 --- a/implementors/snafu/trait.IntoError.js +++ b/implementors/snafu/trait.IntoError.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"hotshot_query_service":[["impl<__T0, __T1> IntoError<Error> for InvalidTransactionIndexSnafu<__T0, __T1>where\n Error: Error + ErrorCompat,\n __T0: Into<u64>,\n __T1: Into<u64>,"],["impl<__T0> IntoError<Error> for QueryProposalsSnafu<__T0>where\n Error: Error + ErrorCompat,\n __T0: Into<EncodedPublicKey>,"],["impl<__T0, __T1> IntoError<Error> for CustomSnafu<__T0, __T1>where\n Error: Error + ErrorCompat,\n __T0: Into<String>,\n __T1: Into<StatusCode>,"],["impl<__T0> IntoError<Error> for QueryTransactionSnafu<__T0>where\n Error: Error + ErrorCompat,\n __T0: Into<String>,"],["impl IntoError<QueryError> for MissingSnafuwhere\n QueryError: Error + ErrorCompat,"],["impl IntoError<Error> for StreamBlockSnafuwhere\n Error: Error + ErrorCompat,"],["impl IntoError<Error> for RequestSnafuwhere\n Error: Error + ErrorCompat,"],["impl<__T0> IntoError<Error> for QueryBlockSnafu<__T0>where\n Error: Error + ErrorCompat,\n __T0: Into<String>,"],["impl<__T0> IntoError<Error> for QueryLeafSnafu<__T0>where\n Error: Error + ErrorCompat,\n __T0: Into<String>,"],["impl IntoError<QueryError> for NotFoundSnafuwhere\n QueryError: Error + ErrorCompat,"],["impl<__T0, __T1> IntoError<Error> for LeafStreamSnafu<__T0, __T1>where\n Error: Error + ErrorCompat,\n __T0: Into<usize>,\n __T1: Into<String>,"],["impl IntoError<Error> for StreamLeafSnafuwhere\n Error: Error + ErrorCompat,"],["impl<__T0> IntoError<QueryError> for Snafu<__T0>where\n QueryError: Error + ErrorCompat,\n __T0: Into<String>,"],["impl<__T0, __T1> IntoError<Error> for BlockStreamSnafu<__T0, __T1>where\n Error: Error + ErrorCompat,\n __T0: Into<usize>,\n __T1: Into<String>,"]] +"hotshot_query_service":[["impl<__T0, __T1> IntoError<Error> for LeafStreamSnafu<__T0, __T1>where\n Error: Error + ErrorCompat,\n __T0: Into<usize>,\n __T1: Into<String>,"],["impl<__T0> IntoError<Error> for QueryBlockSnafu<__T0>where\n Error: Error + ErrorCompat,\n __T0: Into<String>,"],["impl IntoError<QueryError> for MissingSnafuwhere\n QueryError: Error + ErrorCompat,"],["impl<__T0, __T1> IntoError<Error> for InvalidTransactionIndexSnafu<__T0, __T1>where\n Error: Error + ErrorCompat,\n __T0: Into<u64>,\n __T1: Into<u64>,"],["impl IntoError<Error> for StreamBlockSnafuwhere\n Error: Error + ErrorCompat,"],["impl IntoError<Error> for RequestSnafuwhere\n Error: Error + ErrorCompat,"],["impl<__T0, __T1> IntoError<Error> for CustomSnafu<__T0, __T1>where\n Error: Error + ErrorCompat,\n __T0: Into<String>,\n __T1: Into<StatusCode>,"],["impl<__T0> IntoError<Error> for QueryTransactionSnafu<__T0>where\n Error: Error + ErrorCompat,\n __T0: Into<String>,"],["impl<__T0> IntoError<QueryError> for Snafu<__T0>where\n QueryError: Error + ErrorCompat,\n __T0: Into<String>,"],["impl IntoError<Error> for StreamLeafSnafuwhere\n Error: Error + ErrorCompat,"],["impl<__T0> IntoError<Error> for QueryLeafSnafu<__T0>where\n Error: Error + ErrorCompat,\n __T0: Into<String>,"],["impl IntoError<QueryError> for NotFoundSnafuwhere\n QueryError: Error + ErrorCompat,"],["impl<__T0> IntoError<Error> for QueryProposalsSnafu<__T0>where\n Error: Error + ErrorCompat,\n __T0: Into<EncodedPublicKey>,"],["impl<__T0, __T1> IntoError<Error> for BlockStreamSnafu<__T0, __T1>where\n Error: Error + ErrorCompat,\n __T0: Into<usize>,\n __T1: Into<String>,"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/search-index.js b/search-index.js index eb7f32237..165101b48 100644 --- a/search-index.js +++ b/search-index.js @@ -1,5 +1,5 @@ var searchIndex = JSON.parse('{\ -"hotshot_query_service":{"doc":"The HotShot Query Service is a minimal, generic query …","t":"NNNENGNDNDNDGEGIDNGLLLLLLLLLLLLLLLLLLLLLLLLLLAMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOLLLLLLOLLLLLLLLLLLLLLLLLLLLLLLLLLLLMAMFLLLLALLMLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLMMMMMIGGDQNQDNDEQNNNQDNDQGGDQNQDNNNDNDNDNDNDINDENDNDGGGGQDILLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKKKLKKKLLLLLLLLLLLLMMMLLMLLLLLLLLLLLLLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLMKLMLLLLLLLLLLLLLMLMMMMMMLLLLLLLLMKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMQDDDCIILLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLALLLLLLLLLLLLLLLLLKLLLLLDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOOLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLCLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDENNNDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMENDDNIILLLLMLLLLLLLLLLKLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLKLKLLLLLLLLLMLLLLLLLLLLLLLLMM","n":["Availability","Custom","Err","Error","Error","Header","Missing","MissingSnafu","NotFound","NotFoundSnafu","Ok","Options","Payload","QueryError","QueryResult","Resolvable","Snafu","Status","Transaction","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_error_source","as_error_source","augment_args","augment_args_for_update","availability","availability","backtrace","backtrace","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","catch_all","cause","cause","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","commitment","data_source","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","description","description","deserialize","deserialize","drop","drop","drop","drop","drop","drop","fail","fail","fail","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches_mut","group_id","header","header","in_current_span","in_current_span","include_migrations","init","init","init","init","init","init","instantiate_data_source_tests","internal","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_error","into_error","into_error","message","metrics","port","run_standalone_service","serialize","serialize","source","source","status","status","status","status","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_resolve","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","message","source","source","status","message","AvailabilityDataSource","BlockHash","BlockId","BlockQueryData","BlockRange","BlockStream","BlockStream","BlockStreamSnafu","Custom","CustomSnafu","Error","Error","Hash","Hash","Hash","InclusionProof","InconsistentLeafError","InvalidTransactionIndex","InvalidTransactionIndexSnafu","Iter","LeafHash","LeafId","LeafQueryData","LeafRange","LeafStream","LeafStream","LeafStreamSnafu","Number","Number","Number","Options","QueryBlock","QueryBlockSnafu","QueryLeaf","QueryLeafSnafu","QueryProposals","QueryProposalsSnafu","QueryTransaction","QueryTransactionSnafu","QueryablePayload","Request","RequestSnafu","ResourceId","StreamBlock","StreamBlockSnafu","StreamLeaf","StreamLeafSnafu","Timestamp","TransactionHash","TransactionInclusionProof","TransactionIndex","TransactionIndex","TransactionQueryData","UpdateAvailabilityData","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","api_path","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_error_source","as_error_source","augment_args","augment_args_for_update","backtrace","backtrace","block_hash","block_hash","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","by_hash","by_hash","cause","cause","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","compare","count_proposals","default","define_api","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","description","description","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","enumerate","enumerate","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extensions","fail","fail","fail","fail","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches_mut","genesis","genesis","get_block","get_block_range","get_block_with_transaction","get_hash","get_leaf","get_leaf_range","get_proposals","group_id","hash","hash","hash","hash","header","header","header","header","height","height","height","height","height","height","in_current_span","in_current_span","index","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","insert_block","insert_leaf","internal","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_error","into_error","into_error","into_error","into_error","into_error","into_error","into_error","into_error","into_error","into_error","is_empty","is_empty","is_empty","iter","leaf","leaf","len","len","message","new","new","nth","nth","nth_transaction","nth_transaction","nth_transaction_with_proof","nth_transaction_with_proof","partial_cmp","payload","proof","proof","proposer","proposer","qc","qc_leaf","reason","reason","resource","resource","resource","serialize","serialize","serialize","serialize","size","source","source","status","status","subscribe_blocks","subscribe_leaves","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","transaction","transaction","transaction","transaction","transaction_by_hash","transaction_by_hash","transaction_by_hash_with_proof","transaction_by_hash_with_proof","transaction_with_proof","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","height","height","height","index","message","proposer","reason","reason","resource","resource","resource","source","source","source","source","source","source","source","status","Error","ExtensibleDataSource","FileSystemDataSource","MetricsDataSource","SqlDataSource","UpdateDataSource","VersionedDataSource","__clone_box","__clone_box","__clone_box","__clone_box","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_bits","as_mut","as_mut_bits","as_ref","block_height","block_height","block_height","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","commit","commit","commit","count_proposals","count_proposals","create","create_with_store","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","encode_hex","encode_hex_upper","fmt","fmt","fmt","from","from","from","get_block","get_block","get_block_range","get_block_range","get_block_with_transaction","get_block_with_transaction","get_leaf","get_leaf","get_leaf_range","get_leaf_range","get_proposals","get_proposals","init","init","init","inner","inner_mut","insert_block","insert_block","insert_leaf","insert_leaf","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","metrics","metrics","metrics","new","open","open_with_store","populate_metrics","populate_metrics","populate_metrics","revert","revert","revert","skip_version","sql","subscribe_blocks","subscribe_blocks","subscribe_leaves","subscribe_leaves","to_owned","to_owned","try_as_bits","try_as_mut_bits","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update","update","update","vzip","vzip","vzip","Config","Error","Migration","SqlDataSource","Transaction","__clone_box","__clone_box","__clone_box","__clone_box","applied_on","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_ref","as_ref","block_height","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","checksum","clone","clone","clone_into","clone_into","cmp","commit","compare","connect","connect","context","count_proposals","database","default","default_migrations","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","downcast","downcast_mut","downcast_ref","drop","drop","drop","drop","drop","drop","drop","eq","equivalent","equivalent","equivalent","equivalent","execute","execute_many","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","get_block","get_block_range","get_block_with_transaction","get_leaf","get_leaf_range","get_proposals","header","header","host","include_dir","include_migrations","init","init","init","init","init","insert_block","insert_leaf","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is","metrics","migrations","msg","name","new","no_migrations","partial_cmp","password","populate_metrics","port","postgres","prefix","query","query","revert","root_cause","sql","subscribe_blocks","subscribe_leaves","to_owned","to_owned","to_string","to_string","transaction","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unapplied","update","user","version","vzip","vzip","vzip","vzip","vzip","Counter","Gauge","Histogram","Label","MetricsError","NoSuchMetric","NoSuchSubgroup","Prometheus","PrometheusMetrics","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","add","add_point","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_error_source","backtrace","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cause","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","create_counter","create_gauge","create_histogram","create_label","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","description","drop","drop","drop","drop","drop","drop","export","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","get","get","get","get_counter","get_gauge","get_histogram","get_label","get_subgroup","header","in_current_span","init","init","init","init","init","init","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","mean","sample_count","set","set","source","subgroup","sum","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","update","vzip","vzip","vzip","vzip","vzip","vzip","label","namespace","path","source","Error","Internal","MempoolQueryData","Options","Request","StatusDataSource","UpdateStatusData","__clone_box","__clone_box","__clone_box","__clone_box","api_path","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_error_source","augment_args","augment_args_for_update","backtrace","block_height","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cause","clone","clone","clone_into","clone_into","cmp","compare","consensus_metrics","consensus_metrics","default","default","define_api","deref","deref","deref","deref_mut","deref_mut","deref_mut","description","deserialize","deserialize","drop","drop","drop","eq","equivalent","equivalent","equivalent","equivalent","extensions","fmt","fmt","fmt","from","from","from","from","from","from_arg_matches","from_arg_matches_mut","get_hash","group_id","hash","header","in_current_span","init","init","init","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","memory_footprint","mempool_info","mempool_info","metrics","partial_cmp","populate_metrics","serialize","serialize","source","status","success_rate","success_rate","to_owned","to_owned","to_string","transaction_count","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","vzip","vzip","vzip","reason","source"],"q":[[0,"hotshot_query_service"],[210,"hotshot_query_service::Error"],[214,"hotshot_query_service::QueryError"],[215,"hotshot_query_service::availability"],[837,"hotshot_query_service::availability::Error"],[856,"hotshot_query_service::data_source"],[985,"hotshot_query_service::data_source::sql"],[1163,"hotshot_query_service::metrics"],[1338,"hotshot_query_service::metrics::MetricsError"],[1342,"hotshot_query_service::status"],[1461,"hotshot_query_service::status::Error"],[1463,"dyn_clone::sealed"],[1464,"dyn_clone::sealed"],[1465,"core::error"],[1466,"clap_builder::builder::command"],[1467,"snafu::backtrace_shim"],[1468,"core::option"],[1469,"alloc::string"],[1470,"core::convert"],[1471,"http_types::status_code"],[1472,"core::clone"],[1473,"commit"],[1474,"core::result"],[1475,"serde::de"],[1476,"core::fmt"],[1477,"core::fmt"],[1478,"clap_builder"],[1479,"clap_builder::util::id"],[1480,"color_eyre::section"],[1481,"core::fmt"],[1482,"core::marker"],[1483,"alloc::boxed"],[1484,"alloc::sync"],[1485,"alloc::rc"],[1486,"hotshot::types::handle"],[1487,"hotshot_types::traits::node_implementation"],[1488,"hotshot_types::traits::node_implementation"],[1489,"core::any"],[1490,"hotshot_types::traits::signature_key"],[1491,"core::future::future"],[1492,"core::pin"],[1493,"tide_disco::api"],[1494,"tide_disco::api"],[1495,"core::iter::traits::iterator"],[1496,"core::cmp"],[1497,"core::ops::range"],[1498,"core::hash"],[1499,"core::marker"],[1500,"hotshot_types::simple_certificate"],[1501,"bitvec::slice"],[1502,"bitvec::order"],[1503,"std::path"],[1504,"atomic_store::error"],[1505,"atomic_store::atomic_store"],[1506,"core::iter::traits::collect"],[1507,"hotshot_types::traits::metrics"],[1508,"bitvec::ptr::span"],[1509,"hotshot_types::event"],[1510,"time::offset_date_time"],[1511,"anyhow"],[1512,"alloc::vec"],[1513,"tokio_postgres::to_statement"],[1514,"core::iter::traits::collect"],[1515,"tokio_postgres::query"],[1516,"refinery_core::error"],[1517,"hotshot_types::traits::metrics"]],"d":["","","Contains the error value","","There was an error while trying to fetch the requested …","","The requested resource exists but is not currently …","SNAFU context selector for the QueryError::Missing variant","The requested resource does not exist or is not known to …","SNAFU context selector for the QueryError::NotFound variant","Contains the success value","","","","","A reference to a T which can be resolved into a whole T.","SNAFU context selector for the QueryError::Error variant","","Item within a Payload.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Consume the selector and return the associated error","Consume the selector and return the associated error","Consume the selector and return the associated error","","","","","","","","","","","","","","Get a commitment to the underlying object.","Persistent storage and sources of data consumed by APIs.","","","","","","","","","","","","","","","","","","","","","","","","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","Embed migrations from the given directory into the current …","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","Run an instance of the HotShot Query service with no …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get the underlying object if it is available without …","","","","","","","","","","","","","","","","","","","","","A block hash is the hash of the block header.","","","","","","SNAFU context selector for the Error::BlockStream variant","","SNAFU context selector for the Error::Custom variant","","","","","","A proof that a certain transaction exists in the block.","","","SNAFU context selector for the …","Enumerate the transactions in this block.","","","","","","","SNAFU context selector for the Error::LeafStream variant","","","","","","SNAFU context selector for the Error::QueryBlock variant","","SNAFU context selector for the Error::QueryLeaf variant","","SNAFU context selector for the Error::QueryProposals …","","SNAFU context selector for the Error::QueryTransaction …","A block payload whose contents (e.g. individual …","","SNAFU context selector for the Error::Request variant","","","SNAFU context selector for the Error::StreamBlock variant","","SNAFU context selector for the Error::StreamLeaf variant","","","","","An index which can be used to efficiently retrieve a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Consume the selector and return the associated error","Consume the selector and return the associated error","Consume the selector and return the associated error","Consume the selector and return the associated error","Get the index of the transaction with a given hash, if it …","Get the index of the transaction with a given hash, if it …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enumerate the transactions in the block with their indices.","Enumerate the transactions in the block with their indices.","","","","","","","","","","","","","","","","","","","","","Additional API specification files to merge with …","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Returns the block containing a transaction with the given …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Whether this block is empty of transactions.","Whether this block is empty of transactions.","","List the transaction indices in the block.","","","The number of transactions in the block.","","","Collect information about a Leaf.","Collect information about a block.","Get the index of the nth transaction.","Get the index of the nth transaction.","Get the nth transaction.","Get the nth transaction.","Get the nth transaction, along with an inclusion proof.","Get the nth transaction, along with an inclusion proof.","","","Get an inclusion proof for a transaction with a given …","Get an inclusion proof for a transaction with a given …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get a transaction by its block-specific index.","Get a transaction by its block-specific index.","","","Get the transaction with a given hash, if it is in the …","Get the transaction with a given hash, if it is in the …","Get the transaction with a given hash, if it is in the …","Get the transaction with a given hash, if it is in the …","Get a transaction by its block-specific index, along with …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Wrapper to add extensibility to an existing data source.","A data source for the APIs provided in this crate, backed …","A minimal data source for the status API provided in this …","","An extension trait for types which implement the update …","A data source with an atomic transaction-based …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Atomically commit to all outstanding modifications to the …","","Commit the current state to persistent storage.","","","Create a new FileSystemDataSource with storage at path.","Create a new FileSystemDataSource using a persistent …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","Access the underlying data source.","Mutably access the underlying data source.","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","Open an existing FileSystemDataSource from storage at path.","Open an existing FileSystemDataSource using a persistent …","","","","Erase all oustanding modifications to the data.","","Revert changes made to persistent storage since the last …","Advance the version of the persistent store without …","","","","","","","","","","","","","","","","","","","Update query state based on a new consensus event.","","","","","","Postgres client config.","The Error type, a wrapper around a dynamic error type.","Represents a schema migration to be run on the database, …","A data source for the APIs provided in this crate, backed …","An atomic SQL transaction.","","","","","Get the timestamp from when the Migration was applied. None…","","","","","","","","","","","","","","","","","","","","","","","","An iterator of the chain of source errors contained by …","Get the Migration checksum. Checksum is formed from the …","","","","","","Atomically commit to all outstanding modifications to the …","","Connect to the database with this config.","Connect to a remote database.","Wrap the error value with additional context.","","Set the name of the database to connect to.","","The migrations requied to build the default schema for …","","","","","","","","","","","","","Attempt to downcast the error object to a concrete type.","Downcast this error object by mutable reference.","Downcast this error object by reference.","","","","","","","","","","","","","Execute a statement against the underlying database.","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Set the hostname of the database server.","Embed the contents of a directory in your crate.","Embed migrations from the given directory into the current …","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","Returns true if E is the type held by this error object.","","Add custom migrations to run when connecting to the …","Create a new error object from a printable error message.","Get the Migration Name","Create a new error object from any error type.","Skip all migrations when connecting to the database.","","Set a password for connecting to the database.","","Set the port on which to connect to the database.","","Get the Prefix","Query the underlying SQL database.","Query the underlying SQL database.","Erase all oustanding modifications to the data.","The lowest level cause of this error — this error’s …","","","","","","","","Access the transaction which is accumulating all …","","","","","","","","","","","","","","","","Create an unapplied migration, name and version are parsed …","","Set the DB user to connect as.","Get the Migration version","","","","","","A Counter metric.","A Gauge metric.","A Histogram metric.","A Label metric.","","","","","A Prometheus-based implementation of a Metrics registry.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Get a counter in this sub-group by name.","Get a gauge in this sub-group by name.","Get a histogram in this sub-group by name.","Get a label in this sub-group by name.","Get a (possibly nested) subgroup of this group by its path.","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Additional API specification files to merge with …","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[7,7,140,0,10,0,10,0,10,0,140,0,0,0,0,0,0,7,0,7,7,11,11,12,12,13,13,10,10,7,11,12,13,10,19,7,11,12,13,10,19,7,10,19,19,0,19,7,10,7,11,12,13,10,19,7,11,12,13,10,19,11,12,13,7,7,10,7,11,12,13,10,7,11,12,13,10,142,0,19,7,11,12,13,10,19,7,11,12,13,10,19,7,10,7,10,7,11,12,13,10,19,11,12,13,7,7,11,12,13,10,10,7,7,7,7,11,12,13,10,19,19,19,19,7,10,7,10,0,7,11,12,13,10,19,0,7,7,11,12,13,10,19,7,11,12,13,10,19,7,11,12,13,10,19,7,11,12,13,10,19,11,12,13,13,0,19,0,7,10,7,10,0,7,10,19,7,11,12,13,10,7,10,7,11,12,13,10,19,7,11,12,13,10,19,142,7,11,12,13,10,19,19,19,7,11,12,13,10,19,143,144,145,143,146,0,0,0,0,42,28,42,0,28,0,0,105,80,86,58,147,0,28,0,147,0,0,0,42,28,42,0,80,86,58,0,28,0,28,0,28,0,28,0,0,28,0,0,28,0,28,0,0,0,0,0,147,0,0,58,58,50,50,49,49,60,60,52,52,61,61,62,62,63,63,64,64,65,65,66,66,67,67,53,53,55,55,56,56,57,57,28,28,72,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,49,28,72,72,49,28,50,52,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,53,55,56,57,147,147,49,28,58,50,49,60,52,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,61,62,63,64,65,66,67,53,55,56,57,28,58,58,42,72,0,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,49,28,50,60,52,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,147,147,58,50,60,52,58,58,58,58,50,50,50,50,60,60,60,60,52,52,52,52,72,53,55,56,57,58,58,50,49,49,60,52,61,62,63,64,65,66,67,53,55,56,57,28,28,58,58,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,28,28,72,72,50,60,42,42,42,58,42,42,42,72,58,50,60,52,58,49,60,28,50,60,52,53,55,56,49,28,53,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,105,105,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,61,62,63,64,65,66,67,53,55,56,57,147,147,60,147,50,49,147,60,57,50,60,147,147,147,147,147,147,58,60,147,147,50,67,50,49,55,56,62,64,66,50,60,52,28,60,49,28,28,57,42,42,58,50,49,60,52,61,62,63,64,65,66,67,53,55,56,57,28,58,49,28,147,147,60,52,147,147,147,147,147,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,72,72,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,148,149,150,148,151,152,149,150,153,154,155,156,153,157,154,158,155,152,151,45,0,0,0,0,0,0,97,97,99,99,97,98,99,97,98,99,97,97,97,97,97,98,99,97,98,99,97,98,99,97,99,97,99,45,97,98,97,98,98,98,99,97,98,99,97,98,99,97,98,99,97,97,97,98,99,97,98,99,97,98,97,98,97,98,97,98,97,98,97,98,97,98,99,97,97,97,98,97,98,97,98,99,97,98,99,97,98,99,97,98,99,97,98,99,97,98,98,97,98,99,45,97,98,98,0,97,98,97,98,97,99,97,97,97,98,99,97,98,99,97,98,99,44,97,98,97,98,99,0,0,0,0,0,110,110,115,115,110,112,117,110,115,113,112,117,110,115,113,112,112,113,112,117,110,115,113,112,117,110,115,113,112,110,110,115,110,115,110,113,110,115,113,112,113,115,115,0,112,112,117,110,115,113,112,112,117,110,115,113,112,112,112,112,112,117,110,115,113,113,110,110,110,110,110,117,117,112,112,110,110,115,113,112,112,112,117,110,115,113,113,113,113,113,113,113,112,110,115,0,0,112,117,110,115,113,113,113,112,117,110,115,113,112,117,110,115,113,112,117,110,115,113,112,117,110,115,113,112,113,115,112,110,112,115,110,115,113,115,0,110,117,113,113,112,110,113,113,110,115,112,110,113,112,117,110,115,113,112,117,110,115,113,112,117,110,115,113,110,113,115,110,112,117,110,115,113,0,0,0,0,0,130,130,130,0,106,106,127,127,131,131,128,128,132,132,127,128,130,106,127,131,128,132,130,106,127,131,128,132,130,130,130,106,127,131,128,132,130,106,127,131,128,132,130,106,127,131,128,132,106,127,131,128,132,106,106,106,106,106,130,106,127,131,128,132,130,106,127,131,128,132,130,130,106,127,131,128,132,106,130,130,106,127,131,128,132,130,130,106,127,131,128,132,127,131,132,106,106,106,106,106,130,130,130,106,127,131,128,132,130,106,127,131,128,132,130,106,127,131,128,132,130,106,127,131,128,132,130,106,127,131,128,132,128,128,131,132,130,106,128,106,127,131,128,132,130,130,106,127,131,128,132,130,106,127,131,128,132,130,106,127,131,128,132,131,130,106,127,131,128,132,159,159,160,161,0,27,0,0,27,0,0,139,139,27,27,141,139,141,27,139,141,27,27,141,141,27,43,139,141,27,139,141,27,27,139,27,139,27,139,139,43,43,139,141,0,139,141,27,139,141,27,27,139,27,139,141,27,139,139,139,139,139,141,139,27,27,139,141,27,27,27,141,141,139,141,139,27,27,139,141,27,139,141,27,139,141,27,139,141,27,139,141,27,139,43,43,43,139,162,139,27,27,27,43,43,139,27,27,139,139,141,27,139,141,27,139,141,27,141,141,139,141,27,163,164],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,5,[]],[-1,5,[]],[6,6],[6,6],0,0,[7,[[9,[8]]]],[10,[[9,[8]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[11,10],[12,10],[[[13,[-1]]],10,[[15,[14]]]],[[16,14],7],[7,[[9,[5]]]],[10,[[9,[5]]]],[7,7],[11,11],[12,12],[[[13,[-1]]],[[13,[-1]]],17],[10,10],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[-1,[[18,[-2]]],[],[]],0,[[],19],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[7,21],[10,21],[-1,[[22,[7]]],23],[-1,[[22,[10]]],23],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[11,[[22,[-1,10]]],[]],[12,[[22,[-1,10]]],[]],[[[13,[-1]]],[[22,[-2,10]]],[[15,[14]]],[]],[[7,24],25],[[7,24],25],[[11,24],25],[[12,24],25],[[[13,[-1]],24],25,26],[[10,24],25],[[10,24],25],[27,7],[-1,-1,[]],[[[2,[14,16]]],7],[28,7],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[29,[[22,[19,30]]]],[29,[[22,[19,30]]]],[[],[[9,[31]]]],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[-1,[],[]],[-1,[],[]],0,[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],0,[-1,7,33],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[11,10],[12,10],[[[13,[-1]]],10,[[15,[14]]]],0,0,0,[[19,-2,[40,[-1,-3]]],[[22,[2,7]]],41,[[42,[-1]],43,[44,[-1]],45,34,35],[[46,[-1]]]],[[7,-1],22,47],[[10,-1],22,47],[7,[[9,[5]]]],[10,[[9,[5]]]],0,[7,16],[10,16],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],[-1,14,[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2,-1]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[19,29],[[22,[2,30]]]],[[19,29],[[22,[2,30]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],0,[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,5,[]],[-1,5,[]],[6,6],[6,6],[[[49,[-1]]],[[9,[8]]],41],[28,[[9,[8]]]],[[[50,[-1]]],[[51,[-1]]],41],[[[52,[-1]]],[[51,[-1]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[53,[-1,-2]]],28,[[15,[54]]],[[15,[54]]]],[[[55,[-1,-2]]],28,[[15,[20]]],[[15,[14]]]],[[[56,[-1,-2]]],28,[[15,[20]]],[[15,[14]]]],[[[57,[-1,-2]]],28,[[15,[14]]],[[15,[16]]]],[[-1,18],9,[]],[[-1,18],9,[]],[[[49,[-1]]],[[9,[5]]],41],[28,[[9,[5]]]],[[[58,[-1]]],[[58,[-1]]],59],[[[50,[-1]]],[[50,[-1]]],[17,41]],[[[49,[-1]]],[[49,[-1]]],[17,41]],[[[60,[-1]]],[[60,[-1]]],[17,41]],[[[52,[-1]]],[[52,[-1]]],[17,41]],[61,61],[[[62,[-1]]],[[62,[-1]]],17],[63,63],[[[64,[-1]]],[[64,[-1]]],17],[65,65],[[[66,[-1]]],[[66,[-1]]],17],[[[67,[-1]]],[[67,[-1]]],17],[[[53,[-1,-2]]],[[53,[-1,-2]]],17,17],[[[55,[-1,-2]]],[[55,[-1,-2]]],17,17],[[[56,[-1,-2]]],[[56,[-1,-2]]],17,17],[[[57,[-1,-2]]],[[57,[-1,-2]]],17,17],[28,28],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[[58,[-1]],[58,[-1]]],68,59],[[-1,-2],68,[],[]],[[-1,69],[[71,[[37,[70]]]]],[]],[[],72],[72,[[22,[[73,[-1,28]],74]]],[34,35,75]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[[[49,[-1]]],21,41],[28,21],[-1,[[22,[[50,[-2]]]]],23,41],[-1,[[22,[[60,[-2]]]]],23,41],[-1,[[22,[[52,[-2]]]]],23,41],[-1,[[22,[28]]],23],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[-1,[[37,[76]]],[]],[-1,[[37,[76]]],[]],[[[58,[-1]],[58,[-1]]],77,59],[[[50,[-1]],[50,[-1]]],77,[78,41]],[[[60,[-1]],[60,[-1]]],77,[78,41]],[[[52,[-1]],[52,[-1]]],77,[78,41]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],0,[[[53,[-1,-2]]],[[22,[-3,28]]],[[15,[54]]],[[15,[54]]],[]],[[[55,[-1,-2]]],[[22,[-3,28]]],[[15,[20]]],[[15,[14]]],[]],[[[56,[-1,-2]]],[[22,[-3,28]]],[[15,[20]]],[[15,[14]]],[]],[[[57,[-1,-2]]],[[22,[-3,28]]],[[15,[14]]],[[15,[16]]],[]],[[[58,[-1]],24],25,59],[[[58,[-1]],24],25,59],[[[50,[-1]],24],25,[26,41]],[[[49,[-1]],24],25,41],[[[49,[-1]],24],25,[26,41]],[[[60,[-1]],24],25,[26,41]],[[[52,[-1]],24],25,[26,41]],[[61,24],25],[[[62,[-1]],24],25,26],[[63,24],25],[[[64,[-1]],24],25,26],[[65,24],25],[[[66,[-1]],24],25,26],[[[67,[-1]],24],25,26],[[[53,[-1,-2]],24],25,26,26],[[[55,[-1,-2]],24],25,26,26],[[[56,[-1,-2]],24],25,26,26],[[[57,[-1,-2]],24],25,26,26],[[28,24],25],[[28,24],25],[-1,-1,[]],[[[18,[-1]]],[[58,[-1]]],59],[20,[[58,[-1]]],59],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[2,[14,16]]],28],[79,28],[29,[[22,[72,30]]]],[29,[[22,[72,30]]]],[[],[[50,[-1]]],41],[[],[[60,[-1]]],41],[[-1,-3],[[71,[[37,[70]]]]],[],[],[[15,[[80,[-2]]]],34,35]],[[-1,-2],[[71,[[37,[70]]]]],[],[[81,[20]],34]],[[-1,[82,[-2]]],[[71,[[37,[70]]]]],[],[]],[[-1,-2],54,[83,84],85],[[-1,-3],[[71,[[37,[70]]]]],[],[],[[15,[[86,[-2]]]],34,35]],[[-1,-2],[[71,[[37,[70]]]]],[],[[81,[20]],34]],[[-1,69,[9,[20]]],[[71,[[37,[70]]]]],[]],[[],[[9,[31]]]],[[[58,[-1]],-2],2,59,87],[[[50,[-1]]],[[88,[-1]]],41],[[[60,[-1]]],[[51,[-1]]],41],[[[52,[-1]]],[[82,[-1]]],41],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[[60,[-1]]],[[89,[-1]]],41],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[[50,[-1]]],54,41],[[[60,[-1]]],54,41],[[[52,[-1]]],54,41],0,0,0,[-1,[],[]],[-1,[],[]],0,[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[-1,[60,[-2]]],[[71,[[37,[70]]]]],[],[]],[[-1,[50,[-2]]],[[71,[[37,[70]]]]],[],[]],[-1,28,33],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[61,28],[[[62,[-1]]],28,[[15,[14]]]],[63,28],[[[64,[-1]]],28,[[15,[14]]]],[65,28],[[[66,[-1]]],28,[[15,[14]]]],[[[67,[-1]]],28,[[15,[69]]]],[[[53,[-1,-2]]],28,[[15,[54]]],[[15,[54]]]],[[[55,[-1,-2]]],28,[[15,[20]]],[[15,[14]]]],[[[56,[-1,-2]]],28,[[15,[20]]],[[15,[14]]]],[[[57,[-1,-2]]],28,[[15,[14]]],[[15,[16]]]],[-1,77,[]],[-1,77,[]],[[[60,[-1]]],77,41],[-1,[],[]],[[[50,[-1]]],[[90,[-1]]],41],0,[-1,20,[]],[[[60,[-1]]],20,41],0,[[[90,[-1]],[91,[-1]]],[[22,[[50,[-1]],[49,[-1]]]]],41],[[[90,[-1]],[91,[-1]],[92,[-1]]],[[22,[[60,[-1]],[49,[-1]]]]],41],[[-1,20],9,[]],[[-1,20],9,[]],[[-1,20],9,[]],[[-1,20],9,[]],[[-1,20],[[9,[2]]],[]],[[-1,20],[[9,[2]]],[]],[[[58,[-1]],[58,[-1]]],[[9,[68]]],59],[[[60,[-1]]],[[92,[-1]]],41],[-1,9,[]],[-1,9,[]],[[[50,[-1]]],69,41],0,[[[50,[-1]]],[[91,[-1]]],41],0,0,0,0,0,0,[[[50,[-1]],-2],22,41,47],[[[60,[-1]],-2],22,41,47],[[[52,[-1]],-2],22,41,47],[[28,-1],22,47],[[[60,[-1]]],54,41],[[[49,[-1]]],[[9,[5]]],41],[28,[[9,[5]]]],[28,16],0,[[-1,20],[[71,[[37,[70]]]]],[]],[[-1,20],[[71,[[37,[70]]]]],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],[-1,14,[]],[-1,14,[]],[-1,9,[]],[-1,9,[]],[[[60,[-1]],[93,[-1]]],[[9,[[52,[-1]]]]],41],[[[52,[-1]]],[[94,[-1]]],41],[[-1,18],9,[]],[[-1,18],9,[]],[[-1,18],[[9,[2]]],[]],[[-1,18],[[9,[2]]],[]],[-1,[[9,[2]]],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[72,29],[[22,[2,30]]]],[[72,29],[[22,[2,30]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,[[95,[-2,-3]]],[],[],96],[[[97,[-1,-2]]],-2,[],[]],[-1,[[95,[-2,-3]]],[],[],96],[[[97,[-1,-2]]],-2,[],[]],[[[97,[-1,-2]]],[[71,[[37,[70]]]]],[43,34,35],[34,35]],[[[98,[-1]]],[[71,[[37,[70]]]]],41],[99,[[71,[[37,[70]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[97,[-1,-2]]],[[97,[-1,-2]]],17,17],[99,99],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[-1,[[71,[[37,[70]]]]],[]],[[[97,[-1,-2]]],[[71,[[37,[70]]]]],[45,34],34],[[[98,[-1]]],[[71,[[37,[70]]]]],41],[[[97,[-2,-3]],69],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],69],[[71,[[37,[70]]]]],41],[100,[[22,[[98,[-1]],101]]],41],[102,[[22,[[98,[-1]],101]]],41],[[],99],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,2],[20,2],[20,2],[-1,-2,[],[[104,[103]]]],[-1,-2,[],[[104,[103]]]],[[[97,[-1,-2]],24],25,26,26],[[[98,[-1]],24],25,41],[[99,24],25],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[97,[-2,-3]],-4],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35],[[15,[[80,[-1]]]],34,35]],[[[98,[-1]],-2],[[71,[[37,[70]]]]],41,[[15,[[80,[-1]]]],34,35]],[[[97,[-2,-3]],-4],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35],[[81,[20]],34]],[[[98,[-1]],-2],[[71,[[37,[70]]]]],41,[[81,[20]],34]],[[[97,[-2,-3]],[82,[-1]]],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],[82,[-1]]],[[71,[[37,[70]]]]],41],[[[97,[-2,-3]],-4],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35],[[15,[[86,[-1]]]],34,35]],[[[98,[-1]],-2],[[71,[[37,[70]]]]],41,[[15,[[86,[-1]]]],34,35]],[[[97,[-2,-3]],-4],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35],[[81,[20]],34]],[[[98,[-1]],-2],[[71,[[37,[70]]]]],41,[[81,[20]],34]],[[[97,[-2,-3]],69,[9,[20]]],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],69,[9,[20]]],[[71,[[37,[70]]]]],41],[[],20],[[],20],[[],20],[[[97,[-1,-2]]],-1,[],[]],[[[97,[-1,-2]]],-1,[],[]],[[[97,[-2,-3]],[60,[-1]]],[[71,[[37,[70]]]]],41,[[105,[-1]],34,35],[34,35]],[[[98,[-1]],[60,[-1]]],[[71,[[37,[70]]]]],41],[[[97,[-2,-3]],[50,[-1]]],[[71,[[37,[70]]]]],41,[[105,[-1]],34,35],[34,35]],[[[98,[-1]],[50,[-1]]],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[97,[-1,-2]]],106,[43,34,35],[34,35]],[[[98,[-1]]],106,41],[99,106],[[-1,-2],[[97,[-1,-2]]],[],[]],[100,[[22,[[98,[-1]],101]]],41],[102,[[22,[[98,[-1]],101]]],41],[-1,[[37,[107,36]]],[]],[-1,[[37,[107,36]]],[]],[-1,[[37,[107,36]]],[]],[-1,[[71,[[37,[70]]]]],[]],[[[97,[-1,-2]]],[[71,[[37,[70]]]]],[45,34],34],[[[98,[-1]]],[[71,[[37,[70]]]]],41],[[[98,[-1]]],[[22,[2,101]]],41],0,[[[97,[-2,-3]],20],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],20],[[71,[[37,[70]]]]],41],[[[97,[-2,-3]],20],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],20],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[22,[[95,[-2,-3]],[108,[-2]]]]],[],[],96],[-1,[[22,[[95,[-2,-3]],[108,[-2]]]]],[],[],96],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[-1,[109,[-2]]],[[71,[[37,[70]]]]],[],[]],[[-1,[109,[-2]]],[[71,[[37,[70,36]]]]],[],[]],[[-1,[109,[-2]]],[[71,[[37,[70,36]]]]],[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[110,[[9,[111]]]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[112,5],[112,5],[[[113,[-1]]],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[112,114],[110,54],[110,110],[115,115],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[110,110],68],[[[113,[-1]]],[[71,[[37,[70]]]]],41],[[-1,-2],68,[],[]],[115,[[22,[[113,[-1]],112]]],41],[115,[[22,[[113,[-1]],112]]],41],[[112,-1],112,[33,34,35]],[[[113,[-1]],69],[[71,[[37,[70]]]]],41],[[115,-1],115,[[15,[14]]]],[[],115],[[],[[116,[110]]]],[20,-1,[]],[112],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[112],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[112,[[22,[-1,112]]],[33,26,34,35]],[112,[[9,[-1]]],[33,26,34,35]],[112,[[9,[-1]]],[33,26,34,35]],[112,2],[20,2],[20,2],[20,2],[20,2],[[[113,[-1]]],2,41],[20,2],[[110,110],77],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[117,-1,-2],[[22,[2,112]]],[84,118],119],[[117,-1],[[22,[2,112]]],119],[[112,24],[[22,[2,120]]]],[[112,24],[[22,[2,120]]]],[[110,24],[[22,[2,120]]]],[[110,24],[[22,[2,120]]]],[[115,24],25],[[[113,[-1]],24],25,[41,26]],[-1,-1,[]],[-1,112,[5,34,35]],[121,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[113,[-1]],-2],[[71,[[37,[70]]]]],41,[[15,[[80,[-1]]]],34,35]],[[[113,[-1]],-2],[[71,[[37,[70]]]]],41,[[81,[20]],34]],[[[113,[-1]],[82,[-1]]],[[71,[[37,[70]]]]],41],[[[113,[-1]],-2],[[71,[[37,[70]]]]],41,[[15,[[86,[-1]]]],34,35]],[[[113,[-1]],-2],[[71,[[37,[70]]]]],41,[[81,[20]],34]],[[[113,[-1]],69,[9,[20]]],[[71,[[37,[70]]]]],41],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[115,-1],115,[[15,[14]]]],0,0,[[],20],[[],20],[[],20],[[],20],[[],20],[[[113,[-1]],[60,[-1]]],[[71,[[37,[70]]]]],41],[[[113,[-1]],[50,[-1]]],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[112,77],[[[113,[-1]]],106,41],[[115,-1],115,119],[-1,112,[33,26,34,35]],[110,21],[-1,112,[5,34,35]],[115,115],[[110,110],[[9,[68]]]],[[115,-1],115,[[15,[14]]]],[-1,[[37,[107,36]]],[]],[[115,122],115],0,[110,123],[[117,-1,-2],[[22,[124,112]]],[84,118],119],[[[113,[-1]],-2,-3],[[22,[124,112]]],41,[84,118],119],[[[113,[-1]]],[[71,[[37,[70]]]]],41],[112,5],[110,[[9,[21]]]],[[[113,[-1]],20],[[71,[[37,[70]]]]],41],[[[113,[-1]],20],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],[-1,14,[]],[[[113,[-1]]],[[22,[117,112]]],41],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[21,21],[[22,[110,125]]]],[[-1,[109,[-2]]],[[71,[[37,[70,36]]]]],[],[]],[[115,-1],115,[[15,[14]]]],[110,126],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[127,20],2],[[128,129],2],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,5,[]],[130,[[9,[8]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[130,[[9,[5]]]],[106,106],[127,127],[131,131],[128,128],[132,132],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[106,14,[9,[14]]],[[37,[133]]]],[[106,14,[9,[14]]],[[37,[134]]]],[[106,14,[9,[14]]],[[37,[135]]]],[[106,14],[[37,[136]]]],[[],106],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[130,21],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[106,[[22,[14]]]],[[130,24],25],[[130,24],25],[[106,24],25],[[127,24],25],[[131,24],25],[[128,24],25],[[132,24],25],[137,130],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[127,20],[131,20],[132,14],[[106,21],[[22,[127,130]]]],[[106,21],[[22,[131,130]]]],[[106,21],[[22,[128,130]]]],[[106,21],[[22,[132,130]]]],[[106,-1],[[22,[106,130]]],119],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[-1,[],[]],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[128,129],[128,20],[[131,20],2],[[132,14],2],[130,[[9,[5]]]],[[106,14],[[37,[107]]]],[128,129],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[131,138],2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],0,[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,5,[]],[6,6],[6,6],[27,[[9,[8]]]],[-1,[[71,[[37,[70]]]]],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[27,[[9,[5]]]],[139,139],[27,27],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[139,139],68],[[-1,-2],68,[],[]],[-1,[[140,[106]]],[]],[-1,[[140,[106]]],[]],[[],139],[[],141],[141,[[22,[[73,[-1,27]],74]]],[34,35,75]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[27,21],[-1,[[22,[139]]],23],[-1,[[22,[27]]],23],[20,2],[20,2],[20,2],[[139,139],77],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],0,[[139,24],25],[[27,24],25],[[27,24],25],[-1,-1,[]],[-1,-1,[]],[79,27],[-1,-1,[]],[14,27],[29,[[22,[141,30]]]],[29,[[22,[141,30]]]],[[-1,-2],54,[83,84],85],[[],[[9,[31]]]],[[139,-1],2,87],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[-1,[],[]],[[],20],[[],20],[[],20],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],0,[-1,[[71,[[37,[70]]]]],35],[-1,[[71,[[37,[70]]]]],35],[-1,106,[]],[[139,139],[[9,[68]]]],[-1,[[37,[107]]],[]],[[139,-1],22,47],[[27,-1],22,47],[27,[[9,[5]]]],[27,16],[-1,[[71,[[37,[70]]]]],35],[-1,[[71,[[37,[70]]]]],35],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],0,[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[141,29],[[22,[2,30]]]],[[141,29],[[22,[2,30]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0],"c":[],"p":[[3,"Private",1463],[15,"tuple"],[3,"Private",1463],[8,"Any",1464],[8,"Error",1465],[3,"Command",1466],[4,"Error",0],[3,"Backtrace",1467],[4,"Option",1468],[4,"QueryError",0],[3,"NotFoundSnafu",0],[3,"MissingSnafu",0],[3,"Snafu",0],[3,"String",1469],[8,"Into",1470],[4,"StatusCode",1471],[8,"Clone",1472],[3,"Commitment",1473],[3,"Options",0],[15,"usize"],[15,"str"],[4,"Result",1474],[8,"Deserializer",1475],[3,"Formatter",1476],[6,"Result",1476],[8,"Debug",1476],[4,"Error",1342],[4,"Error",215],[3,"ArgMatches",1477],[6,"Error",1478],[3,"Id",1479],[3,"IndentedSection",1480],[8,"Display",1476],[8,"Send",1481],[8,"Sync",1481],[3,"Global",1482],[3,"Box",1483],[3,"Arc",1484],[3,"Rc",1485],[3,"SystemContextHandle",1486],[8,"NodeType",1487],[8,"AvailabilityDataSource",215],[8,"StatusDataSource",1342],[8,"UpdateDataSource",856],[8,"VersionedDataSource",856],[8,"NodeImplementation",1487],[8,"Serializer",1488],[3,"TypeId",1464],[3,"InconsistentLeafError",215],[3,"LeafQueryData",215],[6,"BlockHash",215],[3,"TransactionQueryData",215],[3,"InvalidTransactionIndexSnafu",215],[15,"u64"],[3,"LeafStreamSnafu",215],[3,"BlockStreamSnafu",215],[3,"CustomSnafu",215],[4,"ResourceId",215],[8,"Committable",1473],[3,"BlockQueryData",215],[3,"RequestSnafu",215],[3,"QueryLeafSnafu",215],[3,"StreamLeafSnafu",215],[3,"QueryBlockSnafu",215],[3,"StreamBlockSnafu",215],[3,"QueryTransactionSnafu",215],[3,"QueryProposalsSnafu",215],[4,"Ordering",1489],[3,"EncodedPublicKey",1490],[8,"Future",1491],[3,"Pin",1492],[3,"Options",215],[3,"Api",1493],[4,"ApiError",1493],[8,"ReadState",1494],[8,"Iterator",1495],[15,"bool"],[8,"PartialEq",1489],[4,"RequestError",1496],[6,"BlockId",215],[8,"RangeBounds",1497],[6,"TransactionHash",215],[8,"Hash",1498],[8,"Sized",1481],[8,"BuildHasher",1498],[6,"LeafId",215],[8,"Hasher",1498],[6,"LeafHash",215],[6,"Header",0],[3,"Leaf",1499],[6,"QuorumCertificate",1500],[6,"Payload",0],[6,"TransactionIndex",215],[6,"Transaction",0],[3,"BitSlice",1501],[8,"BitOrder",1502],[3,"ExtensibleDataSource",856],[3,"FileSystemDataSource",856],[3,"MetricsDataSource",856],[3,"Path",1503],[4,"PersistenceError",1504],[3,"AtomicStoreLoader",1505],[15,"char"],[8,"FromIterator",1506],[8,"UpdateAvailabilityData",215],[3,"PrometheusMetrics",1163],[8,"Metrics",1507],[4,"BitSpanError",1508],[3,"Event",1509],[3,"Migration",985],[3,"OffsetDateTime",1510],[3,"Error",985],[3,"SqlDataSource",985],[3,"Chain",1511],[3,"Config",985],[3,"Vec",1512],[3,"Transaction",985],[8,"ToStatement",1513],[8,"IntoIterator",1506],[3,"Error",1476],[15,"never"],[15,"u16"],[4,"Type",1514],[3,"RowStream",1515],[3,"Error",1516],[15,"u32"],[3,"Counter",1163],[3,"Histogram",1163],[15,"f64"],[4,"MetricsError",1163],[3,"Gauge",1163],[3,"Label",1163],[8,"Counter",1507],[8,"Gauge",1507],[8,"Histogram",1507],[8,"Label",1507],[4,"Error",1517],[15,"i64"],[3,"MempoolQueryData",1342],[6,"QueryResult",0],[3,"Options",1342],[8,"Resolvable",0],[13,"Custom",210],[13,"Availability",210],[13,"Status",210],[13,"Error",214],[8,"QueryablePayload",215],[13,"InvalidTransactionIndex",837],[13,"LeafStream",837],[13,"BlockStream",837],[13,"Custom",837],[13,"QueryProposals",837],[13,"QueryLeaf",837],[13,"QueryBlock",837],[13,"QueryTransaction",837],[13,"Request",837],[13,"StreamLeaf",837],[13,"StreamBlock",837],[13,"NoSuchMetric",1338],[13,"NoSuchSubgroup",1338],[13,"Prometheus",1338],[8,"UpdateStatusData",1342],[13,"Internal",1461],[13,"Request",1461]]}\ +"hotshot_query_service":{"doc":"The HotShot Query Service is a minimal, generic query …","t":"NNNENGNDNDNDGEGIDNGLLLLLLLLLLLLLLLLLLLLLLLLLLAMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOLLLLLLOLLLLLLLLLLLLLLLLLLLLLLLLLLLLMAMFLLLLALLMLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLMMMMMIGGDQNQDNDEQNNNQDNDQGGDQNQDNNNDNDNDNDNDINDENDNDGGGGQDILLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKKKLKKKLLLLLLLLLLLLMMMLLMLLLLLLLLLLLLLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLMKLMLLLLLLLLLLLLLMLMMMMMMLLLLLLLLMKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMQDDDCIILLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLALLLLLLLLLLLLLLLLLKLLLLLDDDIDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOOLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLCLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDENNNDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMENDDNIILLLLMLLLLLLLLLLKLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLKLKLLLLLLLLLMLLLLLLLLLLLLLLMM","n":["Availability","Custom","Err","Error","Error","Header","Missing","MissingSnafu","NotFound","NotFoundSnafu","Ok","Options","Payload","QueryError","QueryResult","Resolvable","Snafu","Status","Transaction","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_error_source","as_error_source","augment_args","augment_args_for_update","availability","availability","backtrace","backtrace","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","catch_all","cause","cause","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","commitment","data_source","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","description","description","deserialize","deserialize","drop","drop","drop","drop","drop","drop","fail","fail","fail","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches_mut","group_id","header","header","in_current_span","in_current_span","include_migrations","init","init","init","init","init","init","instantiate_data_source_tests","internal","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_error","into_error","into_error","message","metrics","port","run_standalone_service","serialize","serialize","source","source","status","status","status","status","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_resolve","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","message","source","source","status","message","AvailabilityDataSource","BlockHash","BlockId","BlockQueryData","BlockRange","BlockStream","BlockStream","BlockStreamSnafu","Custom","CustomSnafu","Error","Error","Hash","Hash","Hash","InclusionProof","InconsistentLeafError","InvalidTransactionIndex","InvalidTransactionIndexSnafu","Iter","LeafHash","LeafId","LeafQueryData","LeafRange","LeafStream","LeafStream","LeafStreamSnafu","Number","Number","Number","Options","QueryBlock","QueryBlockSnafu","QueryLeaf","QueryLeafSnafu","QueryProposals","QueryProposalsSnafu","QueryTransaction","QueryTransactionSnafu","QueryablePayload","Request","RequestSnafu","ResourceId","StreamBlock","StreamBlockSnafu","StreamLeaf","StreamLeafSnafu","Timestamp","TransactionHash","TransactionInclusionProof","TransactionIndex","TransactionIndex","TransactionQueryData","UpdateAvailabilityData","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","api_path","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_error_source","as_error_source","augment_args","augment_args_for_update","backtrace","backtrace","block_hash","block_hash","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","by_hash","by_hash","cause","cause","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","compare","count_proposals","default","define_api","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","description","description","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","enumerate","enumerate","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extensions","fail","fail","fail","fail","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches_mut","genesis","genesis","get_block","get_block_range","get_block_with_transaction","get_hash","get_leaf","get_leaf_range","get_proposals","group_id","hash","hash","hash","hash","header","header","header","header","height","height","height","height","height","height","in_current_span","in_current_span","index","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","insert_block","insert_leaf","internal","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_error","into_error","into_error","into_error","into_error","into_error","into_error","into_error","into_error","into_error","into_error","is_empty","is_empty","is_empty","iter","leaf","leaf","len","len","message","new","new","nth","nth","nth_transaction","nth_transaction","nth_transaction_with_proof","nth_transaction_with_proof","partial_cmp","payload","proof","proof","proposer","proposer","qc","qc_leaf","reason","reason","resource","resource","resource","serialize","serialize","serialize","serialize","size","source","source","status","status","subscribe_blocks","subscribe_leaves","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","transaction","transaction","transaction","transaction","transaction_by_hash","transaction_by_hash","transaction_by_hash_with_proof","transaction_by_hash_with_proof","transaction_with_proof","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","height","height","height","index","message","proposer","reason","reason","resource","resource","resource","source","source","source","source","source","source","source","status","Error","ExtensibleDataSource","FileSystemDataSource","MetricsDataSource","SqlDataSource","UpdateDataSource","VersionedDataSource","__clone_box","__clone_box","__clone_box","__clone_box","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_bits","as_mut","as_mut_bits","as_ref","block_height","block_height","block_height","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","commit","commit","commit","count_proposals","count_proposals","create","create_with_store","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","encode_hex","encode_hex_upper","fmt","fmt","fmt","from","from","from","get_block","get_block","get_block_range","get_block_range","get_block_with_transaction","get_block_with_transaction","get_leaf","get_leaf","get_leaf_range","get_leaf_range","get_proposals","get_proposals","init","init","init","inner","inner_mut","insert_block","insert_block","insert_leaf","insert_leaf","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","metrics","metrics","metrics","new","open","open_with_store","populate_metrics","populate_metrics","populate_metrics","revert","revert","revert","skip_version","sql","subscribe_blocks","subscribe_blocks","subscribe_leaves","subscribe_leaves","to_owned","to_owned","try_as_bits","try_as_mut_bits","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update","update","update","vzip","vzip","vzip","Config","Error","Migration","Query","SqlDataSource","Transaction","__clone_box","__clone_box","__clone_box","__clone_box","applied_on","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_ref","as_ref","block_height","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","checksum","client","client","client","clone","clone","clone_into","clone_into","cmp","commit","compare","connect","connect","context","count_proposals","database","default","default_migrations","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","downcast","downcast_mut","downcast_ref","drop","drop","drop","drop","drop","drop","drop","eq","equivalent","equivalent","equivalent","equivalent","execute","execute_many","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","get_block","get_block_range","get_block_with_transaction","get_leaf","get_leaf_range","get_proposals","header","header","host","include_dir","include_migrations","init","init","init","init","init","insert_block","insert_leaf","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is","metrics","migrations","msg","name","new","no_migrations","partial_cmp","password","populate_metrics","port","postgres","prefix","query","query_one","query_one_static","query_opt","query_opt_static","query_static","reset_schema","revert","root_cause","schema","sql","subscribe_blocks","subscribe_leaves","to_owned","to_owned","to_string","to_string","transaction","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unapplied","update","user","version","vzip","vzip","vzip","vzip","vzip","Counter","Gauge","Histogram","Label","MetricsError","NoSuchMetric","NoSuchSubgroup","Prometheus","PrometheusMetrics","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","add","add_point","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_error_source","backtrace","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cause","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","create_counter","create_gauge","create_histogram","create_label","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","description","drop","drop","drop","drop","drop","drop","export","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","get","get","get","get_counter","get_gauge","get_histogram","get_label","get_subgroup","header","in_current_span","init","init","init","init","init","init","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","mean","sample_count","set","set","source","subgroup","sum","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","update","vzip","vzip","vzip","vzip","vzip","vzip","label","namespace","path","source","Error","Internal","MempoolQueryData","Options","Request","StatusDataSource","UpdateStatusData","__clone_box","__clone_box","__clone_box","__clone_box","api_path","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_error_source","augment_args","augment_args_for_update","backtrace","block_height","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cause","clone","clone","clone_into","clone_into","cmp","compare","consensus_metrics","consensus_metrics","default","default","define_api","deref","deref","deref","deref_mut","deref_mut","deref_mut","description","deserialize","deserialize","drop","drop","drop","eq","equivalent","equivalent","equivalent","equivalent","extensions","fmt","fmt","fmt","from","from","from","from","from","from_arg_matches","from_arg_matches_mut","get_hash","group_id","hash","header","in_current_span","init","init","init","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","memory_footprint","mempool_info","mempool_info","metrics","partial_cmp","populate_metrics","serialize","serialize","source","status","success_rate","success_rate","to_owned","to_owned","to_string","transaction_count","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches_mut","vzip","vzip","vzip","reason","source"],"q":[[0,"hotshot_query_service"],[210,"hotshot_query_service::Error"],[214,"hotshot_query_service::QueryError"],[215,"hotshot_query_service::availability"],[837,"hotshot_query_service::availability::Error"],[856,"hotshot_query_service::data_source"],[985,"hotshot_query_service::data_source::sql"],[1173,"hotshot_query_service::metrics"],[1348,"hotshot_query_service::metrics::MetricsError"],[1352,"hotshot_query_service::status"],[1471,"hotshot_query_service::status::Error"],[1473,"dyn_clone::sealed"],[1474,"dyn_clone::sealed"],[1475,"core::error"],[1476,"clap_builder::builder::command"],[1477,"snafu::backtrace_shim"],[1478,"core::option"],[1479,"alloc::string"],[1480,"core::convert"],[1481,"http_types::status_code"],[1482,"core::clone"],[1483,"commit"],[1484,"core::result"],[1485,"serde::de"],[1486,"core::fmt"],[1487,"core::fmt"],[1488,"clap_builder"],[1489,"clap_builder::util::id"],[1490,"color_eyre::section"],[1491,"core::fmt"],[1492,"core::marker"],[1493,"alloc::boxed"],[1494,"alloc::sync"],[1495,"alloc::rc"],[1496,"hotshot::types::handle"],[1497,"hotshot_types::traits::node_implementation"],[1498,"hotshot_types::traits::node_implementation"],[1499,"core::any"],[1500,"hotshot_types::traits::signature_key"],[1501,"core::future::future"],[1502,"core::pin"],[1503,"tide_disco::api"],[1504,"tide_disco::api"],[1505,"core::iter::traits::iterator"],[1506,"core::cmp"],[1507,"core::ops::range"],[1508,"core::hash"],[1509,"core::marker"],[1510,"hotshot_types::simple_certificate"],[1511,"bitvec::slice"],[1512,"bitvec::order"],[1513,"std::path"],[1514,"atomic_store::error"],[1515,"atomic_store::atomic_store"],[1516,"core::iter::traits::collect"],[1517,"hotshot_types::traits::metrics"],[1518,"bitvec::ptr::span"],[1519,"hotshot_types::event"],[1520,"time::offset_date_time"],[1521,"anyhow"],[1522,"tokio_postgres::client"],[1523,"alloc::vec"],[1524,"tokio_postgres::to_statement"],[1525,"core::iter::traits::collect"],[1526,"refinery_core::error"],[1527,"hotshot_types::traits::metrics"]],"d":["","","Contains the error value","","There was an error while trying to fetch the requested …","","The requested resource exists but is not currently …","SNAFU context selector for the QueryError::Missing variant","The requested resource does not exist or is not known to …","SNAFU context selector for the QueryError::NotFound variant","Contains the success value","","","","","A reference to a T which can be resolved into a whole T.","SNAFU context selector for the QueryError::Error variant","","Item within a Payload.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Consume the selector and return the associated error","Consume the selector and return the associated error","Consume the selector and return the associated error","","","","","","","","","","","","","","Get a commitment to the underlying object.","Persistent storage and sources of data consumed by APIs.","","","","","","","","","","","","","","","","","","","","","","","","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","Embed migrations from the given directory into the current …","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","Run an instance of the HotShot Query service with no …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get the underlying object if it is available without …","","","","","","","","","","","","","","","","","","","","","A block hash is the hash of the block header.","","","","","","SNAFU context selector for the Error::BlockStream variant","","SNAFU context selector for the Error::Custom variant","","","","","","A proof that a certain transaction exists in the block.","","","SNAFU context selector for the …","Enumerate the transactions in this block.","","","","","","","SNAFU context selector for the Error::LeafStream variant","","","","","","SNAFU context selector for the Error::QueryBlock variant","","SNAFU context selector for the Error::QueryLeaf variant","","SNAFU context selector for the Error::QueryProposals …","","SNAFU context selector for the Error::QueryTransaction …","A block payload whose contents (e.g. individual …","","SNAFU context selector for the Error::Request variant","","","SNAFU context selector for the Error::StreamBlock variant","","SNAFU context selector for the Error::StreamLeaf variant","","","","","An index which can be used to efficiently retrieve a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Consume the selector and return the associated error","Consume the selector and return the associated error","Consume the selector and return the associated error","Consume the selector and return the associated error","Get the index of the transaction with a given hash, if it …","Get the index of the transaction with a given hash, if it …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enumerate the transactions in the block with their indices.","Enumerate the transactions in the block with their indices.","","","","","","","","","","","","","","","","","","","","","Additional API specification files to merge with …","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","Consume the selector and return a Result with the …","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","","","","","","Returns the block containing a transaction with the given …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Whether this block is empty of transactions.","Whether this block is empty of transactions.","","List the transaction indices in the block.","","","The number of transactions in the block.","","","Collect information about a Leaf.","Collect information about a block.","Get the index of the nth transaction.","Get the index of the nth transaction.","Get the nth transaction.","Get the nth transaction.","Get the nth transaction, along with an inclusion proof.","Get the nth transaction, along with an inclusion proof.","","","Get an inclusion proof for a transaction with a given …","Get an inclusion proof for a transaction with a given …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get a transaction by its block-specific index.","Get a transaction by its block-specific index.","","","Get the transaction with a given hash, if it is in the …","Get the transaction with a given hash, if it is in the …","Get the transaction with a given hash, if it is in the …","Get the transaction with a given hash, if it is in the …","Get a transaction by its block-specific index, along with …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Wrapper to add extensibility to an existing data source.","A data source for the APIs provided in this crate, backed …","A minimal data source for the status API provided in this …","","An extension trait for types which implement the update …","A data source with an atomic transaction-based …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Atomically commit to all outstanding modifications to the …","","Commit the current state to persistent storage.","","","Create a new FileSystemDataSource with storage at path.","Create a new FileSystemDataSource using a persistent …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","Access the underlying data source.","Mutably access the underlying data source.","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","Open an existing FileSystemDataSource from storage at path.","Open an existing FileSystemDataSource using a persistent …","","","","Erase all oustanding modifications to the data.","","Revert changes made to persistent storage since the last …","Advance the version of the persistent store without …","","","","","","","","","","","","","","","","","","","Update query state based on a new consensus event.","","","","","","Postgres client config.","The Error type, a wrapper around a dynamic error type.","Represents a schema migration to be run on the database, …","","A data source for the APIs provided in this crate, backed …","An atomic SQL transaction.","","","","","Get the timestamp from when the Migration was applied. None…","","","","","","","","","","","","","","","","","","","","","","","","An iterator of the chain of source errors contained by …","Get the Migration checksum. Checksum is formed from the …","","","","","","","","","Atomically commit to all outstanding modifications to the …","","Connect to the database with this config.","Connect to a remote database.","Wrap the error value with additional context.","","Set the name of the database to connect to.","","The migrations requied to build the default schema for …","","","","","","","","","","","","","Attempt to downcast the error object to a concrete type.","Downcast this error object by mutable reference.","Downcast this error object by reference.","","","","","","","","","","","","","Execute a statement against the underlying database.","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Set the hostname of the database server.","Embed the contents of a directory in your crate.","Embed migrations from the given directory into the current …","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","Returns true if E is the type held by this error object.","","Add custom migrations to run when connecting to the …","Create a new error object from a printable error message.","Get the Migration Name","Create a new error object from any error type.","Skip all migrations when connecting to the database.","","Set a password for connecting to the database.","","Set the port on which to connect to the database.","","Get the Prefix","","Query the underlying SQL database, returning exactly one …","Query the underlying SQL database with no parameters, …","Query the underlying SQL database, returning zero or one …","Query the underlying SQL database with no parameters, …","Query the underlying SQL database with no parameters.","Reset the schema on connection.","Erase all oustanding modifications to the data.","The lowest level cause of this error — this error’s …","Set the name of the schema to use for queries.","","","","","","","","Access the transaction which is accumulating all …","","","","","","","","","","","","","","","","Create an unapplied migration, name and version are parsed …","","Set the DB user to connect as.","Get the Migration version","","","","","","A Counter metric.","A Gauge metric.","A Histogram metric.","A Label metric.","","","","","A Prometheus-based implementation of a Metrics registry.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Get a counter in this sub-group by name.","Get a gauge in this sub-group by name.","Get a histogram in this sub-group by name.","Get a label in this sub-group by name.","Get a (possibly nested) subgroup of this group by its path.","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Additional API specification files to merge with …","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[7,7,119,0,10,0,10,0,10,0,119,0,0,0,0,0,0,7,0,7,7,11,11,12,12,13,13,10,10,7,11,12,13,10,19,7,11,12,13,10,19,7,10,19,19,0,19,7,10,7,11,12,13,10,19,7,11,12,13,10,19,11,12,13,7,7,10,7,11,12,13,10,7,11,12,13,10,142,0,19,7,11,12,13,10,19,7,11,12,13,10,19,7,10,7,10,7,11,12,13,10,19,11,12,13,7,7,11,12,13,10,10,7,7,7,7,11,12,13,10,19,19,19,19,7,10,7,10,0,7,11,12,13,10,19,0,7,7,11,12,13,10,19,7,11,12,13,10,19,7,11,12,13,10,19,7,11,12,13,10,19,11,12,13,13,0,19,0,7,10,7,10,0,7,10,19,7,11,12,13,10,7,10,7,11,12,13,10,19,7,11,12,13,10,19,142,7,11,12,13,10,19,19,19,7,11,12,13,10,19,143,144,145,143,146,0,0,0,0,42,28,42,0,28,0,0,105,80,86,58,147,0,28,0,147,0,0,0,42,28,42,0,80,86,58,0,28,0,28,0,28,0,28,0,0,28,0,0,28,0,28,0,0,0,0,0,147,0,0,58,58,50,50,49,49,60,60,52,52,61,61,62,62,63,63,64,64,65,65,66,66,67,67,53,53,55,55,56,56,57,57,28,28,72,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,49,28,72,72,49,28,50,52,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,53,55,56,57,147,147,49,28,58,50,49,60,52,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,61,62,63,64,65,66,67,53,55,56,57,28,58,58,42,72,0,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,49,28,50,60,52,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,147,147,58,50,60,52,58,58,58,58,50,50,50,50,60,60,60,60,52,52,52,52,72,53,55,56,57,58,58,50,49,49,60,52,61,62,63,64,65,66,67,53,55,56,57,28,28,58,58,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,28,28,72,72,50,60,42,42,42,58,42,42,42,72,58,50,60,52,58,49,60,28,50,60,52,53,55,56,49,28,53,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,105,105,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,61,62,63,64,65,66,67,53,55,56,57,147,147,60,147,50,49,147,60,57,50,60,147,147,147,147,147,147,58,60,147,147,50,67,50,49,55,56,62,64,66,50,60,52,28,60,49,28,28,57,42,42,58,50,49,60,52,61,62,63,64,65,66,67,53,55,56,57,28,58,49,28,147,147,60,52,147,147,147,147,147,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,72,72,58,50,49,60,52,72,61,62,63,64,65,66,67,53,55,56,57,28,148,149,150,148,151,152,149,150,153,154,155,156,153,157,154,158,155,152,151,45,0,0,0,0,0,0,97,97,99,99,97,98,99,97,98,99,97,97,97,97,97,98,99,97,98,99,97,98,99,97,99,97,99,45,97,98,97,98,98,98,99,97,98,99,97,98,99,97,98,99,97,97,97,98,99,97,98,99,97,98,97,98,97,98,97,98,97,98,97,98,97,98,99,97,97,97,98,97,98,97,98,99,97,98,99,97,98,99,97,98,99,97,98,99,97,98,98,97,98,99,45,97,98,98,0,97,98,97,98,97,99,97,97,97,98,99,97,98,99,97,98,99,44,97,98,97,98,99,0,0,0,0,0,0,110,110,117,117,110,112,116,110,117,113,112,116,110,117,113,112,112,113,112,116,110,117,113,112,116,110,117,113,112,110,159,116,113,110,117,110,117,110,113,110,117,113,112,113,117,117,0,112,112,116,110,117,113,112,112,116,110,117,113,112,112,112,112,112,116,110,117,113,113,110,110,110,110,110,116,116,112,112,110,110,117,113,112,112,112,116,110,117,113,113,113,113,113,113,113,112,110,117,0,0,112,116,110,117,113,113,113,112,116,110,117,113,112,116,110,117,113,112,116,110,117,113,112,116,110,117,113,112,113,117,112,110,112,117,110,117,113,117,0,110,159,159,159,159,159,159,117,113,112,117,110,113,113,110,117,112,110,113,112,116,110,117,113,112,116,110,117,113,112,116,110,117,113,110,113,117,110,112,116,110,117,113,0,0,0,0,0,131,131,131,0,106,106,128,128,132,132,129,129,133,133,128,129,131,106,128,132,129,133,131,106,128,132,129,133,131,131,131,106,128,132,129,133,131,106,128,132,129,133,131,106,128,132,129,133,106,128,132,129,133,106,106,106,106,106,131,106,128,132,129,133,131,106,128,132,129,133,131,131,106,128,132,129,133,106,131,131,106,128,132,129,133,131,131,106,128,132,129,133,128,132,133,106,106,106,106,106,131,131,131,106,128,132,129,133,131,106,128,132,129,133,131,106,128,132,129,133,131,106,128,132,129,133,131,106,128,132,129,133,129,129,132,133,131,106,129,106,128,132,129,133,131,131,106,128,132,129,133,131,106,128,132,129,133,131,106,128,132,129,133,132,131,106,128,132,129,133,160,160,161,162,0,27,0,0,27,0,0,140,140,27,27,141,140,141,27,140,141,27,27,141,141,27,43,140,141,27,140,141,27,27,140,27,140,27,140,140,43,43,140,141,0,140,141,27,140,141,27,27,140,27,140,141,27,140,140,140,140,140,141,140,27,27,140,141,27,27,27,141,141,140,141,140,27,27,140,141,27,140,141,27,140,141,27,140,141,27,140,141,27,140,43,43,43,140,163,140,27,27,27,43,43,140,27,27,140,140,141,27,140,141,27,140,141,27,141,141,140,141,27,164,165],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,5,[]],[-1,5,[]],[6,6],[6,6],0,0,[7,[[9,[8]]]],[10,[[9,[8]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[11,10],[12,10],[[[13,[-1]]],10,[[15,[14]]]],[[16,14],7],[7,[[9,[5]]]],[10,[[9,[5]]]],[7,7],[11,11],[12,12],[[[13,[-1]]],[[13,[-1]]],17],[10,10],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[-1,[[18,[-2]]],[],[]],0,[[],19],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[7,21],[10,21],[-1,[[22,[7]]],23],[-1,[[22,[10]]],23],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[11,[[22,[-1,10]]],[]],[12,[[22,[-1,10]]],[]],[[[13,[-1]]],[[22,[-2,10]]],[[15,[14]]],[]],[[7,24],25],[[7,24],25],[[11,24],25],[[12,24],25],[[[13,[-1]],24],25,26],[[10,24],25],[[10,24],25],[[[2,[14,16]]],7],[-1,-1,[]],[27,7],[28,7],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[29,[[22,[19,30]]]],[29,[[22,[19,30]]]],[[],[[9,[31]]]],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[-1,[],[]],[-1,[],[]],0,[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],0,[-1,7,33],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[11,10],[12,10],[[[13,[-1]]],10,[[15,[14]]]],0,0,0,[[19,-2,[40,[-1,-3]]],[[22,[2,7]]],41,[[42,[-1]],43,[44,[-1]],45,34,35],[[46,[-1]]]],[[7,-1],22,47],[[10,-1],22,47],[7,[[9,[5]]]],[10,[[9,[5]]]],0,[7,16],[10,16],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],[-1,14,[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2,-1]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[19,29],[[22,[2,30]]]],[[19,29],[[22,[2,30]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],0,[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,5,[]],[-1,5,[]],[6,6],[6,6],[[[49,[-1]]],[[9,[8]]],41],[28,[[9,[8]]]],[[[50,[-1]]],[[51,[-1]]],41],[[[52,[-1]]],[[51,[-1]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[53,[-1,-2]]],28,[[15,[54]]],[[15,[54]]]],[[[55,[-1,-2]]],28,[[15,[20]]],[[15,[14]]]],[[[56,[-1,-2]]],28,[[15,[20]]],[[15,[14]]]],[[[57,[-1,-2]]],28,[[15,[14]]],[[15,[16]]]],[[-1,18],9,[]],[[-1,18],9,[]],[[[49,[-1]]],[[9,[5]]],41],[28,[[9,[5]]]],[[[58,[-1]]],[[58,[-1]]],59],[[[50,[-1]]],[[50,[-1]]],[17,41]],[[[49,[-1]]],[[49,[-1]]],[17,41]],[[[60,[-1]]],[[60,[-1]]],[17,41]],[[[52,[-1]]],[[52,[-1]]],[17,41]],[61,61],[[[62,[-1]]],[[62,[-1]]],17],[63,63],[[[64,[-1]]],[[64,[-1]]],17],[65,65],[[[66,[-1]]],[[66,[-1]]],17],[[[67,[-1]]],[[67,[-1]]],17],[[[53,[-1,-2]]],[[53,[-1,-2]]],17,17],[[[55,[-1,-2]]],[[55,[-1,-2]]],17,17],[[[56,[-1,-2]]],[[56,[-1,-2]]],17,17],[[[57,[-1,-2]]],[[57,[-1,-2]]],17,17],[28,28],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[[58,[-1]],[58,[-1]]],68,59],[[-1,-2],68,[],[]],[[-1,69],[[71,[[37,[70]]]]],[]],[[],72],[72,[[22,[[73,[-1,28]],74]]],[34,35,75]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[[[49,[-1]]],21,41],[28,21],[-1,[[22,[[50,[-2]]]]],23,41],[-1,[[22,[[60,[-2]]]]],23,41],[-1,[[22,[[52,[-2]]]]],23,41],[-1,[[22,[28]]],23],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[-1,[[37,[76]]],[]],[-1,[[37,[76]]],[]],[[[58,[-1]],[58,[-1]]],77,59],[[[50,[-1]],[50,[-1]]],77,[78,41]],[[[60,[-1]],[60,[-1]]],77,[78,41]],[[[52,[-1]],[52,[-1]]],77,[78,41]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],0,[[[53,[-1,-2]]],[[22,[-3,28]]],[[15,[54]]],[[15,[54]]],[]],[[[55,[-1,-2]]],[[22,[-3,28]]],[[15,[20]]],[[15,[14]]],[]],[[[56,[-1,-2]]],[[22,[-3,28]]],[[15,[20]]],[[15,[14]]],[]],[[[57,[-1,-2]]],[[22,[-3,28]]],[[15,[14]]],[[15,[16]]],[]],[[[58,[-1]],24],25,59],[[[58,[-1]],24],25,59],[[[50,[-1]],24],25,[26,41]],[[[49,[-1]],24],25,41],[[[49,[-1]],24],25,[26,41]],[[[60,[-1]],24],25,[26,41]],[[[52,[-1]],24],25,[26,41]],[[61,24],25],[[[62,[-1]],24],25,26],[[63,24],25],[[[64,[-1]],24],25,26],[[65,24],25],[[[66,[-1]],24],25,26],[[[67,[-1]],24],25,26],[[[53,[-1,-2]],24],25,26,26],[[[55,[-1,-2]],24],25,26,26],[[[56,[-1,-2]],24],25,26,26],[[[57,[-1,-2]],24],25,26,26],[[28,24],25],[[28,24],25],[-1,-1,[]],[[[18,[-1]]],[[58,[-1]]],59],[20,[[58,[-1]]],59],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[2,[14,16]]],28],[79,28],[-1,-1,[]],[29,[[22,[72,30]]]],[29,[[22,[72,30]]]],[[],[[50,[-1]]],41],[[],[[60,[-1]]],41],[[-1,-3],[[71,[[37,[70]]]]],[],[],[[15,[[80,[-2]]]],34,35]],[[-1,-2],[[71,[[37,[70]]]]],[],[[81,[20]],34]],[[-1,[82,[-2]]],[[71,[[37,[70]]]]],[],[]],[[-1,-2],54,[83,84],85],[[-1,-3],[[71,[[37,[70]]]]],[],[],[[15,[[86,[-2]]]],34,35]],[[-1,-2],[[71,[[37,[70]]]]],[],[[81,[20]],34]],[[-1,69,[9,[20]]],[[71,[[37,[70]]]]],[]],[[],[[9,[31]]]],[[[58,[-1]],-2],2,59,87],[[[50,[-1]]],[[88,[-1]]],41],[[[60,[-1]]],[[51,[-1]]],41],[[[52,[-1]]],[[82,[-1]]],41],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[[60,[-1]]],[[89,[-1]]],41],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[[50,[-1]]],54,41],[[[60,[-1]]],54,41],[[[52,[-1]]],54,41],0,0,0,[-1,[],[]],[-1,[],[]],0,[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[[-1,[60,[-2]]],[[71,[[37,[70]]]]],[],[]],[[-1,[50,[-2]]],[[71,[[37,[70]]]]],[],[]],[-1,28,33],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[61,28],[[[62,[-1]]],28,[[15,[14]]]],[63,28],[[[64,[-1]]],28,[[15,[14]]]],[65,28],[[[66,[-1]]],28,[[15,[14]]]],[[[67,[-1]]],28,[[15,[69]]]],[[[53,[-1,-2]]],28,[[15,[54]]],[[15,[54]]]],[[[55,[-1,-2]]],28,[[15,[20]]],[[15,[14]]]],[[[56,[-1,-2]]],28,[[15,[20]]],[[15,[14]]]],[[[57,[-1,-2]]],28,[[15,[14]]],[[15,[16]]]],[-1,77,[]],[-1,77,[]],[[[60,[-1]]],77,41],[-1,[],[]],[[[50,[-1]]],[[90,[-1]]],41],0,[-1,20,[]],[[[60,[-1]]],20,41],0,[[[90,[-1]],[91,[-1]]],[[22,[[50,[-1]],[49,[-1]]]]],41],[[[90,[-1]],[91,[-1]],[92,[-1]]],[[22,[[60,[-1]],[49,[-1]]]]],41],[[-1,20],9,[]],[[-1,20],9,[]],[[-1,20],9,[]],[[-1,20],9,[]],[[-1,20],[[9,[2]]],[]],[[-1,20],[[9,[2]]],[]],[[[58,[-1]],[58,[-1]]],[[9,[68]]],59],[[[60,[-1]]],[[92,[-1]]],41],[-1,9,[]],[-1,9,[]],[[[50,[-1]]],69,41],0,[[[50,[-1]]],[[91,[-1]]],41],0,0,0,0,0,0,[[[50,[-1]],-2],22,41,47],[[[60,[-1]],-2],22,41,47],[[[52,[-1]],-2],22,41,47],[[28,-1],22,47],[[[60,[-1]]],54,41],[[[49,[-1]]],[[9,[5]]],41],[28,[[9,[5]]]],[28,16],0,[[-1,20],[[71,[[37,[70]]]]],[]],[[-1,20],[[71,[[37,[70]]]]],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],[-1,14,[]],[-1,14,[]],[-1,9,[]],[-1,9,[]],[[[60,[-1]],[93,[-1]]],[[9,[[52,[-1]]]]],41],[[[52,[-1]]],[[94,[-1]]],41],[[-1,18],9,[]],[[-1,18],9,[]],[[-1,18],[[9,[2]]],[]],[[-1,18],[[9,[2]]],[]],[-1,[[9,[2]]],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[72,29],[[22,[2,30]]]],[[72,29],[[22,[2,30]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,[[95,[-2,-3]]],[],[],96],[[[97,[-1,-2]]],-2,[],[]],[-1,[[95,[-2,-3]]],[],[],96],[[[97,[-1,-2]]],-2,[],[]],[[[97,[-1,-2]]],[[71,[[37,[70]]]]],[43,34,35],[34,35]],[[[98,[-1]]],[[71,[[37,[70]]]]],41],[99,[[71,[[37,[70]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[97,[-1,-2]]],[[97,[-1,-2]]],17,17],[99,99],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[-1,[[71,[[37,[70]]]]],[]],[[[97,[-1,-2]]],[[71,[[37,[70]]]]],[45,34],34],[[[98,[-1]]],[[71,[[37,[70]]]]],41],[[[97,[-2,-3]],69],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],69],[[71,[[37,[70]]]]],41],[100,[[22,[[98,[-1]],101]]],41],[102,[[22,[[98,[-1]],101]]],41],[[],99],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,2],[20,2],[20,2],[-1,-2,[],[[104,[103]]]],[-1,-2,[],[[104,[103]]]],[[[97,[-1,-2]],24],25,26,26],[[[98,[-1]],24],25,41],[[99,24],25],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[97,[-2,-3]],-4],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35],[[15,[[80,[-1]]]],34,35]],[[[98,[-1]],-2],[[71,[[37,[70]]]]],41,[[15,[[80,[-1]]]],34,35]],[[[97,[-2,-3]],-4],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35],[[81,[20]],34]],[[[98,[-1]],-2],[[71,[[37,[70]]]]],41,[[81,[20]],34]],[[[97,[-2,-3]],[82,[-1]]],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],[82,[-1]]],[[71,[[37,[70]]]]],41],[[[97,[-2,-3]],-4],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35],[[15,[[86,[-1]]]],34,35]],[[[98,[-1]],-2],[[71,[[37,[70]]]]],41,[[15,[[86,[-1]]]],34,35]],[[[97,[-2,-3]],-4],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35],[[81,[20]],34]],[[[98,[-1]],-2],[[71,[[37,[70]]]]],41,[[81,[20]],34]],[[[97,[-2,-3]],69,[9,[20]]],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],69,[9,[20]]],[[71,[[37,[70]]]]],41],[[],20],[[],20],[[],20],[[[97,[-1,-2]]],-1,[],[]],[[[97,[-1,-2]]],-1,[],[]],[[[97,[-2,-3]],[60,[-1]]],[[71,[[37,[70]]]]],41,[[105,[-1]],34,35],[34,35]],[[[98,[-1]],[60,[-1]]],[[71,[[37,[70]]]]],41],[[[97,[-2,-3]],[50,[-1]]],[[71,[[37,[70]]]]],41,[[105,[-1]],34,35],[34,35]],[[[98,[-1]],[50,[-1]]],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[97,[-1,-2]]],106,[43,34,35],[34,35]],[[[98,[-1]]],106,41],[99,106],[[-1,-2],[[97,[-1,-2]]],[],[]],[100,[[22,[[98,[-1]],101]]],41],[102,[[22,[[98,[-1]],101]]],41],[-1,[[37,[107,36]]],[]],[-1,[[37,[107,36]]],[]],[-1,[[37,[107,36]]],[]],[-1,[[71,[[37,[70]]]]],[]],[[[97,[-1,-2]]],[[71,[[37,[70]]]]],[45,34],34],[[[98,[-1]]],[[71,[[37,[70]]]]],41],[[[98,[-1]]],[[22,[2,101]]],41],0,[[[97,[-2,-3]],20],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],20],[[71,[[37,[70]]]]],41],[[[97,[-2,-3]],20],[[71,[[37,[70]]]]],41,[[42,[-1]],34,35],[34,35]],[[[98,[-1]],20],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[22,[[95,[-2,-3]],[108,[-2]]]]],[],[],96],[-1,[[22,[[95,[-2,-3]],[108,[-2]]]]],[],[],96],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[-1,[109,[-2]]],[[71,[[37,[70]]]]],[],[]],[[-1,[109,[-2]]],[[71,[[37,[70,36]]]]],[],[]],[[-1,[109,[-2]]],[[71,[[37,[70,36]]]]],[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[110,[[9,[111]]]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[112,5],[112,5],[[[113,[-1]]],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[112,114],[110,54],[-1,115,[]],[116,115],[[[113,[-1]]],115,41],[110,110],[117,117],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[110,110],68],[[[113,[-1]]],[[71,[[37,[70]]]]],41],[[-1,-2],68,[],[]],[117,[[22,[[113,[-1]],112]]],41],[117,[[22,[[113,[-1]],112]]],41],[[112,-1],112,[33,34,35]],[[[113,[-1]],69],[[71,[[37,[70]]]]],41],[[117,-1],117,[[15,[14]]]],[[],117],[[],[[118,[110]]]],[112],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[112],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[112,[[22,[-1,112]]],[33,26,34,35]],[112,[[9,[-1]]],[33,26,34,35]],[112,[[9,[-1]]],[33,26,34,35]],[20,2],[112,2],[20,2],[20,2],[20,2],[20,2],[[[113,[-1]]],2,41],[[110,110],77],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[116,-1,-2],[[119,[2]]],[84,120],121],[[116,-1],[[119,[2]]],121],[[112,24],[[22,[2,122]]]],[[112,24],[[22,[2,122]]]],[[110,24],[[22,[2,122]]]],[[110,24],[[22,[2,122]]]],[[117,24],25],[[[113,[-1]],24],25,[41,26]],[123,-1,[]],[-1,112,[5,34,35]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[113,[-1]],-2],[[71,[[37,[70]]]]],41,[[15,[[80,[-1]]]],34,35]],[[[113,[-1]],-2],[[71,[[37,[70]]]]],41,[[81,[20]],34]],[[[113,[-1]],[82,[-1]]],[[71,[[37,[70]]]]],41],[[[113,[-1]],-2],[[71,[[37,[70]]]]],41,[[15,[[86,[-1]]]],34,35]],[[[113,[-1]],-2],[[71,[[37,[70]]]]],41,[[81,[20]],34]],[[[113,[-1]],69,[9,[20]]],[[71,[[37,[70]]]]],41],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[[117,-1],117,[[15,[14]]]],0,0,[[],20],[[],20],[[],20],[[],20],[[],20],[[[113,[-1]],[60,[-1]]],[[71,[[37,[70]]]]],41],[[[113,[-1]],[50,[-1]]],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[112,77],[[[113,[-1]]],106,41],[[117,-1],117,121],[-1,112,[33,26,34,35]],[110,21],[-1,112,[5,34,35]],[117,117],[[110,110],[[9,[68]]]],[[117,-1],117,[[15,[14]]]],[-1,[[37,[107,36]]],[]],[[117,124],117],0,[110,125],[[-1,-2,-3],[[71,[[37,[70]]]]],35,[84,120,35],[121,34]],[[-1,-2,-3],[[71,[[37,[70]]]]],35,[84,120,35],[121,34]],[[-1,-2],[[71,[[37,[70]]]]],35,[84,120,35]],[[-1,-2,-3],[[71,[[37,[70]]]]],35,[84,120,35],[121,34]],[[-1,-2],[[71,[[37,[70]]]]],35,[84,120,35]],[[-1,-2],[[71,[[37,[70]]]]],35,[84,120,35]],[117,117],[[[113,[-1]]],[[71,[[37,[70]]]]],41],[112,5],[[117,-1],117,[[15,[14]]]],[110,[[9,[21]]]],[[[113,[-1]],20],[[71,[[37,[70]]]]],41],[[[113,[-1]],20],[[71,[[37,[70]]]]],41],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],[-1,14,[]],[[[113,[-1]]],[[119,[116]]],41],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[21,21],[[22,[110,126]]]],[[-1,[109,[-2]]],[[71,[[37,[70,36]]]]],[],[]],[[117,-1],117,[[15,[14]]]],[110,127],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],[[-1,3],2,[]],[[-1,1],2,[]],[[128,20],2],[[129,130],2],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,5,[]],[131,[[9,[8]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[131,[[9,[5]]]],[106,106],[128,128],[132,132],[129,129],[133,133],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[106,14,[9,[14]]],[[37,[134]]]],[[106,14,[9,[14]]],[[37,[135]]]],[[106,14,[9,[14]]],[[37,[136]]]],[[106,14],[[37,[137]]]],[[],106],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[131,21],[20,2],[20,2],[20,2],[20,2],[20,2],[20,2],[106,[[22,[14]]]],[[131,24],25],[[131,24],25],[[106,24],25],[[128,24],25],[[132,24],25],[[129,24],25],[[133,24],25],[-1,-1,[]],[138,131],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[128,20],[132,20],[133,14],[[106,21],[[22,[128,131]]]],[[106,21],[[22,[132,131]]]],[[106,21],[[22,[129,131]]]],[[106,21],[[22,[133,131]]]],[[106,-1],[[22,[106,131]]],121],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[-1,[],[]],[[],20],[[],20],[[],20],[[],20],[[],20],[[],20],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[129,130],[129,20],[[132,20],2],[[133,14],2],[131,[[9,[5]]]],[[106,14],[[37,[107]]]],[129,130],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[132,139],2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,0,0,[[-1,3],2,[]],[[-1,1],2,[]],[[-1,1],2,[]],[[-1,3],2,[]],0,[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,5,[]],[6,6],[6,6],[27,[[9,[8]]]],[-1,[[71,[[37,[70]]]]],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[27,[[9,[5]]]],[140,140],[27,27],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[140,140],68],[[-1,-2],68,[],[]],[-1,[[119,[106]]],[]],[-1,[[119,[106]]],[]],[[],140],[[],141],[141,[[22,[[73,[-1,27]],74]]],[34,35,75]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[20,-1,[]],[27,21],[-1,[[22,[140]]],23],[-1,[[22,[27]]],23],[20,2],[20,2],[20,2],[[140,140],77],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],[[-1,-2],77,[],[]],0,[[140,24],25],[[27,24],25],[[27,24],25],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[14,27],[79,27],[29,[[22,[141,30]]]],[29,[[22,[141,30]]]],[[-1,-2],54,[83,84],85],[[],[[9,[31]]]],[[140,-1],2,87],[[-1,-2],[[32,[-2,-3]]],[],[33,34,35],[]],[-1,[],[]],[[],20],[[],20],[[],20],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[37,[-1,36]]],[[37,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[38,[-1,36]]],[[38,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],[[[39,[-1,36]]],[[39,[4,36]]],[]],0,[-1,[[71,[[37,[70]]]]],35],[-1,[[71,[[37,[70]]]]],35],[-1,106,[]],[[140,140],[[9,[68]]]],[-1,[[37,[107]]],[]],[[140,-1],22,47],[[27,-1],22,47],[27,[[9,[5]]]],[27,16],[-1,[[71,[[37,[70]]]]],35],[-1,[[71,[[37,[70]]]]],35],[-1,-2,[],[]],[-1,-2,[],[]],[-1,14,[]],0,[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,[[22,[-2]]],[],[]],[-1,48,[]],[-1,48,[]],[-1,48,[]],[[141,29],[[22,[2,30]]]],[[141,29],[[22,[2,30]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0],"c":[],"p":[[3,"Private",1473],[15,"tuple"],[3,"Private",1473],[8,"Any",1474],[8,"Error",1475],[3,"Command",1476],[4,"Error",0],[3,"Backtrace",1477],[4,"Option",1478],[4,"QueryError",0],[3,"NotFoundSnafu",0],[3,"MissingSnafu",0],[3,"Snafu",0],[3,"String",1479],[8,"Into",1480],[4,"StatusCode",1481],[8,"Clone",1482],[3,"Commitment",1483],[3,"Options",0],[15,"usize"],[15,"str"],[4,"Result",1484],[8,"Deserializer",1485],[3,"Formatter",1486],[6,"Result",1486],[8,"Debug",1486],[4,"Error",1352],[4,"Error",215],[3,"ArgMatches",1487],[6,"Error",1488],[3,"Id",1489],[3,"IndentedSection",1490],[8,"Display",1486],[8,"Send",1491],[8,"Sync",1491],[3,"Global",1492],[3,"Box",1493],[3,"Arc",1494],[3,"Rc",1495],[3,"SystemContextHandle",1496],[8,"NodeType",1497],[8,"AvailabilityDataSource",215],[8,"StatusDataSource",1352],[8,"UpdateDataSource",856],[8,"VersionedDataSource",856],[8,"NodeImplementation",1497],[8,"Serializer",1498],[3,"TypeId",1474],[3,"InconsistentLeafError",215],[3,"LeafQueryData",215],[6,"BlockHash",215],[3,"TransactionQueryData",215],[3,"InvalidTransactionIndexSnafu",215],[15,"u64"],[3,"LeafStreamSnafu",215],[3,"BlockStreamSnafu",215],[3,"CustomSnafu",215],[4,"ResourceId",215],[8,"Committable",1483],[3,"BlockQueryData",215],[3,"RequestSnafu",215],[3,"QueryLeafSnafu",215],[3,"StreamLeafSnafu",215],[3,"QueryBlockSnafu",215],[3,"StreamBlockSnafu",215],[3,"QueryTransactionSnafu",215],[3,"QueryProposalsSnafu",215],[4,"Ordering",1499],[3,"EncodedPublicKey",1500],[8,"Future",1501],[3,"Pin",1502],[3,"Options",215],[3,"Api",1503],[4,"ApiError",1503],[8,"ReadState",1504],[8,"Iterator",1505],[15,"bool"],[8,"PartialEq",1499],[4,"RequestError",1506],[6,"BlockId",215],[8,"RangeBounds",1507],[6,"TransactionHash",215],[8,"Hash",1508],[8,"Sized",1491],[8,"BuildHasher",1508],[6,"LeafId",215],[8,"Hasher",1508],[6,"LeafHash",215],[6,"Header",0],[3,"Leaf",1509],[6,"QuorumCertificate",1510],[6,"Payload",0],[6,"TransactionIndex",215],[6,"Transaction",0],[3,"BitSlice",1511],[8,"BitOrder",1512],[3,"ExtensibleDataSource",856],[3,"FileSystemDataSource",856],[3,"MetricsDataSource",856],[3,"Path",1513],[4,"PersistenceError",1514],[3,"AtomicStoreLoader",1515],[15,"char"],[8,"FromIterator",1516],[8,"UpdateAvailabilityData",215],[3,"PrometheusMetrics",1173],[8,"Metrics",1517],[4,"BitSpanError",1518],[3,"Event",1519],[3,"Migration",985],[3,"OffsetDateTime",1520],[3,"Error",985],[3,"SqlDataSource",985],[3,"Chain",1521],[3,"Client",1522],[3,"Transaction",985],[3,"Config",985],[3,"Vec",1523],[6,"QueryResult",0],[8,"ToStatement",1524],[8,"IntoIterator",1516],[3,"Error",1486],[15,"never"],[15,"u16"],[4,"Type",1525],[3,"Error",1526],[15,"u32"],[3,"Counter",1173],[3,"Histogram",1173],[15,"f64"],[4,"MetricsError",1173],[3,"Gauge",1173],[3,"Label",1173],[8,"Counter",1517],[8,"Gauge",1517],[8,"Histogram",1517],[8,"Label",1517],[4,"Error",1527],[15,"i64"],[3,"MempoolQueryData",1352],[3,"Options",1352],[8,"Resolvable",0],[13,"Custom",210],[13,"Availability",210],[13,"Status",210],[13,"Error",214],[8,"QueryablePayload",215],[13,"InvalidTransactionIndex",837],[13,"LeafStream",837],[13,"BlockStream",837],[13,"Custom",837],[13,"QueryProposals",837],[13,"QueryLeaf",837],[13,"QueryBlock",837],[13,"QueryTransaction",837],[13,"Request",837],[13,"StreamLeaf",837],[13,"StreamBlock",837],[8,"Query",985],[13,"NoSuchMetric",1348],[13,"NoSuchSubgroup",1348],[13,"Prometheus",1348],[8,"UpdateStatusData",1352],[13,"Internal",1471],[13,"Request",1471]]}\ }'); if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/src/hotshot_query_service/data_source.rs.html b/src/hotshot_query_service/data_source.rs.html index 879f0828f..a9d32670d 100644 --- a/src/hotshot_query_service/data_source.rs.html +++ b/src/hotshot_query_service/data_source.rs.html @@ -469,6 +469,48 @@ 469 470 471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513
// Copyright (c) 2022 Espresso Systems (espressosys.com)
 // This file is part of the HotShot Query Service library.
 //
@@ -818,6 +860,48 @@
             QueryError::NotFound
         ));
     }
+
+    #[async_std::test]
+    pub async fn test_reset<D: TestableDataSource>() {
+        setup_test();
+
+        let storage = D::create(0).await;
+        let mut ds = D::connect(&storage).await;
+
+        // Mock up some consensus data.
+        let mut qc = QuorumCertificate::<MockTypes>::genesis();
+        let mut leaf = Leaf::<MockTypes>::genesis();
+        // Increment the block number, to distinguish this block from the genesis block, which
+        // already exists.
+        leaf.block_header.block_number += 1;
+        qc.data.leaf_commit = leaf.commit();
+
+        let block = BlockQueryData::new(leaf.clone(), qc.clone(), MockPayload::genesis()).unwrap();
+        let leaf = LeafQueryData::new(leaf, qc).unwrap();
+
+        // Insert some data and check that we can read it back.
+        ds.insert_leaf(leaf.clone()).await.unwrap();
+        ds.insert_block(block.clone()).await.unwrap();
+        ds.commit().await.unwrap();
+
+        assert_eq!(ds.block_height().await.unwrap(), 2);
+        assert_eq!(leaf, ds.get_leaf(1).await.unwrap());
+        assert_eq!(block, ds.get_block(1).await.unwrap());
+
+        drop(ds);
+
+        // Reset and check that the changes are gone.
+        let ds = D::reset(&storage).await;
+        assert_eq!(ds.block_height().await.unwrap(), 1);
+        assert!(matches!(
+            ds.get_leaf(1).await.unwrap_err(),
+            QueryError::NotFound
+        ));
+        assert!(matches!(
+            ds.get_block(1).await.unwrap_err(),
+            QueryError::NotFound
+        ));
+    }
 }
 
 /// Generic tests we can instantiate for all the status data sources.
diff --git a/src/hotshot_query_service/data_source/extension.rs.html b/src/hotshot_query_service/data_source/extension.rs.html
index 65e28d2d9..e7abc06d6 100644
--- a/src/hotshot_query_service/data_source/extension.rs.html
+++ b/src/hotshot_query_service/data_source/extension.rs.html
@@ -267,6 +267,10 @@
 267
 268
 269
+270
+271
+272
+273
 
// Copyright (c) 2022 Espresso Systems (espressosys.com)
 // This file is part of the HotShot Query Service library.
 //
@@ -517,6 +521,10 @@
             Self::new(D::connect(storage).await, Default::default())
         }
 
+        async fn reset(storage: &Self::Storage) -> Self {
+            Self::new(D::reset(storage).await, Default::default())
+        }
+
         async fn handle_event(&mut self, event: &Event<MockTypes>) {
             self.update(event).await.unwrap();
             self.commit().await.unwrap();
diff --git a/src/hotshot_query_service/data_source/fs.rs.html b/src/hotshot_query_service/data_source/fs.rs.html
index 0a4e23aef..75e42de31 100644
--- a/src/hotshot_query_service/data_source/fs.rs.html
+++ b/src/hotshot_query_service/data_source/fs.rs.html
@@ -625,6 +625,10 @@
 625
 626
 627
+628
+629
+630
+631
 
// Copyright (c) 2022 Espresso Systems (espressosys.com)
 // This file is part of the HotShot Query Service library.
 //
@@ -1233,6 +1237,10 @@
             Self::open(storage.path()).await.unwrap()
         }
 
+        async fn reset(storage: &Self::Storage) -> Self {
+            Self::create(storage.path()).await.unwrap()
+        }
+
         async fn handle_event(&mut self, event: &Event<MockTypes>) {
             self.update(event).await.unwrap();
             self.commit().await.unwrap();
diff --git a/src/hotshot_query_service/data_source/metrics.rs.html b/src/hotshot_query_service/data_source/metrics.rs.html
index b10ebd2f2..a6b8f41fa 100644
--- a/src/hotshot_query_service/data_source/metrics.rs.html
+++ b/src/hotshot_query_service/data_source/metrics.rs.html
@@ -118,6 +118,12 @@
 118
 119
 120
+121
+122
+123
+124
+125
+126
 
// Copyright (c) 2022 Espresso Systems (espressosys.com)
 // This file is part of the HotShot Query Service library.
 //
@@ -223,6 +229,12 @@
             }
         }
 
+        async fn reset(storage: &Self::Storage) -> Self {
+            Self {
+                metrics: storage.clone(),
+            }
+        }
+
         async fn handle_event(&mut self, _event: &Event<MockTypes>) {}
     }
 }
diff --git a/src/hotshot_query_service/data_source/sql.rs.html b/src/hotshot_query_service/data_source/sql.rs.html
index e78eee4b1..b80124575 100644
--- a/src/hotshot_query_service/data_source/sql.rs.html
+++ b/src/hotshot_query_service/data_source/sql.rs.html
@@ -1505,6 +1505,71 @@
 1505
 1506
 1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
 
// Copyright (c) 2022 Espresso Systems (espressosys.com)
 // This file is part of the HotShot Query Service library.
 //
@@ -1555,7 +1620,7 @@
 };
 use tokio_postgres::{
     types::{BorrowToSql, ToSql},
-    Client, NoTls, Row, RowStream, ToStatement,
+    Client, NoTls, Row, ToStatement,
 };
 
 pub use crate::include_migrations;
@@ -1691,6 +1756,8 @@
     user: Option<String>,
     password: Option<String>,
     database: Option<String>,
+    schema: String,
+    reset: bool,
     migrations: Vec<Migration>,
     no_migrations: bool,
 }
@@ -1703,6 +1770,8 @@
             user: None,
             password: None,
             database: None,
+            schema: "hotshot".into(),
+            reset: false,
             migrations: vec![],
             no_migrations: false,
         }
@@ -1744,6 +1813,28 @@
         self
     }
 
+    /// Set the name of the schema to use for queries.
+    ///
+    /// The default schema is named `hotshot` and is created via the default migrations.
+    pub fn schema(mut self, schema: impl Into<String>) -> Self {
+        self.schema = schema.into();
+        self
+    }
+
+    /// Reset the schema on connection.
+    ///
+    /// When this [`Config`] is used to [`connect`](Self::connect) a [`SqlDataSource`], if this
+    /// option is set, the relevant [`schema`](Self::schema) will first be dropped and then
+    /// recreated, yielding a completely fresh instance of the query service.
+    ///
+    /// This is a particularly useful capability for development and staging environments. Still, it
+    /// must be used with extreme caution, as using this will irrevocably delete any data pertaining
+    /// to the query service in the database.
+    pub fn reset_schema(mut self) -> Self {
+        self.reset = true;
+        self
+    }
+
     /// Add custom migrations to run when connecting to the database.
     pub fn migrations(mut self, migrations: impl IntoIterator<Item = Migration>) -> Self {
         self.migrations.extend(migrations);
@@ -1776,6 +1867,13 @@
 /// off-the-shelf DBMS adminstration tools. The one exception is migrations, which are handled
 /// transparently by the [`SqlDataSource`].
 ///
+/// ## Schema
+///
+/// All the objects created and used by [`SqlDataSource`] are grouped under a schema for easy
+/// management. By default, the schema is named `hotshot`, and is created the first time a
+/// [`SqlDataSource`] is constructed. The name of the schema can be configured by setting
+/// [`Config::schema`].
+///
 /// ## Initialization
 ///
 /// When creating a [`SqlDataSource`], the caller can use [`Config`] to specify the host, user, and
@@ -1808,6 +1906,15 @@
 /// # ;
 /// ```
 ///
+/// ## Resetting
+///
+/// In general, resetting the database when necessary is left up to the administrator. However, for
+/// convenience, we do provide a [`reset_schema`](Config::reset_schema) option which can be used to
+/// wipe out existing state and create a fresh instance of the query service. This is particularly
+/// useful for development and staging environments. This function will permanently delete all
+/// tables associated with the schema used by this query service, but will not reset other schemas
+/// or database.
+///
 /// ## Migrations
 ///
 /// For the [`SqlDataSource`] to work, the database must be initialized with the appropriate schema,
@@ -2039,6 +2146,19 @@
             }
         }));
 
+        // Create or connect to the schema for this query service.
+        if config.reset {
+            client
+                .batch_execute(&format!("DROP SCHEMA IF EXISTS {} CASCADE", config.schema))
+                .await?;
+        }
+        client
+            .batch_execute(&format!("CREATE SCHEMA IF NOT EXISTS {}", config.schema))
+            .await?;
+        client
+            .batch_execute(&format!("SET search_path TO {}", config.schema))
+            .await?;
+
         // Get migrations and interleave with custom migrations, sorting by version number.
         validate_migrations(&mut config.migrations)?;
         let migrations =
@@ -2099,17 +2219,6 @@
 where
     Types: NodeType,
 {
-    /// Query the underlying SQL database.
-    pub async fn query<T, P>(&self, query: &T, params: P) -> Result<RowStream, Error>
-    where
-        T: ?Sized + ToStatement,
-        P: IntoIterator,
-        P::IntoIter: ExactSizeIterator,
-        P::Item: BorrowToSql,
-    {
-        Ok(self.client.query_raw(query, params).await?)
-    }
-
     /// Access the transaction which is accumulating all uncommitted changes to the data source.
     ///
     /// This can be used to manually group database modifications to custom state atomically with
@@ -2118,10 +2227,13 @@
     /// If there is no currently open transaction, a new transaction will be opened. No changes
     /// made through the transaction objeect returned by this method will be persisted until
     /// [`commit`](Self::commit) is called.
-    pub async fn transaction(&mut self) -> Result<Transaction<'_>, Error> {
+    pub async fn transaction(&mut self) -> QueryResult<Transaction<'_>> {
         if !self.tx_in_progress {
             // If there is no transaction in progress, open one.
-            self.client.batch_execute("BEGIN").await?;
+            self.client
+                .batch_execute("BEGIN")
+                .await
+                .map_err(postgres_err)?;
             self.tx_in_progress = true;
         }
         Ok(Transaction {
@@ -2130,6 +2242,15 @@
     }
 }
 
+impl<Types> Query for SqlDataSource<Types>
+where
+    Types: NodeType,
+{
+    fn client(&self) -> &Client {
+        &self.client
+    }
+}
+
 impl<Types> Drop for SqlDataSource<Types>
 where
     Types: NodeType,
@@ -2210,14 +2331,7 @@
             ResourceId::Hash(h) => ("hash = $1", Box::new(h.to_string())),
         };
         let query = format!("SELECT leaf, qc FROM leaf WHERE {where_clause}");
-        let row = self
-            .client
-            .query_opt(&query, &[&*param])
-            .await
-            .map_err(|err| QueryError::Error {
-                message: err.to_string(),
-            })?
-            .context(NotFoundSnafu)?;
+        let row = self.query_one(&query, [param]).await?;
         parse_leaf(row)
     }
 
@@ -2236,14 +2350,7 @@
               WHERE {where_clause}
               LIMIT 1"
         );
-        let row = self
-            .client
-            .query_opt(&query, &[&*param])
-            .await
-            .map_err(|err| QueryError::Error {
-                message: err.to_string(),
-            })?
-            .context(NotFoundSnafu)?;
+        let row = self.query_one(&query, [param]).await?;
         parse_block(row)
     }
 
@@ -2253,21 +2360,9 @@
     {
         let (where_clause, params) = bounds_to_where_clause(range, "height");
         let query = format!("SELECT leaf, qc FROM leaf {where_clause} ORDER BY height ASC");
-        let rows =
-            self.client
-                .query_raw(&query, params)
-                .await
-                .map_err(|err| QueryError::Error {
-                    message: err.to_string(),
-                })?;
-
-        Ok(rows
-            .map(|res| {
-                parse_leaf(res.map_err(|err| QueryError::Error {
-                    message: err.to_string(),
-                })?)
-            })
-            .boxed())
+        let rows = self.query(&query, params).await?;
+
+        Ok(rows.map(|res| parse_leaf(res?)).boxed())
     }
 
     async fn get_block_range<R>(&self, range: R) -> QueryResult<Self::BlockRange<'_, R>>
@@ -2282,21 +2377,9 @@
               {where_clause}
               ORDER BY h.height ASC"
         );
-        let rows =
-            self.client
-                .query_raw(&query, params)
-                .await
-                .map_err(|err| QueryError::Error {
-                    message: err.to_string(),
-                })?;
-
-        Ok(rows
-            .map(|res| {
-                parse_block(res.map_err(|err| QueryError::Error {
-                    message: err.to_string(),
-                })?)
-            })
-            .boxed())
+        let rows = self.query(&query, params).await?;
+
+        Ok(rows.map(|res| parse_block(res?)).boxed())
     }
 
     async fn get_block_with_transaction(
@@ -2314,14 +2397,7 @@
                 ORDER BY t.id ASC
                 LIMIT 1"
         );
-        let row = self
-            .client
-            .query_opt(&query, &[&hash.to_string()])
-            .await
-            .map_err(|err| QueryError::Error {
-                message: err.to_string(),
-            })?
-            .context(NotFoundSnafu)?;
+        let row = self.query_one(&query, &[&hash.to_string()]).await?;
 
         // Extract the transaction index.
         let index = row.try_get("tx_index").map_err(|err| QueryError::Error {
@@ -2349,21 +2425,8 @@
             // recent leaves, so order by descending height.
             query = format!("{query} ORDER BY height DESC limit {limit}");
         }
-        let rows = self
-            .client
-            .query_raw(&query, &[&proposer.to_string()])
-            .await
-            .map_err(|err| QueryError::Error {
-                message: err.to_string(),
-            })?;
-        let mut leaves: Vec<_> = rows
-            .map(|res| {
-                parse_leaf(res.map_err(|err| QueryError::Error {
-                    message: err.to_string(),
-                })?)
-            })
-            .try_collect()
-            .await?;
+        let rows = self.query(&query, &[&proposer.to_string()]).await?;
+        let mut leaves: Vec<_> = rows.map(|res| parse_leaf(res?)).try_collect().await?;
 
         if limit.is_some() {
             // If there was a limit, we selected the leaves in descending order to get the most
@@ -2376,13 +2439,7 @@
 
     async fn count_proposals(&self, proposer: &EncodedPublicKey) -> QueryResult<usize> {
         let query = "SELECT count(*) FROM leaf WHERE proposer = $1";
-        let row = self
-            .client
-            .query_one(query, &[&proposer.to_string()])
-            .await
-            .map_err(|err| QueryError::Error {
-                message: err.to_string(),
-            })?;
+        let row = self.query_one(query, &[&proposer.to_string()]).await?;
         let count: i64 = row.get(0);
         Ok(count as usize)
     }
@@ -2461,14 +2518,8 @@
         ));
 
         // Grab a transaction and execute all the statements.
-        let mut tx = self.transaction().await.map_err(|err| QueryError::Error {
-            message: err.to_string(),
-        })?;
-        tx.execute_many(stmts)
-            .await
-            .map_err(|err| QueryError::Error {
-                message: err.to_string(),
-            })?;
+        let mut tx = self.transaction().await?;
+        tx.execute_many(stmts).await?;
 
         self.leaf_stream.push(leaf);
         Ok(())
@@ -2522,14 +2573,8 @@
             ));
         }
 
-        let mut tx = self.transaction().await.map_err(|err| QueryError::Error {
-            message: err.to_string(),
-        })?;
-        tx.execute_many(stmts)
-            .await
-            .map_err(|err| QueryError::Error {
-                message: err.to_string(),
-            })?;
+        let mut tx = self.transaction().await?;
+        tx.execute_many(stmts).await?;
 
         self.block_stream.push(block);
         Ok(())
@@ -2543,13 +2588,7 @@
 {
     async fn block_height(&self) -> QueryResult<usize> {
         let query = "SELECT max(height) FROM header";
-        let row = self
-            .client
-            .query_one(query, &[])
-            .await
-            .map_err(|err| QueryError::Error {
-                message: err.to_string(),
-            })?;
+        let row = self.query_one_static(query).await?;
         let height: Option<i64> = row.get(0);
         match height {
             Some(height) => {
@@ -2586,37 +2625,28 @@
 }
 
 impl<'a> Transaction<'a> {
-    /// Query the underlying SQL database.
-    ///
-    /// The results will reflect the state after the statements thus far added to this transaction
-    /// have been applied, even though those effects have not been committed to the database yet.
-    pub async fn query<T, P>(&self, query: &T, params: P) -> Result<RowStream, Error>
-    where
-        T: ?Sized + ToStatement,
-        P: IntoIterator,
-        P::IntoIter: ExactSizeIterator,
-        P::Item: BorrowToSql,
-    {
-        Ok(self.client.query_raw(query, params).await?)
-    }
-
     /// Execute a statement against the underlying database.
     ///
     /// The results of the statement will be reflected immediately in future statements made within
     /// this transaction, but will not be reflected in the underlying database until the transaction
     /// is committed with [`SqlDataSource::commit`].
-    pub async fn execute<T, P>(&mut self, statement: &T, params: P) -> Result<(), Error>
+    pub async fn execute<T, P>(&mut self, statement: &T, params: P) -> QueryResult<()>
     where
         T: ?Sized + ToStatement,
         P: IntoIterator,
         P::IntoIter: ExactSizeIterator,
         P::Item: BorrowToSql,
     {
-        self.client.execute_raw(statement, params).await?;
+        self.client
+            .execute_raw(statement, params)
+            .await
+            .map_err(|err| QueryError::Error {
+                message: err.to_string(),
+            })?;
         Ok(())
     }
 
-    pub async fn execute_many<S, T, P>(&mut self, statements: S) -> Result<(), Error>
+    pub async fn execute_many<S, T, P>(&mut self, statements: S) -> QueryResult<()>
     where
         S: IntoIterator<Item = (T, P)>,
         T: ToStatement,
@@ -2631,6 +2661,95 @@
     }
 }
 
+/// Query the underlying SQL database.
+///
+/// The results will reflect the state after the statements thus far added to this transaction have
+/// been applied, even though those effects have not been committed to the database yet.
+impl<'a> Query for Transaction<'a> {
+    fn client(&self) -> &Client {
+        self.client
+    }
+}
+
+#[async_trait]
+pub trait Query {
+    fn client(&self) -> &Client;
+
+    // Query the underlying SQL database.
+    async fn query<T, P>(
+        &self,
+        query: &T,
+        params: P,
+    ) -> QueryResult<BoxStream<'static, QueryResult<Row>>>
+    where
+        T: ?Sized + ToStatement + Sync,
+        P: IntoIterator + Send,
+        P::IntoIter: ExactSizeIterator,
+        P::Item: BorrowToSql,
+    {
+        Ok(self
+            .client()
+            .query_raw(query, params)
+            .await
+            .map_err(postgres_err)?
+            .map_err(postgres_err)
+            .boxed())
+    }
+
+    /// Query the underlying SQL database with no parameters.
+    async fn query_static<T>(&self, query: &T) -> QueryResult<BoxStream<'static, QueryResult<Row>>>
+    where
+        T: ?Sized + ToStatement + Sync,
+    {
+        self.query::<T, [i64; 0]>(query, []).await
+    }
+
+    /// Query the underlying SQL database, returning exactly one result or failing.
+    async fn query_one<T, P>(&self, query: &T, params: P) -> QueryResult<Row>
+    where
+        T: ?Sized + ToStatement + Sync,
+        P: IntoIterator + Send,
+        P::IntoIter: ExactSizeIterator,
+        P::Item: BorrowToSql,
+    {
+        self.query_opt(query, params).await?.context(NotFoundSnafu)
+    }
+
+    /// Query the underlying SQL database with no parameters, returning exactly one result or
+    /// failing.
+    async fn query_one_static<T>(&self, query: &T) -> QueryResult<Row>
+    where
+        T: ?Sized + ToStatement + Sync,
+    {
+        self.query_one::<T, [i64; 0]>(query, []).await
+    }
+
+    /// Query the underlying SQL database, returning zero or one results.
+    async fn query_opt<T, P>(&self, query: &T, params: P) -> QueryResult<Option<Row>>
+    where
+        T: ?Sized + ToStatement + Sync,
+        P: IntoIterator + Send,
+        P::IntoIter: ExactSizeIterator,
+        P::Item: BorrowToSql,
+    {
+        self.query(query, params).await?.try_next().await
+    }
+
+    /// Query the underlying SQL database with no parameters, returning zero or one results.
+    async fn query_opt_static<T>(&self, query: &T) -> QueryResult<Option<Row>>
+    where
+        T: ?Sized + ToStatement + Sync,
+    {
+        self.query_opt::<T, [i64; 0]>(query, []).await
+    }
+}
+
+fn postgres_err(err: tokio_postgres::Error) -> QueryError {
+    QueryError::Error {
+        message: err.to_string(),
+    }
+}
+
 fn parse_leaf<Types>(row: Row) -> QueryResult<LeafQueryData<Types>>
 where
     Types: NodeType,
@@ -2933,6 +3052,17 @@
                 .unwrap()
         }
 
+        async fn reset(tmp_db: &Self::Storage) -> Self {
+            Config::default()
+                .user("postgres")
+                .password("password")
+                .port(tmp_db.port())
+                .reset_schema()
+                .connect()
+                .await
+                .unwrap()
+        }
+
         async fn handle_event(&mut self, event: &Event<MockTypes>) {
             self.update(event).await.unwrap();
             self.commit().await.unwrap();