hotshot_contract_adapter/bindings/
plonk_verifier.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library BN254 {
6    type BaseField is uint256;
7    type ScalarField is uint256;
8    struct G1Point { BaseField x; BaseField y; }
9}
10```*/
11#[allow(
12    non_camel_case_types,
13    non_snake_case,
14    clippy::pub_underscore_fields,
15    clippy::style,
16    clippy::empty_structs_with_brackets
17)]
18pub mod BN254 {
19    use super::*;
20    use alloy::sol_types as alloy_sol_types;
21    #[derive(serde::Serialize, serde::Deserialize)]
22    #[derive(Default, Debug, PartialEq, Eq, Hash)]
23    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
24    #[derive(Clone)]
25    pub struct BaseField(alloy::sol_types::private::primitives::aliases::U256);
26    const _: () = {
27        use alloy::sol_types as alloy_sol_types;
28        #[automatically_derived]
29        impl alloy_sol_types::private::SolTypeValue<BaseField>
30        for alloy::sol_types::private::primitives::aliases::U256 {
31            #[inline]
32            fn stv_to_tokens(
33                &self,
34            ) -> <alloy::sol_types::sol_data::Uint<
35                256,
36            > as alloy_sol_types::SolType>::Token<'_> {
37                alloy_sol_types::private::SolTypeValue::<
38                    alloy::sol_types::sol_data::Uint<256>,
39                >::stv_to_tokens(self)
40            }
41            #[inline]
42            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
43                <alloy::sol_types::sol_data::Uint<
44                    256,
45                > as alloy_sol_types::SolType>::tokenize(self)
46                    .0
47            }
48            #[inline]
49            fn stv_abi_encode_packed_to(
50                &self,
51                out: &mut alloy_sol_types::private::Vec<u8>,
52            ) {
53                <alloy::sol_types::sol_data::Uint<
54                    256,
55                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
56            }
57            #[inline]
58            fn stv_abi_packed_encoded_size(&self) -> usize {
59                <alloy::sol_types::sol_data::Uint<
60                    256,
61                > as alloy_sol_types::SolType>::abi_encoded_size(self)
62            }
63        }
64        impl BaseField {
65            /// The Solidity type name.
66            pub const NAME: &'static str = stringify!(@ name);
67            /// Convert from the underlying value type.
68            #[inline]
69            pub const fn from_underlying(
70                value: alloy::sol_types::private::primitives::aliases::U256,
71            ) -> Self {
72                Self(value)
73            }
74            /// Return the underlying value.
75            #[inline]
76            pub const fn into_underlying(
77                self,
78            ) -> alloy::sol_types::private::primitives::aliases::U256 {
79                self.0
80            }
81            /// Return the single encoding of this value, delegating to the
82            /// underlying type.
83            #[inline]
84            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
85                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
86            }
87            /// Return the packed encoding of this value, delegating to the
88            /// underlying type.
89            #[inline]
90            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
91                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
92            }
93        }
94        #[automatically_derived]
95        impl From<alloy::sol_types::private::primitives::aliases::U256> for BaseField {
96            fn from(
97                value: alloy::sol_types::private::primitives::aliases::U256,
98            ) -> Self {
99                Self::from_underlying(value)
100            }
101        }
102        #[automatically_derived]
103        impl From<BaseField> for alloy::sol_types::private::primitives::aliases::U256 {
104            fn from(value: BaseField) -> Self {
105                value.into_underlying()
106            }
107        }
108        #[automatically_derived]
109        impl alloy_sol_types::SolType for BaseField {
110            type RustType = alloy::sol_types::private::primitives::aliases::U256;
111            type Token<'a> = <alloy::sol_types::sol_data::Uint<
112                256,
113            > as alloy_sol_types::SolType>::Token<'a>;
114            const SOL_NAME: &'static str = Self::NAME;
115            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
116                256,
117            > as alloy_sol_types::SolType>::ENCODED_SIZE;
118            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
119                256,
120            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
121            #[inline]
122            fn valid_token(token: &Self::Token<'_>) -> bool {
123                Self::type_check(token).is_ok()
124            }
125            #[inline]
126            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
127                <alloy::sol_types::sol_data::Uint<
128                    256,
129                > as alloy_sol_types::SolType>::type_check(token)
130            }
131            #[inline]
132            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
133                <alloy::sol_types::sol_data::Uint<
134                    256,
135                > as alloy_sol_types::SolType>::detokenize(token)
136            }
137        }
138        #[automatically_derived]
139        impl alloy_sol_types::EventTopic for BaseField {
140            #[inline]
141            fn topic_preimage_length(rust: &Self::RustType) -> usize {
142                <alloy::sol_types::sol_data::Uint<
143                    256,
144                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
145            }
146            #[inline]
147            fn encode_topic_preimage(
148                rust: &Self::RustType,
149                out: &mut alloy_sol_types::private::Vec<u8>,
150            ) {
151                <alloy::sol_types::sol_data::Uint<
152                    256,
153                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
154            }
155            #[inline]
156            fn encode_topic(
157                rust: &Self::RustType,
158            ) -> alloy_sol_types::abi::token::WordToken {
159                <alloy::sol_types::sol_data::Uint<
160                    256,
161                > as alloy_sol_types::EventTopic>::encode_topic(rust)
162            }
163        }
164    };
165    #[derive(serde::Serialize, serde::Deserialize)]
166    #[derive(Default, Debug, PartialEq, Eq, Hash)]
167    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
168    #[derive(Clone)]
169    pub struct ScalarField(alloy::sol_types::private::primitives::aliases::U256);
170    const _: () = {
171        use alloy::sol_types as alloy_sol_types;
172        #[automatically_derived]
173        impl alloy_sol_types::private::SolTypeValue<ScalarField>
174        for alloy::sol_types::private::primitives::aliases::U256 {
175            #[inline]
176            fn stv_to_tokens(
177                &self,
178            ) -> <alloy::sol_types::sol_data::Uint<
179                256,
180            > as alloy_sol_types::SolType>::Token<'_> {
181                alloy_sol_types::private::SolTypeValue::<
182                    alloy::sol_types::sol_data::Uint<256>,
183                >::stv_to_tokens(self)
184            }
185            #[inline]
186            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
187                <alloy::sol_types::sol_data::Uint<
188                    256,
189                > as alloy_sol_types::SolType>::tokenize(self)
190                    .0
191            }
192            #[inline]
193            fn stv_abi_encode_packed_to(
194                &self,
195                out: &mut alloy_sol_types::private::Vec<u8>,
196            ) {
197                <alloy::sol_types::sol_data::Uint<
198                    256,
199                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
200            }
201            #[inline]
202            fn stv_abi_packed_encoded_size(&self) -> usize {
203                <alloy::sol_types::sol_data::Uint<
204                    256,
205                > as alloy_sol_types::SolType>::abi_encoded_size(self)
206            }
207        }
208        impl ScalarField {
209            /// The Solidity type name.
210            pub const NAME: &'static str = stringify!(@ name);
211            /// Convert from the underlying value type.
212            #[inline]
213            pub const fn from_underlying(
214                value: alloy::sol_types::private::primitives::aliases::U256,
215            ) -> Self {
216                Self(value)
217            }
218            /// Return the underlying value.
219            #[inline]
220            pub const fn into_underlying(
221                self,
222            ) -> alloy::sol_types::private::primitives::aliases::U256 {
223                self.0
224            }
225            /// Return the single encoding of this value, delegating to the
226            /// underlying type.
227            #[inline]
228            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
229                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
230            }
231            /// Return the packed encoding of this value, delegating to the
232            /// underlying type.
233            #[inline]
234            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
235                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
236            }
237        }
238        #[automatically_derived]
239        impl From<alloy::sol_types::private::primitives::aliases::U256> for ScalarField {
240            fn from(
241                value: alloy::sol_types::private::primitives::aliases::U256,
242            ) -> Self {
243                Self::from_underlying(value)
244            }
245        }
246        #[automatically_derived]
247        impl From<ScalarField> for alloy::sol_types::private::primitives::aliases::U256 {
248            fn from(value: ScalarField) -> Self {
249                value.into_underlying()
250            }
251        }
252        #[automatically_derived]
253        impl alloy_sol_types::SolType for ScalarField {
254            type RustType = alloy::sol_types::private::primitives::aliases::U256;
255            type Token<'a> = <alloy::sol_types::sol_data::Uint<
256                256,
257            > as alloy_sol_types::SolType>::Token<'a>;
258            const SOL_NAME: &'static str = Self::NAME;
259            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
260                256,
261            > as alloy_sol_types::SolType>::ENCODED_SIZE;
262            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
263                256,
264            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
265            #[inline]
266            fn valid_token(token: &Self::Token<'_>) -> bool {
267                Self::type_check(token).is_ok()
268            }
269            #[inline]
270            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
271                <alloy::sol_types::sol_data::Uint<
272                    256,
273                > as alloy_sol_types::SolType>::type_check(token)
274            }
275            #[inline]
276            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
277                <alloy::sol_types::sol_data::Uint<
278                    256,
279                > as alloy_sol_types::SolType>::detokenize(token)
280            }
281        }
282        #[automatically_derived]
283        impl alloy_sol_types::EventTopic for ScalarField {
284            #[inline]
285            fn topic_preimage_length(rust: &Self::RustType) -> usize {
286                <alloy::sol_types::sol_data::Uint<
287                    256,
288                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
289            }
290            #[inline]
291            fn encode_topic_preimage(
292                rust: &Self::RustType,
293                out: &mut alloy_sol_types::private::Vec<u8>,
294            ) {
295                <alloy::sol_types::sol_data::Uint<
296                    256,
297                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
298            }
299            #[inline]
300            fn encode_topic(
301                rust: &Self::RustType,
302            ) -> alloy_sol_types::abi::token::WordToken {
303                <alloy::sol_types::sol_data::Uint<
304                    256,
305                > as alloy_sol_types::EventTopic>::encode_topic(rust)
306            }
307        }
308    };
309    #[derive(serde::Serialize, serde::Deserialize)]
310    #[derive(Default, Debug, PartialEq, Eq, Hash)]
311    /**```solidity
312struct G1Point { BaseField x; BaseField y; }
313```*/
314    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
315    #[derive(Clone)]
316    pub struct G1Point {
317        #[allow(missing_docs)]
318        pub x: <BaseField as alloy::sol_types::SolType>::RustType,
319        #[allow(missing_docs)]
320        pub y: <BaseField as alloy::sol_types::SolType>::RustType,
321    }
322    #[allow(
323        non_camel_case_types,
324        non_snake_case,
325        clippy::pub_underscore_fields,
326        clippy::style
327    )]
328    const _: () = {
329        use alloy::sol_types as alloy_sol_types;
330        #[doc(hidden)]
331        #[allow(dead_code)]
332        type UnderlyingSolTuple<'a> = (BaseField, BaseField);
333        #[doc(hidden)]
334        type UnderlyingRustTuple<'a> = (
335            <BaseField as alloy::sol_types::SolType>::RustType,
336            <BaseField as alloy::sol_types::SolType>::RustType,
337        );
338        #[cfg(test)]
339        #[allow(dead_code, unreachable_patterns)]
340        fn _type_assertion(
341            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
342        ) {
343            match _t {
344                alloy_sol_types::private::AssertTypeEq::<
345                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
346                >(_) => {}
347            }
348        }
349        #[automatically_derived]
350        #[doc(hidden)]
351        impl ::core::convert::From<G1Point> for UnderlyingRustTuple<'_> {
352            fn from(value: G1Point) -> Self {
353                (value.x, value.y)
354            }
355        }
356        #[automatically_derived]
357        #[doc(hidden)]
358        impl ::core::convert::From<UnderlyingRustTuple<'_>> for G1Point {
359            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
360                Self { x: tuple.0, y: tuple.1 }
361            }
362        }
363        #[automatically_derived]
364        impl alloy_sol_types::SolValue for G1Point {
365            type SolType = Self;
366        }
367        #[automatically_derived]
368        impl alloy_sol_types::private::SolTypeValue<Self> for G1Point {
369            #[inline]
370            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
371                (
372                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.x),
373                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.y),
374                )
375            }
376            #[inline]
377            fn stv_abi_encoded_size(&self) -> usize {
378                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
379                    return size;
380                }
381                let tuple = <UnderlyingRustTuple<
382                    '_,
383                > as ::core::convert::From<Self>>::from(self.clone());
384                <UnderlyingSolTuple<
385                    '_,
386                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
387            }
388            #[inline]
389            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
390                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
391            }
392            #[inline]
393            fn stv_abi_encode_packed_to(
394                &self,
395                out: &mut alloy_sol_types::private::Vec<u8>,
396            ) {
397                let tuple = <UnderlyingRustTuple<
398                    '_,
399                > as ::core::convert::From<Self>>::from(self.clone());
400                <UnderlyingSolTuple<
401                    '_,
402                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
403            }
404            #[inline]
405            fn stv_abi_packed_encoded_size(&self) -> usize {
406                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
407                    return size;
408                }
409                let tuple = <UnderlyingRustTuple<
410                    '_,
411                > as ::core::convert::From<Self>>::from(self.clone());
412                <UnderlyingSolTuple<
413                    '_,
414                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
415            }
416        }
417        #[automatically_derived]
418        impl alloy_sol_types::SolType for G1Point {
419            type RustType = Self;
420            type Token<'a> = <UnderlyingSolTuple<
421                'a,
422            > as alloy_sol_types::SolType>::Token<'a>;
423            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
424            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
425                '_,
426            > as alloy_sol_types::SolType>::ENCODED_SIZE;
427            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
428                '_,
429            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
430            #[inline]
431            fn valid_token(token: &Self::Token<'_>) -> bool {
432                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
433            }
434            #[inline]
435            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
436                let tuple = <UnderlyingSolTuple<
437                    '_,
438                > as alloy_sol_types::SolType>::detokenize(token);
439                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
440            }
441        }
442        #[automatically_derived]
443        impl alloy_sol_types::SolStruct for G1Point {
444            const NAME: &'static str = "G1Point";
445            #[inline]
446            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
447                alloy_sol_types::private::Cow::Borrowed("G1Point(uint256 x,uint256 y)")
448            }
449            #[inline]
450            fn eip712_components() -> alloy_sol_types::private::Vec<
451                alloy_sol_types::private::Cow<'static, str>,
452            > {
453                alloy_sol_types::private::Vec::new()
454            }
455            #[inline]
456            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
457                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
458            }
459            #[inline]
460            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
461                [
462                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.x).0,
463                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.y).0,
464                ]
465                    .concat()
466            }
467        }
468        #[automatically_derived]
469        impl alloy_sol_types::EventTopic for G1Point {
470            #[inline]
471            fn topic_preimage_length(rust: &Self::RustType) -> usize {
472                0usize
473                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(
474                        &rust.x,
475                    )
476                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(
477                        &rust.y,
478                    )
479            }
480            #[inline]
481            fn encode_topic_preimage(
482                rust: &Self::RustType,
483                out: &mut alloy_sol_types::private::Vec<u8>,
484            ) {
485                out.reserve(
486                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
487                );
488                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(
489                    &rust.x,
490                    out,
491                );
492                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(
493                    &rust.y,
494                    out,
495                );
496            }
497            #[inline]
498            fn encode_topic(
499                rust: &Self::RustType,
500            ) -> alloy_sol_types::abi::token::WordToken {
501                let mut out = alloy_sol_types::private::Vec::new();
502                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
503                    rust,
504                    &mut out,
505                );
506                alloy_sol_types::abi::token::WordToken(
507                    alloy_sol_types::private::keccak256(out),
508                )
509            }
510        }
511    };
512    use alloy::contract as alloy_contract;
513    /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
514
515See the [wrapper's documentation](`BN254Instance`) for more details.*/
516    #[inline]
517    pub const fn new<
518        P: alloy_contract::private::Provider<N>,
519        N: alloy_contract::private::Network,
520    >(address: alloy_sol_types::private::Address, __provider: P) -> BN254Instance<P, N> {
521        BN254Instance::<P, N>::new(address, __provider)
522    }
523    /**A [`BN254`](self) instance.
524
525Contains type-safe methods for interacting with an on-chain instance of the
526[`BN254`](self) contract located at a given `address`, using a given
527provider `P`.
528
529If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
530documentation on how to provide it), the `deploy` and `deploy_builder` methods can
531be used to deploy a new instance of the contract.
532
533See the [module-level documentation](self) for all the available methods.*/
534    #[derive(Clone)]
535    pub struct BN254Instance<P, N = alloy_contract::private::Ethereum> {
536        address: alloy_sol_types::private::Address,
537        provider: P,
538        _network: ::core::marker::PhantomData<N>,
539    }
540    #[automatically_derived]
541    impl<P, N> ::core::fmt::Debug for BN254Instance<P, N> {
542        #[inline]
543        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
544            f.debug_tuple("BN254Instance").field(&self.address).finish()
545        }
546    }
547    /// Instantiation and getters/setters.
548    impl<
549        P: alloy_contract::private::Provider<N>,
550        N: alloy_contract::private::Network,
551    > BN254Instance<P, N> {
552        /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
553
554See the [wrapper's documentation](`BN254Instance`) for more details.*/
555        #[inline]
556        pub const fn new(
557            address: alloy_sol_types::private::Address,
558            __provider: P,
559        ) -> Self {
560            Self {
561                address,
562                provider: __provider,
563                _network: ::core::marker::PhantomData,
564            }
565        }
566        /// Returns a reference to the address.
567        #[inline]
568        pub const fn address(&self) -> &alloy_sol_types::private::Address {
569            &self.address
570        }
571        /// Sets the address.
572        #[inline]
573        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
574            self.address = address;
575        }
576        /// Sets the address and returns `self`.
577        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
578            self.set_address(address);
579            self
580        }
581        /// Returns a reference to the provider.
582        #[inline]
583        pub const fn provider(&self) -> &P {
584            &self.provider
585        }
586    }
587    impl<P: ::core::clone::Clone, N> BN254Instance<&P, N> {
588        /// Clones the provider and returns a new instance with the cloned provider.
589        #[inline]
590        pub fn with_cloned_provider(self) -> BN254Instance<P, N> {
591            BN254Instance {
592                address: self.address,
593                provider: ::core::clone::Clone::clone(&self.provider),
594                _network: ::core::marker::PhantomData,
595            }
596        }
597    }
598    /// Function calls.
599    impl<
600        P: alloy_contract::private::Provider<N>,
601        N: alloy_contract::private::Network,
602    > BN254Instance<P, N> {
603        /// Creates a new call builder using this contract instance's provider and address.
604        ///
605        /// Note that the call can be any function call, not just those defined in this
606        /// contract. Prefer using the other methods for building type-safe contract calls.
607        pub fn call_builder<C: alloy_sol_types::SolCall>(
608            &self,
609            call: &C,
610        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
611            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
612        }
613    }
614    /// Event filters.
615    impl<
616        P: alloy_contract::private::Provider<N>,
617        N: alloy_contract::private::Network,
618    > BN254Instance<P, N> {
619        /// Creates a new event filter using this contract instance's provider and address.
620        ///
621        /// Note that the type can be any event, not just those defined in this contract.
622        /// Prefer using the other methods for building type-safe event filters.
623        pub fn event_filter<E: alloy_sol_types::SolEvent>(
624            &self,
625        ) -> alloy_contract::Event<&P, E, N> {
626            alloy_contract::Event::new_sol(&self.provider, &self.address)
627        }
628    }
629}
630///Module containing a contract's types and functions.
631/**
632
633```solidity
634library IPlonkVerifier {
635    struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
636    struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
637}
638```*/
639#[allow(
640    non_camel_case_types,
641    non_snake_case,
642    clippy::pub_underscore_fields,
643    clippy::style,
644    clippy::empty_structs_with_brackets
645)]
646pub mod IPlonkVerifier {
647    use super::*;
648    use alloy::sol_types as alloy_sol_types;
649    #[derive(serde::Serialize, serde::Deserialize)]
650    #[derive()]
651    /**```solidity
652struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
653```*/
654    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
655    #[derive(Clone)]
656    pub struct PlonkProof {
657        #[allow(missing_docs)]
658        pub wire0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
659        #[allow(missing_docs)]
660        pub wire1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
661        #[allow(missing_docs)]
662        pub wire2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
663        #[allow(missing_docs)]
664        pub wire3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
665        #[allow(missing_docs)]
666        pub wire4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
667        #[allow(missing_docs)]
668        pub prodPerm: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
669        #[allow(missing_docs)]
670        pub split0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
671        #[allow(missing_docs)]
672        pub split1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
673        #[allow(missing_docs)]
674        pub split2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
675        #[allow(missing_docs)]
676        pub split3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
677        #[allow(missing_docs)]
678        pub split4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
679        #[allow(missing_docs)]
680        pub zeta: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
681        #[allow(missing_docs)]
682        pub zetaOmega: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
683        #[allow(missing_docs)]
684        pub wireEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
685        #[allow(missing_docs)]
686        pub wireEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
687        #[allow(missing_docs)]
688        pub wireEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
689        #[allow(missing_docs)]
690        pub wireEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
691        #[allow(missing_docs)]
692        pub wireEval4: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
693        #[allow(missing_docs)]
694        pub sigmaEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
695        #[allow(missing_docs)]
696        pub sigmaEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
697        #[allow(missing_docs)]
698        pub sigmaEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
699        #[allow(missing_docs)]
700        pub sigmaEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
701        #[allow(missing_docs)]
702        pub prodPermZetaOmegaEval: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
703    }
704    #[allow(
705        non_camel_case_types,
706        non_snake_case,
707        clippy::pub_underscore_fields,
708        clippy::style
709    )]
710    const _: () = {
711        use alloy::sol_types as alloy_sol_types;
712        #[doc(hidden)]
713        #[allow(dead_code)]
714        type UnderlyingSolTuple<'a> = (
715            BN254::G1Point,
716            BN254::G1Point,
717            BN254::G1Point,
718            BN254::G1Point,
719            BN254::G1Point,
720            BN254::G1Point,
721            BN254::G1Point,
722            BN254::G1Point,
723            BN254::G1Point,
724            BN254::G1Point,
725            BN254::G1Point,
726            BN254::G1Point,
727            BN254::G1Point,
728            BN254::ScalarField,
729            BN254::ScalarField,
730            BN254::ScalarField,
731            BN254::ScalarField,
732            BN254::ScalarField,
733            BN254::ScalarField,
734            BN254::ScalarField,
735            BN254::ScalarField,
736            BN254::ScalarField,
737            BN254::ScalarField,
738        );
739        #[doc(hidden)]
740        type UnderlyingRustTuple<'a> = (
741            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
742            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
743            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
744            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
745            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
746            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
747            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
748            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
749            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
750            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
751            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
752            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
753            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
754            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
755            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
756            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
757            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
758            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
759            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
760            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
761            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
762            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
763            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
764        );
765        #[cfg(test)]
766        #[allow(dead_code, unreachable_patterns)]
767        fn _type_assertion(
768            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
769        ) {
770            match _t {
771                alloy_sol_types::private::AssertTypeEq::<
772                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
773                >(_) => {}
774            }
775        }
776        #[automatically_derived]
777        #[doc(hidden)]
778        impl ::core::convert::From<PlonkProof> for UnderlyingRustTuple<'_> {
779            fn from(value: PlonkProof) -> Self {
780                (
781                    value.wire0,
782                    value.wire1,
783                    value.wire2,
784                    value.wire3,
785                    value.wire4,
786                    value.prodPerm,
787                    value.split0,
788                    value.split1,
789                    value.split2,
790                    value.split3,
791                    value.split4,
792                    value.zeta,
793                    value.zetaOmega,
794                    value.wireEval0,
795                    value.wireEval1,
796                    value.wireEval2,
797                    value.wireEval3,
798                    value.wireEval4,
799                    value.sigmaEval0,
800                    value.sigmaEval1,
801                    value.sigmaEval2,
802                    value.sigmaEval3,
803                    value.prodPermZetaOmegaEval,
804                )
805            }
806        }
807        #[automatically_derived]
808        #[doc(hidden)]
809        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PlonkProof {
810            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
811                Self {
812                    wire0: tuple.0,
813                    wire1: tuple.1,
814                    wire2: tuple.2,
815                    wire3: tuple.3,
816                    wire4: tuple.4,
817                    prodPerm: tuple.5,
818                    split0: tuple.6,
819                    split1: tuple.7,
820                    split2: tuple.8,
821                    split3: tuple.9,
822                    split4: tuple.10,
823                    zeta: tuple.11,
824                    zetaOmega: tuple.12,
825                    wireEval0: tuple.13,
826                    wireEval1: tuple.14,
827                    wireEval2: tuple.15,
828                    wireEval3: tuple.16,
829                    wireEval4: tuple.17,
830                    sigmaEval0: tuple.18,
831                    sigmaEval1: tuple.19,
832                    sigmaEval2: tuple.20,
833                    sigmaEval3: tuple.21,
834                    prodPermZetaOmegaEval: tuple.22,
835                }
836            }
837        }
838        #[automatically_derived]
839        impl alloy_sol_types::SolValue for PlonkProof {
840            type SolType = Self;
841        }
842        #[automatically_derived]
843        impl alloy_sol_types::private::SolTypeValue<Self> for PlonkProof {
844            #[inline]
845            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
846                (
847                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire0),
848                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire1),
849                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire2),
850                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire3),
851                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire4),
852                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(
853                        &self.prodPerm,
854                    ),
855                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split0),
856                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split1),
857                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split2),
858                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split3),
859                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split4),
860                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.zeta),
861                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(
862                        &self.zetaOmega,
863                    ),
864                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
865                        &self.wireEval0,
866                    ),
867                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
868                        &self.wireEval1,
869                    ),
870                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
871                        &self.wireEval2,
872                    ),
873                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
874                        &self.wireEval3,
875                    ),
876                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
877                        &self.wireEval4,
878                    ),
879                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
880                        &self.sigmaEval0,
881                    ),
882                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
883                        &self.sigmaEval1,
884                    ),
885                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
886                        &self.sigmaEval2,
887                    ),
888                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
889                        &self.sigmaEval3,
890                    ),
891                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
892                        &self.prodPermZetaOmegaEval,
893                    ),
894                )
895            }
896            #[inline]
897            fn stv_abi_encoded_size(&self) -> usize {
898                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
899                    return size;
900                }
901                let tuple = <UnderlyingRustTuple<
902                    '_,
903                > as ::core::convert::From<Self>>::from(self.clone());
904                <UnderlyingSolTuple<
905                    '_,
906                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
907            }
908            #[inline]
909            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
910                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
911            }
912            #[inline]
913            fn stv_abi_encode_packed_to(
914                &self,
915                out: &mut alloy_sol_types::private::Vec<u8>,
916            ) {
917                let tuple = <UnderlyingRustTuple<
918                    '_,
919                > as ::core::convert::From<Self>>::from(self.clone());
920                <UnderlyingSolTuple<
921                    '_,
922                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
923            }
924            #[inline]
925            fn stv_abi_packed_encoded_size(&self) -> usize {
926                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
927                    return size;
928                }
929                let tuple = <UnderlyingRustTuple<
930                    '_,
931                > as ::core::convert::From<Self>>::from(self.clone());
932                <UnderlyingSolTuple<
933                    '_,
934                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
935            }
936        }
937        #[automatically_derived]
938        impl alloy_sol_types::SolType for PlonkProof {
939            type RustType = Self;
940            type Token<'a> = <UnderlyingSolTuple<
941                'a,
942            > as alloy_sol_types::SolType>::Token<'a>;
943            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
944            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
945                '_,
946            > as alloy_sol_types::SolType>::ENCODED_SIZE;
947            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
948                '_,
949            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
950            #[inline]
951            fn valid_token(token: &Self::Token<'_>) -> bool {
952                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
953            }
954            #[inline]
955            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
956                let tuple = <UnderlyingSolTuple<
957                    '_,
958                > as alloy_sol_types::SolType>::detokenize(token);
959                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
960            }
961        }
962        #[automatically_derived]
963        impl alloy_sol_types::SolStruct for PlonkProof {
964            const NAME: &'static str = "PlonkProof";
965            #[inline]
966            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
967                alloy_sol_types::private::Cow::Borrowed(
968                    "PlonkProof(G1Point wire0,G1Point wire1,G1Point wire2,G1Point wire3,G1Point wire4,G1Point prodPerm,G1Point split0,G1Point split1,G1Point split2,G1Point split3,G1Point split4,G1Point zeta,G1Point zetaOmega,uint256 wireEval0,uint256 wireEval1,uint256 wireEval2,uint256 wireEval3,uint256 wireEval4,uint256 sigmaEval0,uint256 sigmaEval1,uint256 sigmaEval2,uint256 sigmaEval3,uint256 prodPermZetaOmegaEval)",
969                )
970            }
971            #[inline]
972            fn eip712_components() -> alloy_sol_types::private::Vec<
973                alloy_sol_types::private::Cow<'static, str>,
974            > {
975                let mut components = alloy_sol_types::private::Vec::with_capacity(13);
976                components
977                    .push(
978                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
979                    );
980                components
981                    .extend(
982                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
983                    );
984                components
985                    .push(
986                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
987                    );
988                components
989                    .extend(
990                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
991                    );
992                components
993                    .push(
994                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
995                    );
996                components
997                    .extend(
998                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
999                    );
1000                components
1001                    .push(
1002                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1003                    );
1004                components
1005                    .extend(
1006                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1007                    );
1008                components
1009                    .push(
1010                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1011                    );
1012                components
1013                    .extend(
1014                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1015                    );
1016                components
1017                    .push(
1018                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1019                    );
1020                components
1021                    .extend(
1022                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1023                    );
1024                components
1025                    .push(
1026                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1027                    );
1028                components
1029                    .extend(
1030                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1031                    );
1032                components
1033                    .push(
1034                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1035                    );
1036                components
1037                    .extend(
1038                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1039                    );
1040                components
1041                    .push(
1042                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1043                    );
1044                components
1045                    .extend(
1046                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1047                    );
1048                components
1049                    .push(
1050                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1051                    );
1052                components
1053                    .extend(
1054                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1055                    );
1056                components
1057                    .push(
1058                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1059                    );
1060                components
1061                    .extend(
1062                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1063                    );
1064                components
1065                    .push(
1066                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1067                    );
1068                components
1069                    .extend(
1070                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1071                    );
1072                components
1073                    .push(
1074                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1075                    );
1076                components
1077                    .extend(
1078                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1079                    );
1080                components
1081            }
1082            #[inline]
1083            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
1084                [
1085                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1086                            &self.wire0,
1087                        )
1088                        .0,
1089                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1090                            &self.wire1,
1091                        )
1092                        .0,
1093                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1094                            &self.wire2,
1095                        )
1096                        .0,
1097                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1098                            &self.wire3,
1099                        )
1100                        .0,
1101                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1102                            &self.wire4,
1103                        )
1104                        .0,
1105                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1106                            &self.prodPerm,
1107                        )
1108                        .0,
1109                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1110                            &self.split0,
1111                        )
1112                        .0,
1113                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1114                            &self.split1,
1115                        )
1116                        .0,
1117                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1118                            &self.split2,
1119                        )
1120                        .0,
1121                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1122                            &self.split3,
1123                        )
1124                        .0,
1125                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1126                            &self.split4,
1127                        )
1128                        .0,
1129                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1130                            &self.zeta,
1131                        )
1132                        .0,
1133                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1134                            &self.zetaOmega,
1135                        )
1136                        .0,
1137                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1138                            &self.wireEval0,
1139                        )
1140                        .0,
1141                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1142                            &self.wireEval1,
1143                        )
1144                        .0,
1145                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1146                            &self.wireEval2,
1147                        )
1148                        .0,
1149                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1150                            &self.wireEval3,
1151                        )
1152                        .0,
1153                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1154                            &self.wireEval4,
1155                        )
1156                        .0,
1157                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1158                            &self.sigmaEval0,
1159                        )
1160                        .0,
1161                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1162                            &self.sigmaEval1,
1163                        )
1164                        .0,
1165                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1166                            &self.sigmaEval2,
1167                        )
1168                        .0,
1169                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1170                            &self.sigmaEval3,
1171                        )
1172                        .0,
1173                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1174                            &self.prodPermZetaOmegaEval,
1175                        )
1176                        .0,
1177                ]
1178                    .concat()
1179            }
1180        }
1181        #[automatically_derived]
1182        impl alloy_sol_types::EventTopic for PlonkProof {
1183            #[inline]
1184            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1185                0usize
1186                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1187                        &rust.wire0,
1188                    )
1189                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1190                        &rust.wire1,
1191                    )
1192                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1193                        &rust.wire2,
1194                    )
1195                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1196                        &rust.wire3,
1197                    )
1198                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1199                        &rust.wire4,
1200                    )
1201                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1202                        &rust.prodPerm,
1203                    )
1204                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1205                        &rust.split0,
1206                    )
1207                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1208                        &rust.split1,
1209                    )
1210                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1211                        &rust.split2,
1212                    )
1213                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1214                        &rust.split3,
1215                    )
1216                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1217                        &rust.split4,
1218                    )
1219                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1220                        &rust.zeta,
1221                    )
1222                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1223                        &rust.zetaOmega,
1224                    )
1225                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1226                        &rust.wireEval0,
1227                    )
1228                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1229                        &rust.wireEval1,
1230                    )
1231                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1232                        &rust.wireEval2,
1233                    )
1234                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1235                        &rust.wireEval3,
1236                    )
1237                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1238                        &rust.wireEval4,
1239                    )
1240                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1241                        &rust.sigmaEval0,
1242                    )
1243                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1244                        &rust.sigmaEval1,
1245                    )
1246                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1247                        &rust.sigmaEval2,
1248                    )
1249                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1250                        &rust.sigmaEval3,
1251                    )
1252                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1253                        &rust.prodPermZetaOmegaEval,
1254                    )
1255            }
1256            #[inline]
1257            fn encode_topic_preimage(
1258                rust: &Self::RustType,
1259                out: &mut alloy_sol_types::private::Vec<u8>,
1260            ) {
1261                out.reserve(
1262                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
1263                );
1264                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1265                    &rust.wire0,
1266                    out,
1267                );
1268                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1269                    &rust.wire1,
1270                    out,
1271                );
1272                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1273                    &rust.wire2,
1274                    out,
1275                );
1276                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1277                    &rust.wire3,
1278                    out,
1279                );
1280                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1281                    &rust.wire4,
1282                    out,
1283                );
1284                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1285                    &rust.prodPerm,
1286                    out,
1287                );
1288                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1289                    &rust.split0,
1290                    out,
1291                );
1292                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1293                    &rust.split1,
1294                    out,
1295                );
1296                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1297                    &rust.split2,
1298                    out,
1299                );
1300                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1301                    &rust.split3,
1302                    out,
1303                );
1304                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1305                    &rust.split4,
1306                    out,
1307                );
1308                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1309                    &rust.zeta,
1310                    out,
1311                );
1312                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1313                    &rust.zetaOmega,
1314                    out,
1315                );
1316                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1317                    &rust.wireEval0,
1318                    out,
1319                );
1320                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1321                    &rust.wireEval1,
1322                    out,
1323                );
1324                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1325                    &rust.wireEval2,
1326                    out,
1327                );
1328                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1329                    &rust.wireEval3,
1330                    out,
1331                );
1332                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1333                    &rust.wireEval4,
1334                    out,
1335                );
1336                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1337                    &rust.sigmaEval0,
1338                    out,
1339                );
1340                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1341                    &rust.sigmaEval1,
1342                    out,
1343                );
1344                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1345                    &rust.sigmaEval2,
1346                    out,
1347                );
1348                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1349                    &rust.sigmaEval3,
1350                    out,
1351                );
1352                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1353                    &rust.prodPermZetaOmegaEval,
1354                    out,
1355                );
1356            }
1357            #[inline]
1358            fn encode_topic(
1359                rust: &Self::RustType,
1360            ) -> alloy_sol_types::abi::token::WordToken {
1361                let mut out = alloy_sol_types::private::Vec::new();
1362                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
1363                    rust,
1364                    &mut out,
1365                );
1366                alloy_sol_types::abi::token::WordToken(
1367                    alloy_sol_types::private::keccak256(out),
1368                )
1369            }
1370        }
1371    };
1372    #[derive(serde::Serialize, serde::Deserialize)]
1373    #[derive()]
1374    /**```solidity
1375struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
1376```*/
1377    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1378    #[derive(Clone)]
1379    pub struct VerifyingKey {
1380        #[allow(missing_docs)]
1381        pub domainSize: alloy::sol_types::private::primitives::aliases::U256,
1382        #[allow(missing_docs)]
1383        pub numInputs: alloy::sol_types::private::primitives::aliases::U256,
1384        #[allow(missing_docs)]
1385        pub sigma0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1386        #[allow(missing_docs)]
1387        pub sigma1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1388        #[allow(missing_docs)]
1389        pub sigma2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1390        #[allow(missing_docs)]
1391        pub sigma3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1392        #[allow(missing_docs)]
1393        pub sigma4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1394        #[allow(missing_docs)]
1395        pub q1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1396        #[allow(missing_docs)]
1397        pub q2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1398        #[allow(missing_docs)]
1399        pub q3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1400        #[allow(missing_docs)]
1401        pub q4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1402        #[allow(missing_docs)]
1403        pub qM12: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1404        #[allow(missing_docs)]
1405        pub qM34: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1406        #[allow(missing_docs)]
1407        pub qO: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1408        #[allow(missing_docs)]
1409        pub qC: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1410        #[allow(missing_docs)]
1411        pub qH1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1412        #[allow(missing_docs)]
1413        pub qH2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1414        #[allow(missing_docs)]
1415        pub qH3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1416        #[allow(missing_docs)]
1417        pub qH4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1418        #[allow(missing_docs)]
1419        pub qEcc: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1420        #[allow(missing_docs)]
1421        pub g2LSB: alloy::sol_types::private::FixedBytes<32>,
1422        #[allow(missing_docs)]
1423        pub g2MSB: alloy::sol_types::private::FixedBytes<32>,
1424    }
1425    #[allow(
1426        non_camel_case_types,
1427        non_snake_case,
1428        clippy::pub_underscore_fields,
1429        clippy::style
1430    )]
1431    const _: () = {
1432        use alloy::sol_types as alloy_sol_types;
1433        #[doc(hidden)]
1434        #[allow(dead_code)]
1435        type UnderlyingSolTuple<'a> = (
1436            alloy::sol_types::sol_data::Uint<256>,
1437            alloy::sol_types::sol_data::Uint<256>,
1438            BN254::G1Point,
1439            BN254::G1Point,
1440            BN254::G1Point,
1441            BN254::G1Point,
1442            BN254::G1Point,
1443            BN254::G1Point,
1444            BN254::G1Point,
1445            BN254::G1Point,
1446            BN254::G1Point,
1447            BN254::G1Point,
1448            BN254::G1Point,
1449            BN254::G1Point,
1450            BN254::G1Point,
1451            BN254::G1Point,
1452            BN254::G1Point,
1453            BN254::G1Point,
1454            BN254::G1Point,
1455            BN254::G1Point,
1456            alloy::sol_types::sol_data::FixedBytes<32>,
1457            alloy::sol_types::sol_data::FixedBytes<32>,
1458        );
1459        #[doc(hidden)]
1460        type UnderlyingRustTuple<'a> = (
1461            alloy::sol_types::private::primitives::aliases::U256,
1462            alloy::sol_types::private::primitives::aliases::U256,
1463            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1464            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1465            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1466            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1467            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1468            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1469            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1470            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1471            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1472            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1473            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1474            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1475            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1476            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1477            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1478            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1479            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1480            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1481            alloy::sol_types::private::FixedBytes<32>,
1482            alloy::sol_types::private::FixedBytes<32>,
1483        );
1484        #[cfg(test)]
1485        #[allow(dead_code, unreachable_patterns)]
1486        fn _type_assertion(
1487            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1488        ) {
1489            match _t {
1490                alloy_sol_types::private::AssertTypeEq::<
1491                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1492                >(_) => {}
1493            }
1494        }
1495        #[automatically_derived]
1496        #[doc(hidden)]
1497        impl ::core::convert::From<VerifyingKey> for UnderlyingRustTuple<'_> {
1498            fn from(value: VerifyingKey) -> Self {
1499                (
1500                    value.domainSize,
1501                    value.numInputs,
1502                    value.sigma0,
1503                    value.sigma1,
1504                    value.sigma2,
1505                    value.sigma3,
1506                    value.sigma4,
1507                    value.q1,
1508                    value.q2,
1509                    value.q3,
1510                    value.q4,
1511                    value.qM12,
1512                    value.qM34,
1513                    value.qO,
1514                    value.qC,
1515                    value.qH1,
1516                    value.qH2,
1517                    value.qH3,
1518                    value.qH4,
1519                    value.qEcc,
1520                    value.g2LSB,
1521                    value.g2MSB,
1522                )
1523            }
1524        }
1525        #[automatically_derived]
1526        #[doc(hidden)]
1527        impl ::core::convert::From<UnderlyingRustTuple<'_>> for VerifyingKey {
1528            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1529                Self {
1530                    domainSize: tuple.0,
1531                    numInputs: tuple.1,
1532                    sigma0: tuple.2,
1533                    sigma1: tuple.3,
1534                    sigma2: tuple.4,
1535                    sigma3: tuple.5,
1536                    sigma4: tuple.6,
1537                    q1: tuple.7,
1538                    q2: tuple.8,
1539                    q3: tuple.9,
1540                    q4: tuple.10,
1541                    qM12: tuple.11,
1542                    qM34: tuple.12,
1543                    qO: tuple.13,
1544                    qC: tuple.14,
1545                    qH1: tuple.15,
1546                    qH2: tuple.16,
1547                    qH3: tuple.17,
1548                    qH4: tuple.18,
1549                    qEcc: tuple.19,
1550                    g2LSB: tuple.20,
1551                    g2MSB: tuple.21,
1552                }
1553            }
1554        }
1555        #[automatically_derived]
1556        impl alloy_sol_types::SolValue for VerifyingKey {
1557            type SolType = Self;
1558        }
1559        #[automatically_derived]
1560        impl alloy_sol_types::private::SolTypeValue<Self> for VerifyingKey {
1561            #[inline]
1562            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
1563                (
1564                    <alloy::sol_types::sol_data::Uint<
1565                        256,
1566                    > as alloy_sol_types::SolType>::tokenize(&self.domainSize),
1567                    <alloy::sol_types::sol_data::Uint<
1568                        256,
1569                    > as alloy_sol_types::SolType>::tokenize(&self.numInputs),
1570                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma0),
1571                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma1),
1572                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma2),
1573                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma3),
1574                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma4),
1575                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q1),
1576                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q2),
1577                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q3),
1578                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q4),
1579                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM12),
1580                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM34),
1581                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qO),
1582                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qC),
1583                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH1),
1584                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH2),
1585                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH3),
1586                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH4),
1587                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qEcc),
1588                    <alloy::sol_types::sol_data::FixedBytes<
1589                        32,
1590                    > as alloy_sol_types::SolType>::tokenize(&self.g2LSB),
1591                    <alloy::sol_types::sol_data::FixedBytes<
1592                        32,
1593                    > as alloy_sol_types::SolType>::tokenize(&self.g2MSB),
1594                )
1595            }
1596            #[inline]
1597            fn stv_abi_encoded_size(&self) -> usize {
1598                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
1599                    return size;
1600                }
1601                let tuple = <UnderlyingRustTuple<
1602                    '_,
1603                > as ::core::convert::From<Self>>::from(self.clone());
1604                <UnderlyingSolTuple<
1605                    '_,
1606                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
1607            }
1608            #[inline]
1609            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
1610                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
1611            }
1612            #[inline]
1613            fn stv_abi_encode_packed_to(
1614                &self,
1615                out: &mut alloy_sol_types::private::Vec<u8>,
1616            ) {
1617                let tuple = <UnderlyingRustTuple<
1618                    '_,
1619                > as ::core::convert::From<Self>>::from(self.clone());
1620                <UnderlyingSolTuple<
1621                    '_,
1622                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
1623            }
1624            #[inline]
1625            fn stv_abi_packed_encoded_size(&self) -> usize {
1626                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
1627                    return size;
1628                }
1629                let tuple = <UnderlyingRustTuple<
1630                    '_,
1631                > as ::core::convert::From<Self>>::from(self.clone());
1632                <UnderlyingSolTuple<
1633                    '_,
1634                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
1635            }
1636        }
1637        #[automatically_derived]
1638        impl alloy_sol_types::SolType for VerifyingKey {
1639            type RustType = Self;
1640            type Token<'a> = <UnderlyingSolTuple<
1641                'a,
1642            > as alloy_sol_types::SolType>::Token<'a>;
1643            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
1644            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
1645                '_,
1646            > as alloy_sol_types::SolType>::ENCODED_SIZE;
1647            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
1648                '_,
1649            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
1650            #[inline]
1651            fn valid_token(token: &Self::Token<'_>) -> bool {
1652                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
1653            }
1654            #[inline]
1655            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
1656                let tuple = <UnderlyingSolTuple<
1657                    '_,
1658                > as alloy_sol_types::SolType>::detokenize(token);
1659                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
1660            }
1661        }
1662        #[automatically_derived]
1663        impl alloy_sol_types::SolStruct for VerifyingKey {
1664            const NAME: &'static str = "VerifyingKey";
1665            #[inline]
1666            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
1667                alloy_sol_types::private::Cow::Borrowed(
1668                    "VerifyingKey(uint256 domainSize,uint256 numInputs,G1Point sigma0,G1Point sigma1,G1Point sigma2,G1Point sigma3,G1Point sigma4,G1Point q1,G1Point q2,G1Point q3,G1Point q4,G1Point qM12,G1Point qM34,G1Point qO,G1Point qC,G1Point qH1,G1Point qH2,G1Point qH3,G1Point qH4,G1Point qEcc,bytes32 g2LSB,bytes32 g2MSB)",
1669                )
1670            }
1671            #[inline]
1672            fn eip712_components() -> alloy_sol_types::private::Vec<
1673                alloy_sol_types::private::Cow<'static, str>,
1674            > {
1675                let mut components = alloy_sol_types::private::Vec::with_capacity(18);
1676                components
1677                    .push(
1678                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1679                    );
1680                components
1681                    .extend(
1682                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1683                    );
1684                components
1685                    .push(
1686                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1687                    );
1688                components
1689                    .extend(
1690                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1691                    );
1692                components
1693                    .push(
1694                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1695                    );
1696                components
1697                    .extend(
1698                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1699                    );
1700                components
1701                    .push(
1702                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1703                    );
1704                components
1705                    .extend(
1706                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1707                    );
1708                components
1709                    .push(
1710                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1711                    );
1712                components
1713                    .extend(
1714                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1715                    );
1716                components
1717                    .push(
1718                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1719                    );
1720                components
1721                    .extend(
1722                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1723                    );
1724                components
1725                    .push(
1726                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1727                    );
1728                components
1729                    .extend(
1730                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1731                    );
1732                components
1733                    .push(
1734                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1735                    );
1736                components
1737                    .extend(
1738                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1739                    );
1740                components
1741                    .push(
1742                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1743                    );
1744                components
1745                    .extend(
1746                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1747                    );
1748                components
1749                    .push(
1750                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1751                    );
1752                components
1753                    .extend(
1754                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1755                    );
1756                components
1757                    .push(
1758                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1759                    );
1760                components
1761                    .extend(
1762                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1763                    );
1764                components
1765                    .push(
1766                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1767                    );
1768                components
1769                    .extend(
1770                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1771                    );
1772                components
1773                    .push(
1774                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1775                    );
1776                components
1777                    .extend(
1778                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1779                    );
1780                components
1781                    .push(
1782                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1783                    );
1784                components
1785                    .extend(
1786                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1787                    );
1788                components
1789                    .push(
1790                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1791                    );
1792                components
1793                    .extend(
1794                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1795                    );
1796                components
1797                    .push(
1798                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1799                    );
1800                components
1801                    .extend(
1802                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1803                    );
1804                components
1805                    .push(
1806                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1807                    );
1808                components
1809                    .extend(
1810                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1811                    );
1812                components
1813                    .push(
1814                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1815                    );
1816                components
1817                    .extend(
1818                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1819                    );
1820                components
1821            }
1822            #[inline]
1823            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
1824                [
1825                    <alloy::sol_types::sol_data::Uint<
1826                        256,
1827                    > as alloy_sol_types::SolType>::eip712_data_word(&self.domainSize)
1828                        .0,
1829                    <alloy::sol_types::sol_data::Uint<
1830                        256,
1831                    > as alloy_sol_types::SolType>::eip712_data_word(&self.numInputs)
1832                        .0,
1833                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1834                            &self.sigma0,
1835                        )
1836                        .0,
1837                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1838                            &self.sigma1,
1839                        )
1840                        .0,
1841                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1842                            &self.sigma2,
1843                        )
1844                        .0,
1845                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1846                            &self.sigma3,
1847                        )
1848                        .0,
1849                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1850                            &self.sigma4,
1851                        )
1852                        .0,
1853                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1854                            &self.q1,
1855                        )
1856                        .0,
1857                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1858                            &self.q2,
1859                        )
1860                        .0,
1861                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1862                            &self.q3,
1863                        )
1864                        .0,
1865                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1866                            &self.q4,
1867                        )
1868                        .0,
1869                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1870                            &self.qM12,
1871                        )
1872                        .0,
1873                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1874                            &self.qM34,
1875                        )
1876                        .0,
1877                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1878                            &self.qO,
1879                        )
1880                        .0,
1881                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1882                            &self.qC,
1883                        )
1884                        .0,
1885                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1886                            &self.qH1,
1887                        )
1888                        .0,
1889                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1890                            &self.qH2,
1891                        )
1892                        .0,
1893                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1894                            &self.qH3,
1895                        )
1896                        .0,
1897                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1898                            &self.qH4,
1899                        )
1900                        .0,
1901                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1902                            &self.qEcc,
1903                        )
1904                        .0,
1905                    <alloy::sol_types::sol_data::FixedBytes<
1906                        32,
1907                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2LSB)
1908                        .0,
1909                    <alloy::sol_types::sol_data::FixedBytes<
1910                        32,
1911                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2MSB)
1912                        .0,
1913                ]
1914                    .concat()
1915            }
1916        }
1917        #[automatically_derived]
1918        impl alloy_sol_types::EventTopic for VerifyingKey {
1919            #[inline]
1920            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1921                0usize
1922                    + <alloy::sol_types::sol_data::Uint<
1923                        256,
1924                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1925                        &rust.domainSize,
1926                    )
1927                    + <alloy::sol_types::sol_data::Uint<
1928                        256,
1929                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1930                        &rust.numInputs,
1931                    )
1932                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1933                        &rust.sigma0,
1934                    )
1935                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1936                        &rust.sigma1,
1937                    )
1938                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1939                        &rust.sigma2,
1940                    )
1941                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1942                        &rust.sigma3,
1943                    )
1944                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1945                        &rust.sigma4,
1946                    )
1947                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1948                        &rust.q1,
1949                    )
1950                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1951                        &rust.q2,
1952                    )
1953                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1954                        &rust.q3,
1955                    )
1956                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1957                        &rust.q4,
1958                    )
1959                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1960                        &rust.qM12,
1961                    )
1962                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1963                        &rust.qM34,
1964                    )
1965                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1966                        &rust.qO,
1967                    )
1968                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1969                        &rust.qC,
1970                    )
1971                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1972                        &rust.qH1,
1973                    )
1974                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1975                        &rust.qH2,
1976                    )
1977                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1978                        &rust.qH3,
1979                    )
1980                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1981                        &rust.qH4,
1982                    )
1983                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1984                        &rust.qEcc,
1985                    )
1986                    + <alloy::sol_types::sol_data::FixedBytes<
1987                        32,
1988                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2LSB)
1989                    + <alloy::sol_types::sol_data::FixedBytes<
1990                        32,
1991                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2MSB)
1992            }
1993            #[inline]
1994            fn encode_topic_preimage(
1995                rust: &Self::RustType,
1996                out: &mut alloy_sol_types::private::Vec<u8>,
1997            ) {
1998                out.reserve(
1999                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
2000                );
2001                <alloy::sol_types::sol_data::Uint<
2002                    256,
2003                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2004                    &rust.domainSize,
2005                    out,
2006                );
2007                <alloy::sol_types::sol_data::Uint<
2008                    256,
2009                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2010                    &rust.numInputs,
2011                    out,
2012                );
2013                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2014                    &rust.sigma0,
2015                    out,
2016                );
2017                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2018                    &rust.sigma1,
2019                    out,
2020                );
2021                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2022                    &rust.sigma2,
2023                    out,
2024                );
2025                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2026                    &rust.sigma3,
2027                    out,
2028                );
2029                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2030                    &rust.sigma4,
2031                    out,
2032                );
2033                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2034                    &rust.q1,
2035                    out,
2036                );
2037                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2038                    &rust.q2,
2039                    out,
2040                );
2041                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2042                    &rust.q3,
2043                    out,
2044                );
2045                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2046                    &rust.q4,
2047                    out,
2048                );
2049                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2050                    &rust.qM12,
2051                    out,
2052                );
2053                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2054                    &rust.qM34,
2055                    out,
2056                );
2057                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2058                    &rust.qO,
2059                    out,
2060                );
2061                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2062                    &rust.qC,
2063                    out,
2064                );
2065                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2066                    &rust.qH1,
2067                    out,
2068                );
2069                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2070                    &rust.qH2,
2071                    out,
2072                );
2073                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2074                    &rust.qH3,
2075                    out,
2076                );
2077                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2078                    &rust.qH4,
2079                    out,
2080                );
2081                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2082                    &rust.qEcc,
2083                    out,
2084                );
2085                <alloy::sol_types::sol_data::FixedBytes<
2086                    32,
2087                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2088                    &rust.g2LSB,
2089                    out,
2090                );
2091                <alloy::sol_types::sol_data::FixedBytes<
2092                    32,
2093                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2094                    &rust.g2MSB,
2095                    out,
2096                );
2097            }
2098            #[inline]
2099            fn encode_topic(
2100                rust: &Self::RustType,
2101            ) -> alloy_sol_types::abi::token::WordToken {
2102                let mut out = alloy_sol_types::private::Vec::new();
2103                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
2104                    rust,
2105                    &mut out,
2106                );
2107                alloy_sol_types::abi::token::WordToken(
2108                    alloy_sol_types::private::keccak256(out),
2109                )
2110            }
2111        }
2112    };
2113    use alloy::contract as alloy_contract;
2114    /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
2115
2116See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
2117    #[inline]
2118    pub const fn new<
2119        P: alloy_contract::private::Provider<N>,
2120        N: alloy_contract::private::Network,
2121    >(
2122        address: alloy_sol_types::private::Address,
2123        __provider: P,
2124    ) -> IPlonkVerifierInstance<P, N> {
2125        IPlonkVerifierInstance::<P, N>::new(address, __provider)
2126    }
2127    /**A [`IPlonkVerifier`](self) instance.
2128
2129Contains type-safe methods for interacting with an on-chain instance of the
2130[`IPlonkVerifier`](self) contract located at a given `address`, using a given
2131provider `P`.
2132
2133If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
2134documentation on how to provide it), the `deploy` and `deploy_builder` methods can
2135be used to deploy a new instance of the contract.
2136
2137See the [module-level documentation](self) for all the available methods.*/
2138    #[derive(Clone)]
2139    pub struct IPlonkVerifierInstance<P, N = alloy_contract::private::Ethereum> {
2140        address: alloy_sol_types::private::Address,
2141        provider: P,
2142        _network: ::core::marker::PhantomData<N>,
2143    }
2144    #[automatically_derived]
2145    impl<P, N> ::core::fmt::Debug for IPlonkVerifierInstance<P, N> {
2146        #[inline]
2147        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
2148            f.debug_tuple("IPlonkVerifierInstance").field(&self.address).finish()
2149        }
2150    }
2151    /// Instantiation and getters/setters.
2152    impl<
2153        P: alloy_contract::private::Provider<N>,
2154        N: alloy_contract::private::Network,
2155    > IPlonkVerifierInstance<P, N> {
2156        /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
2157
2158See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
2159        #[inline]
2160        pub const fn new(
2161            address: alloy_sol_types::private::Address,
2162            __provider: P,
2163        ) -> Self {
2164            Self {
2165                address,
2166                provider: __provider,
2167                _network: ::core::marker::PhantomData,
2168            }
2169        }
2170        /// Returns a reference to the address.
2171        #[inline]
2172        pub const fn address(&self) -> &alloy_sol_types::private::Address {
2173            &self.address
2174        }
2175        /// Sets the address.
2176        #[inline]
2177        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
2178            self.address = address;
2179        }
2180        /// Sets the address and returns `self`.
2181        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
2182            self.set_address(address);
2183            self
2184        }
2185        /// Returns a reference to the provider.
2186        #[inline]
2187        pub const fn provider(&self) -> &P {
2188            &self.provider
2189        }
2190    }
2191    impl<P: ::core::clone::Clone, N> IPlonkVerifierInstance<&P, N> {
2192        /// Clones the provider and returns a new instance with the cloned provider.
2193        #[inline]
2194        pub fn with_cloned_provider(self) -> IPlonkVerifierInstance<P, N> {
2195            IPlonkVerifierInstance {
2196                address: self.address,
2197                provider: ::core::clone::Clone::clone(&self.provider),
2198                _network: ::core::marker::PhantomData,
2199            }
2200        }
2201    }
2202    /// Function calls.
2203    impl<
2204        P: alloy_contract::private::Provider<N>,
2205        N: alloy_contract::private::Network,
2206    > IPlonkVerifierInstance<P, N> {
2207        /// Creates a new call builder using this contract instance's provider and address.
2208        ///
2209        /// Note that the call can be any function call, not just those defined in this
2210        /// contract. Prefer using the other methods for building type-safe contract calls.
2211        pub fn call_builder<C: alloy_sol_types::SolCall>(
2212            &self,
2213            call: &C,
2214        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
2215            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
2216        }
2217    }
2218    /// Event filters.
2219    impl<
2220        P: alloy_contract::private::Provider<N>,
2221        N: alloy_contract::private::Network,
2222    > IPlonkVerifierInstance<P, N> {
2223        /// Creates a new event filter using this contract instance's provider and address.
2224        ///
2225        /// Note that the type can be any event, not just those defined in this contract.
2226        /// Prefer using the other methods for building type-safe event filters.
2227        pub fn event_filter<E: alloy_sol_types::SolEvent>(
2228            &self,
2229        ) -> alloy_contract::Event<&P, E, N> {
2230            alloy_contract::Event::new_sol(&self.provider, &self.address)
2231        }
2232    }
2233}
2234/**
2235
2236Generated by the following Solidity interface...
2237```solidity
2238library BN254 {
2239    type BaseField is uint256;
2240    type ScalarField is uint256;
2241    struct G1Point {
2242        BaseField x;
2243        BaseField y;
2244    }
2245}
2246
2247library IPlonkVerifier {
2248    struct PlonkProof {
2249        BN254.G1Point wire0;
2250        BN254.G1Point wire1;
2251        BN254.G1Point wire2;
2252        BN254.G1Point wire3;
2253        BN254.G1Point wire4;
2254        BN254.G1Point prodPerm;
2255        BN254.G1Point split0;
2256        BN254.G1Point split1;
2257        BN254.G1Point split2;
2258        BN254.G1Point split3;
2259        BN254.G1Point split4;
2260        BN254.G1Point zeta;
2261        BN254.G1Point zetaOmega;
2262        BN254.ScalarField wireEval0;
2263        BN254.ScalarField wireEval1;
2264        BN254.ScalarField wireEval2;
2265        BN254.ScalarField wireEval3;
2266        BN254.ScalarField wireEval4;
2267        BN254.ScalarField sigmaEval0;
2268        BN254.ScalarField sigmaEval1;
2269        BN254.ScalarField sigmaEval2;
2270        BN254.ScalarField sigmaEval3;
2271        BN254.ScalarField prodPermZetaOmegaEval;
2272    }
2273    struct VerifyingKey {
2274        uint256 domainSize;
2275        uint256 numInputs;
2276        BN254.G1Point sigma0;
2277        BN254.G1Point sigma1;
2278        BN254.G1Point sigma2;
2279        BN254.G1Point sigma3;
2280        BN254.G1Point sigma4;
2281        BN254.G1Point q1;
2282        BN254.G1Point q2;
2283        BN254.G1Point q3;
2284        BN254.G1Point q4;
2285        BN254.G1Point qM12;
2286        BN254.G1Point qM34;
2287        BN254.G1Point qO;
2288        BN254.G1Point qC;
2289        BN254.G1Point qH1;
2290        BN254.G1Point qH2;
2291        BN254.G1Point qH3;
2292        BN254.G1Point qH4;
2293        BN254.G1Point qEcc;
2294        bytes32 g2LSB;
2295        bytes32 g2MSB;
2296    }
2297}
2298
2299interface PlonkVerifier {
2300    error BN254G1AddFailed();
2301    error BN254PairingProdFailed();
2302    error BN254ScalarInvZero();
2303    error BN254ScalarMulFailed();
2304    error InvalidG1();
2305    error InvalidPlonkArgs();
2306    error InvalidScalar();
2307    error PowPrecompileFailed();
2308    error UnsupportedDegree();
2309    error WrongPlonkVK();
2310
2311    function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
2312}
2313```
2314
2315...which was generated by the following JSON ABI:
2316```json
2317[
2318  {
2319    "type": "function",
2320    "name": "verify",
2321    "inputs": [
2322      {
2323        "name": "verifyingKey",
2324        "type": "tuple",
2325        "internalType": "struct IPlonkVerifier.VerifyingKey",
2326        "components": [
2327          {
2328            "name": "domainSize",
2329            "type": "uint256",
2330            "internalType": "uint256"
2331          },
2332          {
2333            "name": "numInputs",
2334            "type": "uint256",
2335            "internalType": "uint256"
2336          },
2337          {
2338            "name": "sigma0",
2339            "type": "tuple",
2340            "internalType": "struct BN254.G1Point",
2341            "components": [
2342              {
2343                "name": "x",
2344                "type": "uint256",
2345                "internalType": "BN254.BaseField"
2346              },
2347              {
2348                "name": "y",
2349                "type": "uint256",
2350                "internalType": "BN254.BaseField"
2351              }
2352            ]
2353          },
2354          {
2355            "name": "sigma1",
2356            "type": "tuple",
2357            "internalType": "struct BN254.G1Point",
2358            "components": [
2359              {
2360                "name": "x",
2361                "type": "uint256",
2362                "internalType": "BN254.BaseField"
2363              },
2364              {
2365                "name": "y",
2366                "type": "uint256",
2367                "internalType": "BN254.BaseField"
2368              }
2369            ]
2370          },
2371          {
2372            "name": "sigma2",
2373            "type": "tuple",
2374            "internalType": "struct BN254.G1Point",
2375            "components": [
2376              {
2377                "name": "x",
2378                "type": "uint256",
2379                "internalType": "BN254.BaseField"
2380              },
2381              {
2382                "name": "y",
2383                "type": "uint256",
2384                "internalType": "BN254.BaseField"
2385              }
2386            ]
2387          },
2388          {
2389            "name": "sigma3",
2390            "type": "tuple",
2391            "internalType": "struct BN254.G1Point",
2392            "components": [
2393              {
2394                "name": "x",
2395                "type": "uint256",
2396                "internalType": "BN254.BaseField"
2397              },
2398              {
2399                "name": "y",
2400                "type": "uint256",
2401                "internalType": "BN254.BaseField"
2402              }
2403            ]
2404          },
2405          {
2406            "name": "sigma4",
2407            "type": "tuple",
2408            "internalType": "struct BN254.G1Point",
2409            "components": [
2410              {
2411                "name": "x",
2412                "type": "uint256",
2413                "internalType": "BN254.BaseField"
2414              },
2415              {
2416                "name": "y",
2417                "type": "uint256",
2418                "internalType": "BN254.BaseField"
2419              }
2420            ]
2421          },
2422          {
2423            "name": "q1",
2424            "type": "tuple",
2425            "internalType": "struct BN254.G1Point",
2426            "components": [
2427              {
2428                "name": "x",
2429                "type": "uint256",
2430                "internalType": "BN254.BaseField"
2431              },
2432              {
2433                "name": "y",
2434                "type": "uint256",
2435                "internalType": "BN254.BaseField"
2436              }
2437            ]
2438          },
2439          {
2440            "name": "q2",
2441            "type": "tuple",
2442            "internalType": "struct BN254.G1Point",
2443            "components": [
2444              {
2445                "name": "x",
2446                "type": "uint256",
2447                "internalType": "BN254.BaseField"
2448              },
2449              {
2450                "name": "y",
2451                "type": "uint256",
2452                "internalType": "BN254.BaseField"
2453              }
2454            ]
2455          },
2456          {
2457            "name": "q3",
2458            "type": "tuple",
2459            "internalType": "struct BN254.G1Point",
2460            "components": [
2461              {
2462                "name": "x",
2463                "type": "uint256",
2464                "internalType": "BN254.BaseField"
2465              },
2466              {
2467                "name": "y",
2468                "type": "uint256",
2469                "internalType": "BN254.BaseField"
2470              }
2471            ]
2472          },
2473          {
2474            "name": "q4",
2475            "type": "tuple",
2476            "internalType": "struct BN254.G1Point",
2477            "components": [
2478              {
2479                "name": "x",
2480                "type": "uint256",
2481                "internalType": "BN254.BaseField"
2482              },
2483              {
2484                "name": "y",
2485                "type": "uint256",
2486                "internalType": "BN254.BaseField"
2487              }
2488            ]
2489          },
2490          {
2491            "name": "qM12",
2492            "type": "tuple",
2493            "internalType": "struct BN254.G1Point",
2494            "components": [
2495              {
2496                "name": "x",
2497                "type": "uint256",
2498                "internalType": "BN254.BaseField"
2499              },
2500              {
2501                "name": "y",
2502                "type": "uint256",
2503                "internalType": "BN254.BaseField"
2504              }
2505            ]
2506          },
2507          {
2508            "name": "qM34",
2509            "type": "tuple",
2510            "internalType": "struct BN254.G1Point",
2511            "components": [
2512              {
2513                "name": "x",
2514                "type": "uint256",
2515                "internalType": "BN254.BaseField"
2516              },
2517              {
2518                "name": "y",
2519                "type": "uint256",
2520                "internalType": "BN254.BaseField"
2521              }
2522            ]
2523          },
2524          {
2525            "name": "qO",
2526            "type": "tuple",
2527            "internalType": "struct BN254.G1Point",
2528            "components": [
2529              {
2530                "name": "x",
2531                "type": "uint256",
2532                "internalType": "BN254.BaseField"
2533              },
2534              {
2535                "name": "y",
2536                "type": "uint256",
2537                "internalType": "BN254.BaseField"
2538              }
2539            ]
2540          },
2541          {
2542            "name": "qC",
2543            "type": "tuple",
2544            "internalType": "struct BN254.G1Point",
2545            "components": [
2546              {
2547                "name": "x",
2548                "type": "uint256",
2549                "internalType": "BN254.BaseField"
2550              },
2551              {
2552                "name": "y",
2553                "type": "uint256",
2554                "internalType": "BN254.BaseField"
2555              }
2556            ]
2557          },
2558          {
2559            "name": "qH1",
2560            "type": "tuple",
2561            "internalType": "struct BN254.G1Point",
2562            "components": [
2563              {
2564                "name": "x",
2565                "type": "uint256",
2566                "internalType": "BN254.BaseField"
2567              },
2568              {
2569                "name": "y",
2570                "type": "uint256",
2571                "internalType": "BN254.BaseField"
2572              }
2573            ]
2574          },
2575          {
2576            "name": "qH2",
2577            "type": "tuple",
2578            "internalType": "struct BN254.G1Point",
2579            "components": [
2580              {
2581                "name": "x",
2582                "type": "uint256",
2583                "internalType": "BN254.BaseField"
2584              },
2585              {
2586                "name": "y",
2587                "type": "uint256",
2588                "internalType": "BN254.BaseField"
2589              }
2590            ]
2591          },
2592          {
2593            "name": "qH3",
2594            "type": "tuple",
2595            "internalType": "struct BN254.G1Point",
2596            "components": [
2597              {
2598                "name": "x",
2599                "type": "uint256",
2600                "internalType": "BN254.BaseField"
2601              },
2602              {
2603                "name": "y",
2604                "type": "uint256",
2605                "internalType": "BN254.BaseField"
2606              }
2607            ]
2608          },
2609          {
2610            "name": "qH4",
2611            "type": "tuple",
2612            "internalType": "struct BN254.G1Point",
2613            "components": [
2614              {
2615                "name": "x",
2616                "type": "uint256",
2617                "internalType": "BN254.BaseField"
2618              },
2619              {
2620                "name": "y",
2621                "type": "uint256",
2622                "internalType": "BN254.BaseField"
2623              }
2624            ]
2625          },
2626          {
2627            "name": "qEcc",
2628            "type": "tuple",
2629            "internalType": "struct BN254.G1Point",
2630            "components": [
2631              {
2632                "name": "x",
2633                "type": "uint256",
2634                "internalType": "BN254.BaseField"
2635              },
2636              {
2637                "name": "y",
2638                "type": "uint256",
2639                "internalType": "BN254.BaseField"
2640              }
2641            ]
2642          },
2643          {
2644            "name": "g2LSB",
2645            "type": "bytes32",
2646            "internalType": "bytes32"
2647          },
2648          {
2649            "name": "g2MSB",
2650            "type": "bytes32",
2651            "internalType": "bytes32"
2652          }
2653        ]
2654      },
2655      {
2656        "name": "publicInput",
2657        "type": "uint256[7]",
2658        "internalType": "uint256[7]"
2659      },
2660      {
2661        "name": "proof",
2662        "type": "tuple",
2663        "internalType": "struct IPlonkVerifier.PlonkProof",
2664        "components": [
2665          {
2666            "name": "wire0",
2667            "type": "tuple",
2668            "internalType": "struct BN254.G1Point",
2669            "components": [
2670              {
2671                "name": "x",
2672                "type": "uint256",
2673                "internalType": "BN254.BaseField"
2674              },
2675              {
2676                "name": "y",
2677                "type": "uint256",
2678                "internalType": "BN254.BaseField"
2679              }
2680            ]
2681          },
2682          {
2683            "name": "wire1",
2684            "type": "tuple",
2685            "internalType": "struct BN254.G1Point",
2686            "components": [
2687              {
2688                "name": "x",
2689                "type": "uint256",
2690                "internalType": "BN254.BaseField"
2691              },
2692              {
2693                "name": "y",
2694                "type": "uint256",
2695                "internalType": "BN254.BaseField"
2696              }
2697            ]
2698          },
2699          {
2700            "name": "wire2",
2701            "type": "tuple",
2702            "internalType": "struct BN254.G1Point",
2703            "components": [
2704              {
2705                "name": "x",
2706                "type": "uint256",
2707                "internalType": "BN254.BaseField"
2708              },
2709              {
2710                "name": "y",
2711                "type": "uint256",
2712                "internalType": "BN254.BaseField"
2713              }
2714            ]
2715          },
2716          {
2717            "name": "wire3",
2718            "type": "tuple",
2719            "internalType": "struct BN254.G1Point",
2720            "components": [
2721              {
2722                "name": "x",
2723                "type": "uint256",
2724                "internalType": "BN254.BaseField"
2725              },
2726              {
2727                "name": "y",
2728                "type": "uint256",
2729                "internalType": "BN254.BaseField"
2730              }
2731            ]
2732          },
2733          {
2734            "name": "wire4",
2735            "type": "tuple",
2736            "internalType": "struct BN254.G1Point",
2737            "components": [
2738              {
2739                "name": "x",
2740                "type": "uint256",
2741                "internalType": "BN254.BaseField"
2742              },
2743              {
2744                "name": "y",
2745                "type": "uint256",
2746                "internalType": "BN254.BaseField"
2747              }
2748            ]
2749          },
2750          {
2751            "name": "prodPerm",
2752            "type": "tuple",
2753            "internalType": "struct BN254.G1Point",
2754            "components": [
2755              {
2756                "name": "x",
2757                "type": "uint256",
2758                "internalType": "BN254.BaseField"
2759              },
2760              {
2761                "name": "y",
2762                "type": "uint256",
2763                "internalType": "BN254.BaseField"
2764              }
2765            ]
2766          },
2767          {
2768            "name": "split0",
2769            "type": "tuple",
2770            "internalType": "struct BN254.G1Point",
2771            "components": [
2772              {
2773                "name": "x",
2774                "type": "uint256",
2775                "internalType": "BN254.BaseField"
2776              },
2777              {
2778                "name": "y",
2779                "type": "uint256",
2780                "internalType": "BN254.BaseField"
2781              }
2782            ]
2783          },
2784          {
2785            "name": "split1",
2786            "type": "tuple",
2787            "internalType": "struct BN254.G1Point",
2788            "components": [
2789              {
2790                "name": "x",
2791                "type": "uint256",
2792                "internalType": "BN254.BaseField"
2793              },
2794              {
2795                "name": "y",
2796                "type": "uint256",
2797                "internalType": "BN254.BaseField"
2798              }
2799            ]
2800          },
2801          {
2802            "name": "split2",
2803            "type": "tuple",
2804            "internalType": "struct BN254.G1Point",
2805            "components": [
2806              {
2807                "name": "x",
2808                "type": "uint256",
2809                "internalType": "BN254.BaseField"
2810              },
2811              {
2812                "name": "y",
2813                "type": "uint256",
2814                "internalType": "BN254.BaseField"
2815              }
2816            ]
2817          },
2818          {
2819            "name": "split3",
2820            "type": "tuple",
2821            "internalType": "struct BN254.G1Point",
2822            "components": [
2823              {
2824                "name": "x",
2825                "type": "uint256",
2826                "internalType": "BN254.BaseField"
2827              },
2828              {
2829                "name": "y",
2830                "type": "uint256",
2831                "internalType": "BN254.BaseField"
2832              }
2833            ]
2834          },
2835          {
2836            "name": "split4",
2837            "type": "tuple",
2838            "internalType": "struct BN254.G1Point",
2839            "components": [
2840              {
2841                "name": "x",
2842                "type": "uint256",
2843                "internalType": "BN254.BaseField"
2844              },
2845              {
2846                "name": "y",
2847                "type": "uint256",
2848                "internalType": "BN254.BaseField"
2849              }
2850            ]
2851          },
2852          {
2853            "name": "zeta",
2854            "type": "tuple",
2855            "internalType": "struct BN254.G1Point",
2856            "components": [
2857              {
2858                "name": "x",
2859                "type": "uint256",
2860                "internalType": "BN254.BaseField"
2861              },
2862              {
2863                "name": "y",
2864                "type": "uint256",
2865                "internalType": "BN254.BaseField"
2866              }
2867            ]
2868          },
2869          {
2870            "name": "zetaOmega",
2871            "type": "tuple",
2872            "internalType": "struct BN254.G1Point",
2873            "components": [
2874              {
2875                "name": "x",
2876                "type": "uint256",
2877                "internalType": "BN254.BaseField"
2878              },
2879              {
2880                "name": "y",
2881                "type": "uint256",
2882                "internalType": "BN254.BaseField"
2883              }
2884            ]
2885          },
2886          {
2887            "name": "wireEval0",
2888            "type": "uint256",
2889            "internalType": "BN254.ScalarField"
2890          },
2891          {
2892            "name": "wireEval1",
2893            "type": "uint256",
2894            "internalType": "BN254.ScalarField"
2895          },
2896          {
2897            "name": "wireEval2",
2898            "type": "uint256",
2899            "internalType": "BN254.ScalarField"
2900          },
2901          {
2902            "name": "wireEval3",
2903            "type": "uint256",
2904            "internalType": "BN254.ScalarField"
2905          },
2906          {
2907            "name": "wireEval4",
2908            "type": "uint256",
2909            "internalType": "BN254.ScalarField"
2910          },
2911          {
2912            "name": "sigmaEval0",
2913            "type": "uint256",
2914            "internalType": "BN254.ScalarField"
2915          },
2916          {
2917            "name": "sigmaEval1",
2918            "type": "uint256",
2919            "internalType": "BN254.ScalarField"
2920          },
2921          {
2922            "name": "sigmaEval2",
2923            "type": "uint256",
2924            "internalType": "BN254.ScalarField"
2925          },
2926          {
2927            "name": "sigmaEval3",
2928            "type": "uint256",
2929            "internalType": "BN254.ScalarField"
2930          },
2931          {
2932            "name": "prodPermZetaOmegaEval",
2933            "type": "uint256",
2934            "internalType": "BN254.ScalarField"
2935          }
2936        ]
2937      }
2938    ],
2939    "outputs": [
2940      {
2941        "name": "",
2942        "type": "bool",
2943        "internalType": "bool"
2944      }
2945    ],
2946    "stateMutability": "view"
2947  },
2948  {
2949    "type": "error",
2950    "name": "BN254G1AddFailed",
2951    "inputs": []
2952  },
2953  {
2954    "type": "error",
2955    "name": "BN254PairingProdFailed",
2956    "inputs": []
2957  },
2958  {
2959    "type": "error",
2960    "name": "BN254ScalarInvZero",
2961    "inputs": []
2962  },
2963  {
2964    "type": "error",
2965    "name": "BN254ScalarMulFailed",
2966    "inputs": []
2967  },
2968  {
2969    "type": "error",
2970    "name": "InvalidG1",
2971    "inputs": []
2972  },
2973  {
2974    "type": "error",
2975    "name": "InvalidPlonkArgs",
2976    "inputs": []
2977  },
2978  {
2979    "type": "error",
2980    "name": "InvalidScalar",
2981    "inputs": []
2982  },
2983  {
2984    "type": "error",
2985    "name": "PowPrecompileFailed",
2986    "inputs": []
2987  },
2988  {
2989    "type": "error",
2990    "name": "UnsupportedDegree",
2991    "inputs": []
2992  },
2993  {
2994    "type": "error",
2995    "name": "WrongPlonkVK",
2996    "inputs": []
2997  }
2998]
2999```*/
3000#[allow(
3001    non_camel_case_types,
3002    non_snake_case,
3003    clippy::pub_underscore_fields,
3004    clippy::style,
3005    clippy::empty_structs_with_brackets
3006)]
3007pub mod PlonkVerifier {
3008    use super::*;
3009    use alloy::sol_types as alloy_sol_types;
3010    /// The creation / init bytecode of the contract.
3011    ///
3012    /// ```text
3013    ///0x61217e610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004611f0c565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c684848461023d565b90505b9392505050565b80516100db90610431565b6100e88160200151610431565b6100f58160400151610431565b6101028160600151610431565b61010f8160800151610431565b61011c8160a00151610431565b6101298160c00151610431565b6101368160e00151610431565b610144816101000151610431565b610152816101200151610431565b610160816101400151610431565b61016e816101600151610431565b61017c816101800151610431565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206121525f395f51905f528110806102395760405163016c173360e21b815260040160405180910390fd5b5050565b5f8360200151600714610263576040516320fa9d8960e11b815260040160405180910390fd5b5f61026f8585856104b0565b90505f61027e865f0151610a10565b90505f610290828460a0015188610dee565b90506102ad60405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526102e18761016001516102dc8961018001518860e00151610e4b565b610eae565b91505f5f6102f18b88878c610f15565b91509150610302816102dc8461114d565b925061031b836102dc8b61016001518a60a00151610e4b565b60a08801516040880151602001519194505f5160206121525f395f51905f52918290820990508160e08a01518209905061035e856102dc8d610180015184610e4b565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061041f87826104128961114d565b61041a6111ea565b6112b7565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561046a57505050565b8251602084015182600384858586098509088382830914838210848410161693505050816104ab5760405163279e345360e21b815260040160405180910390fd5b505050565b6104f06040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206121525f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a18611be9565b816201000003610b57576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610c97576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610dd5576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e0f60405180606001604052805f81526020015f81526020015f81525090565b610e198484611368565b808252610e2990859085906113b9565b60208201528051610e3f90859084908690611428565b60408201529392505050565b604080518082019091525f8082526020820152610e66611c0d565b835181526020808501519082015260408082018490525f908360608460075afa905080610ea65760405163033b714d60e31b815260040160405180910390fd5b505092915050565b604080518082019091525f8082526020820152610ec9611c2b565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460065afa905080610ea65760405163302aedb560e11b815260040160405180910390fd5b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f610f4887878787611576565b90505f5160206121525f395f51905f525f610f64888789611a40565b9050610f7081836120f9565b60c08901516101a088015191925090819084908190830984089250610f9c856102dc8a5f015184610e4b565b955083828209905083846101c08a0151830984089250610fc4866102dc8a6020015184610e4b565b955083828209905083846101e08a0151830984089250610fec866102dc8a6040015184610e4b565b955083828209905083846102008a0151830984089250611014866102dc8a6060015184610e4b565b955083828209905083846102208a015183098408925061103c866102dc8a6080015184610e4b565b955083828209905083846102408a0151830984089250611064866102dc8d6040015184610e4b565b955083828209905083846102608a015183098408925061108c866102dc8d6060015184610e4b565b955083828209905083846102808a01518309840892506110b4866102dc8d6080015184610e4b565b955083828209905083846102a08a01518309840892506110dc866102dc8d60a0015184610e4b565b95505f8a60e00151905084856102c08b0151830985089350611106876102dc8b60a0015184610e4b565b965061113c6111366040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610e4b565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611174575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516111b89190612132565b6111e2907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476120f9565b905292915050565b61121160405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f5191508061135a5760405163c206334f60e01b815260040160405180910390fd5b50151590505b949350505050565b81515f905f5160206121525f395f51905f52908380156113a9578493505f5b8281101561139d57838586099450600101611387565b506001840393506113b0565b6001830393505b50505092915050565b5f826001036113ca575060016100c9565b815f036113d857505f6100c9565b60208401515f5160206121525f395f51905f52905f908281860990508580156114065760018703925061140d565b6001840392505b5061141782611b2b565b915082828209979650505050505050565b5f5f5160206121525f395f51905f528282036114a15760015f5b60078110156114965781860361147357868160078110611464576114646120e5565b60200201519350505050611360565b82806114815761148161211e565b60408901516020015183099150600101611442565b505f92505050611360565b6114a9611c49565b6040870151600160c0838101828152920190805b60078110156114ea5760208403935085868a85518903088309808552601f199093019291506001016114bd565b505050505f5f5f90506001838960408c01515f5b600781101561153e578882518a85518c88518a0909098981880896505088898d84518c0308860994506020938401939283019291909101906001016114fe565b50505050809250505f61155083611b2b565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206121525f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506116e38760a0015186610e4b565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506117aa866102dc8c60c0015188856117a591906120f9565b610e4b565b95506117c3866102dc8c60e001518a6101a00151610e4b565b95506117dd866102dc8c61010001518a6101c00151610e4b565b95506117f7866102dc8c61012001518a6101e00151610e4b565b9550611811866102dc8c61014001518a6102000151610e4b565b9550806101c08801516101a0890151099250611836866102dc8c610160015186610e4b565b9550806102008801516101e089015109925061185b866102dc8c610180015186610e4b565b95506101a0870151925080838409915080828309915080828409925061188a866102dc8c6101e0015186610e4b565b95506101c087015192508083840991508082830991508082840992506118b9866102dc8c610200015186610e4b565b95506101e087015192508083840991508082830991508082840992506118e8866102dc8c610220015186610e4b565b95506102008701519250808384099150808283099150808284099250611917866102dc8c610240015186610e4b565b9550611934866102dc8c6101a001516117a58b6102200151611bbd565b9550611945868b6101c00151610eae565b9550806101c08801516101a0890151099250806101e0880151840992508061020088015184099250806102208801518409925061198b866102dc8c610260015186610e4b565b9550611999885f0151611bbd565b94506119ad866102dc8960c0015188610e4b565b955080600189510860a08a01519093508190800991508082840992508083860994506119e1866102dc8960e0015188610e4b565b95508083860994506119fc866102dc89610100015188610e4b565b9550808386099450611a17866102dc89610120015188610e4b565b9550808386099450611a32866102dc89610140015188610e4b565b9a9950505050505050505050565b5f5f5f5160206121525f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f815f03611b4c5760405163d6dbbb0d60e01b815260040160405180910390fd5b5f5f5f5160206121525f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611bb657604051630c9d3e9960e21b815260040160405180910390fd5b5050919050565b5f5f5160206121525f395f51905f52821560018114611be0578382039250611bb6565b505f9392505050565b60405180606001604052805f81526020015f8152602001611c08611c49565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b5f60408284031215611cd9575f5ffd5b6040805190810167ffffffffffffffff81118282101715611cfc57611cfc611c67565b604052823581526020928301359281019290925250919050565b5f82601f830112611d25575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611d4857611d48611c67565b6040528060e0840185811115611d5c575f5ffd5b845b81811015611d76578035835260209283019201611d5e565b509195945050505050565b5f6104808284031215611d92575f5ffd5b611d9a611c7b565b9050611da68383611cc9565b8152611db58360408401611cc9565b6020820152611dc78360808401611cc9565b6040820152611dd98360c08401611cc9565b6060820152611dec836101008401611cc9565b6080820152611dff836101408401611cc9565b60a0820152611e12836101808401611cc9565b60c0820152611e25836101c08401611cc9565b60e0820152611e38836102008401611cc9565b610100820152611e4c836102408401611cc9565b610120820152611e60836102808401611cc9565b610140820152611e74836102c08401611cc9565b610160820152611e88836103008401611cc9565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215611f20575f5ffd5b610500811215611f2e575f5ffd5b50611f37611ca5565b8435815260208086013590820152611f528660408701611cc9565b6040820152611f648660808701611cc9565b6060820152611f768660c08701611cc9565b6080820152611f89866101008701611cc9565b60a0820152611f9c866101408701611cc9565b60c0820152611faf866101808701611cc9565b60e0820152611fc2866101c08701611cc9565b610100820152611fd6866102008701611cc9565b610120820152611fea866102408701611cc9565b610140820152611ffe866102808701611cc9565b610160820152612012866102c08701611cc9565b610180820152612026866103008701611cc9565b6101a082015261203a866103408701611cc9565b6101c082015261204e866103808701611cc9565b6101e0820152612062866103c08701611cc9565b610200820152612076866104008701611cc9565b61022082015261208a866104408701611cc9565b61024082015261209e866104808701611cc9565b6102608201526104c08501356102808201526104e08501356102a082015292506120cc856105008601611d16565b91506120dc856105e08601611d81565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561211857634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261214c57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a
3014    /// ```
3015    #[rustfmt::skip]
3016    #[allow(clippy::all)]
3017    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
3018        b"a!~a\x004`\x0B\x82\x82\x829\x80Q_\x1A`s\x14`(WcNH{q`\xE0\x1B_R_`\x04R`$_\xFD[0_R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a\x1F\x0CV[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02=V[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x041V[a\0\xE8\x81` \x01Qa\x041V[a\0\xF5\x81`@\x01Qa\x041V[a\x01\x02\x81``\x01Qa\x041V[a\x01\x0F\x81`\x80\x01Qa\x041V[a\x01\x1C\x81`\xA0\x01Qa\x041V[a\x01)\x81`\xC0\x01Qa\x041V[a\x016\x81`\xE0\x01Qa\x041V[a\x01D\x81a\x01\0\x01Qa\x041V[a\x01R\x81a\x01 \x01Qa\x041V[a\x01`\x81a\x01@\x01Qa\x041V[a\x01n\x81a\x01`\x01Qa\x041V[a\x01|\x81a\x01\x80\x01Qa\x041V[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a!R_9_Q\x90_R\x81\x10\x80a\x029W`@Qc\x01l\x173`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02cW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02o\x85\x85\x85a\x04\xB0V[\x90P_a\x02~\x86_\x01Qa\n\x10V[\x90P_a\x02\x90\x82\x84`\xA0\x01Q\x88a\r\xEEV[\x90Pa\x02\xAD`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x02\xE1\x87a\x01`\x01Qa\x02\xDC\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0EKV[a\x0E\xAEV[\x91P__a\x02\xF1\x8B\x88\x87\x8Ca\x0F\x15V[\x91P\x91Pa\x03\x02\x81a\x02\xDC\x84a\x11MV[\x92Pa\x03\x1B\x83a\x02\xDC\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0EKV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a!R_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03^\x85a\x02\xDC\x8Da\x01\x80\x01Q\x84a\x0EKV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04\x1F\x87\x82a\x04\x12\x89a\x11MV[a\x04\x1Aa\x11\xEAV[a\x12\xB7V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04jWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x04\xABW`@Qc'\x9E4S`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPV[a\x04\xF0`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a!R_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n\x18a\x1B\xE9V[\x81b\x01\0\0\x03a\x0BWW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\x97W`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\r\xD5W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\x0F`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E\x19\x84\x84a\x13hV[\x80\x82Ra\x0E)\x90\x85\x90\x85\x90a\x13\xB9V[` \x82\x01R\x80Qa\x0E?\x90\x85\x90\x84\x90\x86\x90a\x14(V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Efa\x1C\rV[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x80\x82\x01\x84\x90R_\x90\x83``\x84`\x07Z\xFA\x90P\x80a\x0E\xA6W`@Qc\x03;qM`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1C+V[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x80\x84\x01\x91\x90\x91R\x90\x84\x01Q``\x83\x01R_\x90\x83`\x80\x84`\x06Z\xFA\x90P\x80a\x0E\xA6W`@Qc0*\xED\xB5`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x0FH\x87\x87\x87\x87a\x15vV[\x90P_Q` a!R_9_Q\x90_R_a\x0Fd\x88\x87\x89a\x1A@V[\x90Pa\x0Fp\x81\x83a \xF9V[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x0F\x9C\x85a\x02\xDC\x8A_\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xC4\x86a\x02\xDC\x8A` \x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xEC\x86a\x02\xDC\x8A`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x14\x86a\x02\xDC\x8A``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x10<\x86a\x02\xDC\x8A`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x10d\x86a\x02\xDC\x8D`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x8C\x86a\x02\xDC\x8D``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xB4\x86a\x02\xDC\x8D`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xDC\x86a\x02\xDC\x8D`\xA0\x01Q\x84a\x0EKV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\x06\x87a\x02\xDC\x8B`\xA0\x01Q\x84a\x0EKV[\x96Pa\x11<a\x116`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0EKV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11tWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x11\xB8\x91\x90a!2V[a\x11\xE2\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa \xF9V[\x90R\x92\x91PPV[a\x12\x11`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13ZW`@Qc\xC2\x063O`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a!R_9_Q\x90_R\x90\x83\x80\x15a\x13\xA9W\x84\x93P_[\x82\x81\x10\x15a\x13\x9DW\x83\x85\x86\t\x94P`\x01\x01a\x13\x87V[P`\x01\x84\x03\x93Pa\x13\xB0V[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x13\xCAWP`\x01a\0\xC9V[\x81_\x03a\x13\xD8WP_a\0\xC9V[` \x84\x01Q_Q` a!R_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x14\x06W`\x01\x87\x03\x92Pa\x14\rV[`\x01\x84\x03\x92P[Pa\x14\x17\x82a\x1B+V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a!R_9_Q\x90_R\x82\x82\x03a\x14\xA1W`\x01_[`\x07\x81\x10\x15a\x14\x96W\x81\x86\x03a\x14sW\x86\x81`\x07\x81\x10a\x14dWa\x14da \xE5V[` \x02\x01Q\x93PPPPa\x13`V[\x82\x80a\x14\x81Wa\x14\x81a!\x1EV[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x14BV[P_\x92PPPa\x13`V[a\x14\xA9a\x1CIV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x14\xEAW` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x14\xBDV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x15>W\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x14\xFEV[PPPP\x80\x92PP_a\x15P\x83a\x1B+V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a!R_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x16\xE3\x87`\xA0\x01Q\x86a\x0EKV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x17\xAA\x86a\x02\xDC\x8C`\xC0\x01Q\x88\x85a\x17\xA5\x91\x90a \xF9V[a\x0EKV[\x95Pa\x17\xC3\x86a\x02\xDC\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0EKV[\x95Pa\x17\xDD\x86a\x02\xDC\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0EKV[\x95Pa\x17\xF7\x86a\x02\xDC\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0EKV[\x95Pa\x18\x11\x86a\x02\xDC\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0EKV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x186\x86a\x02\xDC\x8Ca\x01`\x01Q\x86a\x0EKV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x18[\x86a\x02\xDC\x8Ca\x01\x80\x01Q\x86a\x0EKV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\x8A\x86a\x02\xDC\x8Ca\x01\xE0\x01Q\x86a\x0EKV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xB9\x86a\x02\xDC\x8Ca\x02\0\x01Q\x86a\x0EKV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xE8\x86a\x02\xDC\x8Ca\x02 \x01Q\x86a\x0EKV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x17\x86a\x02\xDC\x8Ca\x02@\x01Q\x86a\x0EKV[\x95Pa\x194\x86a\x02\xDC\x8Ca\x01\xA0\x01Qa\x17\xA5\x8Ba\x02 \x01Qa\x1B\xBDV[\x95Pa\x19E\x86\x8Ba\x01\xC0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x19\x8B\x86a\x02\xDC\x8Ca\x02`\x01Q\x86a\x0EKV[\x95Pa\x19\x99\x88_\x01Qa\x1B\xBDV[\x94Pa\x19\xAD\x86a\x02\xDC\x89`\xC0\x01Q\x88a\x0EKV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x19\xE1\x86a\x02\xDC\x89`\xE0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x19\xFC\x86a\x02\xDC\x89a\x01\0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A\x17\x86a\x02\xDC\x89a\x01 \x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A2\x86a\x02\xDC\x89a\x01@\x01Q\x88a\x0EKV[\x9A\x99PPPPPPPPPPV[___Q` a!R_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[_\x81_\x03a\x1BLW`@Qc\xD6\xDB\xBB\r`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[___Q` a!R_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1B\xB6W`@Qc\x0C\x9D>\x99`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x91\x90PV[__Q` a!R_9_Q\x90_R\x82\x15`\x01\x81\x14a\x1B\xE0W\x83\x82\x03\x92Pa\x1B\xB6V[P_\x93\x92PPPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1C\x08a\x1CIV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[_`@\x82\x84\x03\x12\x15a\x1C\xD9W__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\xFCWa\x1C\xFCa\x1CgV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1D%W__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1DHWa\x1DHa\x1CgV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1D\\W__\xFD[\x84[\x81\x81\x10\x15a\x1DvW\x805\x83R` \x92\x83\x01\x92\x01a\x1D^V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1D\x92W__\xFD[a\x1D\x9Aa\x1C{V[\x90Pa\x1D\xA6\x83\x83a\x1C\xC9V[\x81Ra\x1D\xB5\x83`@\x84\x01a\x1C\xC9V[` \x82\x01Ra\x1D\xC7\x83`\x80\x84\x01a\x1C\xC9V[`@\x82\x01Ra\x1D\xD9\x83`\xC0\x84\x01a\x1C\xC9V[``\x82\x01Ra\x1D\xEC\x83a\x01\0\x84\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1D\xFF\x83a\x01@\x84\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1E\x12\x83a\x01\x80\x84\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1E%\x83a\x01\xC0\x84\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1E8\x83a\x02\0\x84\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1EL\x83a\x02@\x84\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1E`\x83a\x02\x80\x84\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1Et\x83a\x02\xC0\x84\x01a\x1C\xC9V[a\x01`\x82\x01Ra\x1E\x88\x83a\x03\0\x84\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a\x1F W__\xFD[a\x05\0\x81\x12\x15a\x1F.W__\xFD[Pa\x1F7a\x1C\xA5V[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra\x1FR\x86`@\x87\x01a\x1C\xC9V[`@\x82\x01Ra\x1Fd\x86`\x80\x87\x01a\x1C\xC9V[``\x82\x01Ra\x1Fv\x86`\xC0\x87\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1F\x89\x86a\x01\0\x87\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1F\x9C\x86a\x01@\x87\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1F\xAF\x86a\x01\x80\x87\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1F\xC2\x86a\x01\xC0\x87\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1F\xD6\x86a\x02\0\x87\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1F\xEA\x86a\x02@\x87\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1F\xFE\x86a\x02\x80\x87\x01a\x1C\xC9V[a\x01`\x82\x01Ra \x12\x86a\x02\xC0\x87\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra &\x86a\x03\0\x87\x01a\x1C\xC9V[a\x01\xA0\x82\x01Ra :\x86a\x03@\x87\x01a\x1C\xC9V[a\x01\xC0\x82\x01Ra N\x86a\x03\x80\x87\x01a\x1C\xC9V[a\x01\xE0\x82\x01Ra b\x86a\x03\xC0\x87\x01a\x1C\xC9V[a\x02\0\x82\x01Ra v\x86a\x04\0\x87\x01a\x1C\xC9V[a\x02 \x82\x01Ra \x8A\x86a\x04@\x87\x01a\x1C\xC9V[a\x02@\x82\x01Ra \x9E\x86a\x04\x80\x87\x01a\x1C\xC9V[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa \xCC\x85a\x05\0\x86\x01a\x1D\x16V[\x91Pa \xDC\x85a\x05\xE0\x86\x01a\x1D\x81V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a!\x18WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x92\x91PPV[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a!LWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08\x1C\0\n",
3019    );
3020    /// The runtime bytecode of the contract, as deployed on the network.
3021    ///
3022    /// ```text
3023    ///0x7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004611f0c565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c684848461023d565b90505b9392505050565b80516100db90610431565b6100e88160200151610431565b6100f58160400151610431565b6101028160600151610431565b61010f8160800151610431565b61011c8160a00151610431565b6101298160c00151610431565b6101368160e00151610431565b610144816101000151610431565b610152816101200151610431565b610160816101400151610431565b61016e816101600151610431565b61017c816101800151610431565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206121525f395f51905f528110806102395760405163016c173360e21b815260040160405180910390fd5b5050565b5f8360200151600714610263576040516320fa9d8960e11b815260040160405180910390fd5b5f61026f8585856104b0565b90505f61027e865f0151610a10565b90505f610290828460a0015188610dee565b90506102ad60405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526102e18761016001516102dc8961018001518860e00151610e4b565b610eae565b91505f5f6102f18b88878c610f15565b91509150610302816102dc8461114d565b925061031b836102dc8b61016001518a60a00151610e4b565b60a08801516040880151602001519194505f5160206121525f395f51905f52918290820990508160e08a01518209905061035e856102dc8d610180015184610e4b565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061041f87826104128961114d565b61041a6111ea565b6112b7565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561046a57505050565b8251602084015182600384858586098509088382830914838210848410161693505050816104ab5760405163279e345360e21b815260040160405180910390fd5b505050565b6104f06040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206121525f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a18611be9565b816201000003610b57576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610c97576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610dd5576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e0f60405180606001604052805f81526020015f81526020015f81525090565b610e198484611368565b808252610e2990859085906113b9565b60208201528051610e3f90859084908690611428565b60408201529392505050565b604080518082019091525f8082526020820152610e66611c0d565b835181526020808501519082015260408082018490525f908360608460075afa905080610ea65760405163033b714d60e31b815260040160405180910390fd5b505092915050565b604080518082019091525f8082526020820152610ec9611c2b565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460065afa905080610ea65760405163302aedb560e11b815260040160405180910390fd5b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f610f4887878787611576565b90505f5160206121525f395f51905f525f610f64888789611a40565b9050610f7081836120f9565b60c08901516101a088015191925090819084908190830984089250610f9c856102dc8a5f015184610e4b565b955083828209905083846101c08a0151830984089250610fc4866102dc8a6020015184610e4b565b955083828209905083846101e08a0151830984089250610fec866102dc8a6040015184610e4b565b955083828209905083846102008a0151830984089250611014866102dc8a6060015184610e4b565b955083828209905083846102208a015183098408925061103c866102dc8a6080015184610e4b565b955083828209905083846102408a0151830984089250611064866102dc8d6040015184610e4b565b955083828209905083846102608a015183098408925061108c866102dc8d6060015184610e4b565b955083828209905083846102808a01518309840892506110b4866102dc8d6080015184610e4b565b955083828209905083846102a08a01518309840892506110dc866102dc8d60a0015184610e4b565b95505f8a60e00151905084856102c08b0151830985089350611106876102dc8b60a0015184610e4b565b965061113c6111366040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610e4b565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611174575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516111b89190612132565b6111e2907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476120f9565b905292915050565b61121160405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f5191508061135a5760405163c206334f60e01b815260040160405180910390fd5b50151590505b949350505050565b81515f905f5160206121525f395f51905f52908380156113a9578493505f5b8281101561139d57838586099450600101611387565b506001840393506113b0565b6001830393505b50505092915050565b5f826001036113ca575060016100c9565b815f036113d857505f6100c9565b60208401515f5160206121525f395f51905f52905f908281860990508580156114065760018703925061140d565b6001840392505b5061141782611b2b565b915082828209979650505050505050565b5f5f5160206121525f395f51905f528282036114a15760015f5b60078110156114965781860361147357868160078110611464576114646120e5565b60200201519350505050611360565b82806114815761148161211e565b60408901516020015183099150600101611442565b505f92505050611360565b6114a9611c49565b6040870151600160c0838101828152920190805b60078110156114ea5760208403935085868a85518903088309808552601f199093019291506001016114bd565b505050505f5f5f90506001838960408c01515f5b600781101561153e578882518a85518c88518a0909098981880896505088898d84518c0308860994506020938401939283019291909101906001016114fe565b50505050809250505f61155083611b2b565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206121525f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506116e38760a0015186610e4b565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506117aa866102dc8c60c0015188856117a591906120f9565b610e4b565b95506117c3866102dc8c60e001518a6101a00151610e4b565b95506117dd866102dc8c61010001518a6101c00151610e4b565b95506117f7866102dc8c61012001518a6101e00151610e4b565b9550611811866102dc8c61014001518a6102000151610e4b565b9550806101c08801516101a0890151099250611836866102dc8c610160015186610e4b565b9550806102008801516101e089015109925061185b866102dc8c610180015186610e4b565b95506101a0870151925080838409915080828309915080828409925061188a866102dc8c6101e0015186610e4b565b95506101c087015192508083840991508082830991508082840992506118b9866102dc8c610200015186610e4b565b95506101e087015192508083840991508082830991508082840992506118e8866102dc8c610220015186610e4b565b95506102008701519250808384099150808283099150808284099250611917866102dc8c610240015186610e4b565b9550611934866102dc8c6101a001516117a58b6102200151611bbd565b9550611945868b6101c00151610eae565b9550806101c08801516101a0890151099250806101e0880151840992508061020088015184099250806102208801518409925061198b866102dc8c610260015186610e4b565b9550611999885f0151611bbd565b94506119ad866102dc8960c0015188610e4b565b955080600189510860a08a01519093508190800991508082840992508083860994506119e1866102dc8960e0015188610e4b565b95508083860994506119fc866102dc89610100015188610e4b565b9550808386099450611a17866102dc89610120015188610e4b565b9550808386099450611a32866102dc89610140015188610e4b565b9a9950505050505050505050565b5f5f5f5160206121525f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f815f03611b4c5760405163d6dbbb0d60e01b815260040160405180910390fd5b5f5f5f5160206121525f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611bb657604051630c9d3e9960e21b815260040160405180910390fd5b5050919050565b5f5f5160206121525f395f51905f52821560018114611be0578382039250611bb6565b505f9392505050565b60405180606001604052805f81526020015f8152602001611c08611c49565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b5f60408284031215611cd9575f5ffd5b6040805190810167ffffffffffffffff81118282101715611cfc57611cfc611c67565b604052823581526020928301359281019290925250919050565b5f82601f830112611d25575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611d4857611d48611c67565b6040528060e0840185811115611d5c575f5ffd5b845b81811015611d76578035835260209283019201611d5e565b509195945050505050565b5f6104808284031215611d92575f5ffd5b611d9a611c7b565b9050611da68383611cc9565b8152611db58360408401611cc9565b6020820152611dc78360808401611cc9565b6040820152611dd98360c08401611cc9565b6060820152611dec836101008401611cc9565b6080820152611dff836101408401611cc9565b60a0820152611e12836101808401611cc9565b60c0820152611e25836101c08401611cc9565b60e0820152611e38836102008401611cc9565b610100820152611e4c836102408401611cc9565b610120820152611e60836102808401611cc9565b610140820152611e74836102c08401611cc9565b610160820152611e88836103008401611cc9565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215611f20575f5ffd5b610500811215611f2e575f5ffd5b50611f37611ca5565b8435815260208086013590820152611f528660408701611cc9565b6040820152611f648660808701611cc9565b6060820152611f768660c08701611cc9565b6080820152611f89866101008701611cc9565b60a0820152611f9c866101408701611cc9565b60c0820152611faf866101808701611cc9565b60e0820152611fc2866101c08701611cc9565b610100820152611fd6866102008701611cc9565b610120820152611fea866102408701611cc9565b610140820152611ffe866102808701611cc9565b610160820152612012866102c08701611cc9565b610180820152612026866103008701611cc9565b6101a082015261203a866103408701611cc9565b6101c082015261204e866103808701611cc9565b6101e0820152612062866103c08701611cc9565b610200820152612076866104008701611cc9565b61022082015261208a866104408701611cc9565b61024082015261209e866104808701611cc9565b6102608201526104c08501356102808201526104e08501356102a082015292506120cc856105008601611d16565b91506120dc856105e08601611d81565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561211857634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261214c57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a
3024    /// ```
3025    #[rustfmt::skip]
3026    #[allow(clippy::all)]
3027    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
3028        b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a\x1F\x0CV[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02=V[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x041V[a\0\xE8\x81` \x01Qa\x041V[a\0\xF5\x81`@\x01Qa\x041V[a\x01\x02\x81``\x01Qa\x041V[a\x01\x0F\x81`\x80\x01Qa\x041V[a\x01\x1C\x81`\xA0\x01Qa\x041V[a\x01)\x81`\xC0\x01Qa\x041V[a\x016\x81`\xE0\x01Qa\x041V[a\x01D\x81a\x01\0\x01Qa\x041V[a\x01R\x81a\x01 \x01Qa\x041V[a\x01`\x81a\x01@\x01Qa\x041V[a\x01n\x81a\x01`\x01Qa\x041V[a\x01|\x81a\x01\x80\x01Qa\x041V[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a!R_9_Q\x90_R\x81\x10\x80a\x029W`@Qc\x01l\x173`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02cW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02o\x85\x85\x85a\x04\xB0V[\x90P_a\x02~\x86_\x01Qa\n\x10V[\x90P_a\x02\x90\x82\x84`\xA0\x01Q\x88a\r\xEEV[\x90Pa\x02\xAD`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x02\xE1\x87a\x01`\x01Qa\x02\xDC\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0EKV[a\x0E\xAEV[\x91P__a\x02\xF1\x8B\x88\x87\x8Ca\x0F\x15V[\x91P\x91Pa\x03\x02\x81a\x02\xDC\x84a\x11MV[\x92Pa\x03\x1B\x83a\x02\xDC\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0EKV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a!R_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03^\x85a\x02\xDC\x8Da\x01\x80\x01Q\x84a\x0EKV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04\x1F\x87\x82a\x04\x12\x89a\x11MV[a\x04\x1Aa\x11\xEAV[a\x12\xB7V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04jWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x04\xABW`@Qc'\x9E4S`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPV[a\x04\xF0`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a!R_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n\x18a\x1B\xE9V[\x81b\x01\0\0\x03a\x0BWW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\x97W`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\r\xD5W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\x0F`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E\x19\x84\x84a\x13hV[\x80\x82Ra\x0E)\x90\x85\x90\x85\x90a\x13\xB9V[` \x82\x01R\x80Qa\x0E?\x90\x85\x90\x84\x90\x86\x90a\x14(V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Efa\x1C\rV[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x80\x82\x01\x84\x90R_\x90\x83``\x84`\x07Z\xFA\x90P\x80a\x0E\xA6W`@Qc\x03;qM`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1C+V[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x80\x84\x01\x91\x90\x91R\x90\x84\x01Q``\x83\x01R_\x90\x83`\x80\x84`\x06Z\xFA\x90P\x80a\x0E\xA6W`@Qc0*\xED\xB5`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x0FH\x87\x87\x87\x87a\x15vV[\x90P_Q` a!R_9_Q\x90_R_a\x0Fd\x88\x87\x89a\x1A@V[\x90Pa\x0Fp\x81\x83a \xF9V[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x0F\x9C\x85a\x02\xDC\x8A_\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xC4\x86a\x02\xDC\x8A` \x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xEC\x86a\x02\xDC\x8A`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x14\x86a\x02\xDC\x8A``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x10<\x86a\x02\xDC\x8A`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x10d\x86a\x02\xDC\x8D`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x8C\x86a\x02\xDC\x8D``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xB4\x86a\x02\xDC\x8D`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xDC\x86a\x02\xDC\x8D`\xA0\x01Q\x84a\x0EKV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\x06\x87a\x02\xDC\x8B`\xA0\x01Q\x84a\x0EKV[\x96Pa\x11<a\x116`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0EKV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11tWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x11\xB8\x91\x90a!2V[a\x11\xE2\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa \xF9V[\x90R\x92\x91PPV[a\x12\x11`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13ZW`@Qc\xC2\x063O`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a!R_9_Q\x90_R\x90\x83\x80\x15a\x13\xA9W\x84\x93P_[\x82\x81\x10\x15a\x13\x9DW\x83\x85\x86\t\x94P`\x01\x01a\x13\x87V[P`\x01\x84\x03\x93Pa\x13\xB0V[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x13\xCAWP`\x01a\0\xC9V[\x81_\x03a\x13\xD8WP_a\0\xC9V[` \x84\x01Q_Q` a!R_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x14\x06W`\x01\x87\x03\x92Pa\x14\rV[`\x01\x84\x03\x92P[Pa\x14\x17\x82a\x1B+V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a!R_9_Q\x90_R\x82\x82\x03a\x14\xA1W`\x01_[`\x07\x81\x10\x15a\x14\x96W\x81\x86\x03a\x14sW\x86\x81`\x07\x81\x10a\x14dWa\x14da \xE5V[` \x02\x01Q\x93PPPPa\x13`V[\x82\x80a\x14\x81Wa\x14\x81a!\x1EV[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x14BV[P_\x92PPPa\x13`V[a\x14\xA9a\x1CIV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x14\xEAW` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x14\xBDV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x15>W\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x14\xFEV[PPPP\x80\x92PP_a\x15P\x83a\x1B+V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a!R_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x16\xE3\x87`\xA0\x01Q\x86a\x0EKV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x17\xAA\x86a\x02\xDC\x8C`\xC0\x01Q\x88\x85a\x17\xA5\x91\x90a \xF9V[a\x0EKV[\x95Pa\x17\xC3\x86a\x02\xDC\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0EKV[\x95Pa\x17\xDD\x86a\x02\xDC\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0EKV[\x95Pa\x17\xF7\x86a\x02\xDC\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0EKV[\x95Pa\x18\x11\x86a\x02\xDC\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0EKV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x186\x86a\x02\xDC\x8Ca\x01`\x01Q\x86a\x0EKV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x18[\x86a\x02\xDC\x8Ca\x01\x80\x01Q\x86a\x0EKV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\x8A\x86a\x02\xDC\x8Ca\x01\xE0\x01Q\x86a\x0EKV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xB9\x86a\x02\xDC\x8Ca\x02\0\x01Q\x86a\x0EKV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xE8\x86a\x02\xDC\x8Ca\x02 \x01Q\x86a\x0EKV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x17\x86a\x02\xDC\x8Ca\x02@\x01Q\x86a\x0EKV[\x95Pa\x194\x86a\x02\xDC\x8Ca\x01\xA0\x01Qa\x17\xA5\x8Ba\x02 \x01Qa\x1B\xBDV[\x95Pa\x19E\x86\x8Ba\x01\xC0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x19\x8B\x86a\x02\xDC\x8Ca\x02`\x01Q\x86a\x0EKV[\x95Pa\x19\x99\x88_\x01Qa\x1B\xBDV[\x94Pa\x19\xAD\x86a\x02\xDC\x89`\xC0\x01Q\x88a\x0EKV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x19\xE1\x86a\x02\xDC\x89`\xE0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x19\xFC\x86a\x02\xDC\x89a\x01\0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A\x17\x86a\x02\xDC\x89a\x01 \x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A2\x86a\x02\xDC\x89a\x01@\x01Q\x88a\x0EKV[\x9A\x99PPPPPPPPPPV[___Q` a!R_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[_\x81_\x03a\x1BLW`@Qc\xD6\xDB\xBB\r`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[___Q` a!R_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1B\xB6W`@Qc\x0C\x9D>\x99`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x91\x90PV[__Q` a!R_9_Q\x90_R\x82\x15`\x01\x81\x14a\x1B\xE0W\x83\x82\x03\x92Pa\x1B\xB6V[P_\x93\x92PPPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1C\x08a\x1CIV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[_`@\x82\x84\x03\x12\x15a\x1C\xD9W__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\xFCWa\x1C\xFCa\x1CgV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1D%W__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1DHWa\x1DHa\x1CgV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1D\\W__\xFD[\x84[\x81\x81\x10\x15a\x1DvW\x805\x83R` \x92\x83\x01\x92\x01a\x1D^V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1D\x92W__\xFD[a\x1D\x9Aa\x1C{V[\x90Pa\x1D\xA6\x83\x83a\x1C\xC9V[\x81Ra\x1D\xB5\x83`@\x84\x01a\x1C\xC9V[` \x82\x01Ra\x1D\xC7\x83`\x80\x84\x01a\x1C\xC9V[`@\x82\x01Ra\x1D\xD9\x83`\xC0\x84\x01a\x1C\xC9V[``\x82\x01Ra\x1D\xEC\x83a\x01\0\x84\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1D\xFF\x83a\x01@\x84\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1E\x12\x83a\x01\x80\x84\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1E%\x83a\x01\xC0\x84\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1E8\x83a\x02\0\x84\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1EL\x83a\x02@\x84\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1E`\x83a\x02\x80\x84\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1Et\x83a\x02\xC0\x84\x01a\x1C\xC9V[a\x01`\x82\x01Ra\x1E\x88\x83a\x03\0\x84\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a\x1F W__\xFD[a\x05\0\x81\x12\x15a\x1F.W__\xFD[Pa\x1F7a\x1C\xA5V[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra\x1FR\x86`@\x87\x01a\x1C\xC9V[`@\x82\x01Ra\x1Fd\x86`\x80\x87\x01a\x1C\xC9V[``\x82\x01Ra\x1Fv\x86`\xC0\x87\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1F\x89\x86a\x01\0\x87\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1F\x9C\x86a\x01@\x87\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1F\xAF\x86a\x01\x80\x87\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1F\xC2\x86a\x01\xC0\x87\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1F\xD6\x86a\x02\0\x87\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1F\xEA\x86a\x02@\x87\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1F\xFE\x86a\x02\x80\x87\x01a\x1C\xC9V[a\x01`\x82\x01Ra \x12\x86a\x02\xC0\x87\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra &\x86a\x03\0\x87\x01a\x1C\xC9V[a\x01\xA0\x82\x01Ra :\x86a\x03@\x87\x01a\x1C\xC9V[a\x01\xC0\x82\x01Ra N\x86a\x03\x80\x87\x01a\x1C\xC9V[a\x01\xE0\x82\x01Ra b\x86a\x03\xC0\x87\x01a\x1C\xC9V[a\x02\0\x82\x01Ra v\x86a\x04\0\x87\x01a\x1C\xC9V[a\x02 \x82\x01Ra \x8A\x86a\x04@\x87\x01a\x1C\xC9V[a\x02@\x82\x01Ra \x9E\x86a\x04\x80\x87\x01a\x1C\xC9V[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa \xCC\x85a\x05\0\x86\x01a\x1D\x16V[\x91Pa \xDC\x85a\x05\xE0\x86\x01a\x1D\x81V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a!\x18WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x92\x91PPV[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a!LWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08\x1C\0\n",
3029    );
3030    #[derive(serde::Serialize, serde::Deserialize)]
3031    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3032    /**Custom error with signature `BN254G1AddFailed()` and selector `0x6055db6a`.
3033```solidity
3034error BN254G1AddFailed();
3035```*/
3036    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3037    #[derive(Clone)]
3038    pub struct BN254G1AddFailed;
3039    #[allow(
3040        non_camel_case_types,
3041        non_snake_case,
3042        clippy::pub_underscore_fields,
3043        clippy::style
3044    )]
3045    const _: () = {
3046        use alloy::sol_types as alloy_sol_types;
3047        #[doc(hidden)]
3048        #[allow(dead_code)]
3049        type UnderlyingSolTuple<'a> = ();
3050        #[doc(hidden)]
3051        type UnderlyingRustTuple<'a> = ();
3052        #[cfg(test)]
3053        #[allow(dead_code, unreachable_patterns)]
3054        fn _type_assertion(
3055            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3056        ) {
3057            match _t {
3058                alloy_sol_types::private::AssertTypeEq::<
3059                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3060                >(_) => {}
3061            }
3062        }
3063        #[automatically_derived]
3064        #[doc(hidden)]
3065        impl ::core::convert::From<BN254G1AddFailed> for UnderlyingRustTuple<'_> {
3066            fn from(value: BN254G1AddFailed) -> Self {
3067                ()
3068            }
3069        }
3070        #[automatically_derived]
3071        #[doc(hidden)]
3072        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254G1AddFailed {
3073            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3074                Self
3075            }
3076        }
3077        #[automatically_derived]
3078        impl alloy_sol_types::SolError for BN254G1AddFailed {
3079            type Parameters<'a> = UnderlyingSolTuple<'a>;
3080            type Token<'a> = <Self::Parameters<
3081                'a,
3082            > as alloy_sol_types::SolType>::Token<'a>;
3083            const SIGNATURE: &'static str = "BN254G1AddFailed()";
3084            const SELECTOR: [u8; 4] = [96u8, 85u8, 219u8, 106u8];
3085            #[inline]
3086            fn new<'a>(
3087                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3088            ) -> Self {
3089                tuple.into()
3090            }
3091            #[inline]
3092            fn tokenize(&self) -> Self::Token<'_> {
3093                ()
3094            }
3095            #[inline]
3096            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3097                <Self::Parameters<
3098                    '_,
3099                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3100                    .map(Self::new)
3101            }
3102        }
3103    };
3104    #[derive(serde::Serialize, serde::Deserialize)]
3105    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3106    /**Custom error with signature `BN254PairingProdFailed()` and selector `0xc206334f`.
3107```solidity
3108error BN254PairingProdFailed();
3109```*/
3110    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3111    #[derive(Clone)]
3112    pub struct BN254PairingProdFailed;
3113    #[allow(
3114        non_camel_case_types,
3115        non_snake_case,
3116        clippy::pub_underscore_fields,
3117        clippy::style
3118    )]
3119    const _: () = {
3120        use alloy::sol_types as alloy_sol_types;
3121        #[doc(hidden)]
3122        #[allow(dead_code)]
3123        type UnderlyingSolTuple<'a> = ();
3124        #[doc(hidden)]
3125        type UnderlyingRustTuple<'a> = ();
3126        #[cfg(test)]
3127        #[allow(dead_code, unreachable_patterns)]
3128        fn _type_assertion(
3129            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3130        ) {
3131            match _t {
3132                alloy_sol_types::private::AssertTypeEq::<
3133                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3134                >(_) => {}
3135            }
3136        }
3137        #[automatically_derived]
3138        #[doc(hidden)]
3139        impl ::core::convert::From<BN254PairingProdFailed> for UnderlyingRustTuple<'_> {
3140            fn from(value: BN254PairingProdFailed) -> Self {
3141                ()
3142            }
3143        }
3144        #[automatically_derived]
3145        #[doc(hidden)]
3146        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254PairingProdFailed {
3147            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3148                Self
3149            }
3150        }
3151        #[automatically_derived]
3152        impl alloy_sol_types::SolError for BN254PairingProdFailed {
3153            type Parameters<'a> = UnderlyingSolTuple<'a>;
3154            type Token<'a> = <Self::Parameters<
3155                'a,
3156            > as alloy_sol_types::SolType>::Token<'a>;
3157            const SIGNATURE: &'static str = "BN254PairingProdFailed()";
3158            const SELECTOR: [u8; 4] = [194u8, 6u8, 51u8, 79u8];
3159            #[inline]
3160            fn new<'a>(
3161                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3162            ) -> Self {
3163                tuple.into()
3164            }
3165            #[inline]
3166            fn tokenize(&self) -> Self::Token<'_> {
3167                ()
3168            }
3169            #[inline]
3170            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3171                <Self::Parameters<
3172                    '_,
3173                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3174                    .map(Self::new)
3175            }
3176        }
3177    };
3178    #[derive(serde::Serialize, serde::Deserialize)]
3179    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3180    /**Custom error with signature `BN254ScalarInvZero()` and selector `0xd6dbbb0d`.
3181```solidity
3182error BN254ScalarInvZero();
3183```*/
3184    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3185    #[derive(Clone)]
3186    pub struct BN254ScalarInvZero;
3187    #[allow(
3188        non_camel_case_types,
3189        non_snake_case,
3190        clippy::pub_underscore_fields,
3191        clippy::style
3192    )]
3193    const _: () = {
3194        use alloy::sol_types as alloy_sol_types;
3195        #[doc(hidden)]
3196        #[allow(dead_code)]
3197        type UnderlyingSolTuple<'a> = ();
3198        #[doc(hidden)]
3199        type UnderlyingRustTuple<'a> = ();
3200        #[cfg(test)]
3201        #[allow(dead_code, unreachable_patterns)]
3202        fn _type_assertion(
3203            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3204        ) {
3205            match _t {
3206                alloy_sol_types::private::AssertTypeEq::<
3207                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3208                >(_) => {}
3209            }
3210        }
3211        #[automatically_derived]
3212        #[doc(hidden)]
3213        impl ::core::convert::From<BN254ScalarInvZero> for UnderlyingRustTuple<'_> {
3214            fn from(value: BN254ScalarInvZero) -> Self {
3215                ()
3216            }
3217        }
3218        #[automatically_derived]
3219        #[doc(hidden)]
3220        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254ScalarInvZero {
3221            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3222                Self
3223            }
3224        }
3225        #[automatically_derived]
3226        impl alloy_sol_types::SolError for BN254ScalarInvZero {
3227            type Parameters<'a> = UnderlyingSolTuple<'a>;
3228            type Token<'a> = <Self::Parameters<
3229                'a,
3230            > as alloy_sol_types::SolType>::Token<'a>;
3231            const SIGNATURE: &'static str = "BN254ScalarInvZero()";
3232            const SELECTOR: [u8; 4] = [214u8, 219u8, 187u8, 13u8];
3233            #[inline]
3234            fn new<'a>(
3235                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3236            ) -> Self {
3237                tuple.into()
3238            }
3239            #[inline]
3240            fn tokenize(&self) -> Self::Token<'_> {
3241                ()
3242            }
3243            #[inline]
3244            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3245                <Self::Parameters<
3246                    '_,
3247                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3248                    .map(Self::new)
3249            }
3250        }
3251    };
3252    #[derive(serde::Serialize, serde::Deserialize)]
3253    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3254    /**Custom error with signature `BN254ScalarMulFailed()` and selector `0x19db8a68`.
3255```solidity
3256error BN254ScalarMulFailed();
3257```*/
3258    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3259    #[derive(Clone)]
3260    pub struct BN254ScalarMulFailed;
3261    #[allow(
3262        non_camel_case_types,
3263        non_snake_case,
3264        clippy::pub_underscore_fields,
3265        clippy::style
3266    )]
3267    const _: () = {
3268        use alloy::sol_types as alloy_sol_types;
3269        #[doc(hidden)]
3270        #[allow(dead_code)]
3271        type UnderlyingSolTuple<'a> = ();
3272        #[doc(hidden)]
3273        type UnderlyingRustTuple<'a> = ();
3274        #[cfg(test)]
3275        #[allow(dead_code, unreachable_patterns)]
3276        fn _type_assertion(
3277            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3278        ) {
3279            match _t {
3280                alloy_sol_types::private::AssertTypeEq::<
3281                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3282                >(_) => {}
3283            }
3284        }
3285        #[automatically_derived]
3286        #[doc(hidden)]
3287        impl ::core::convert::From<BN254ScalarMulFailed> for UnderlyingRustTuple<'_> {
3288            fn from(value: BN254ScalarMulFailed) -> Self {
3289                ()
3290            }
3291        }
3292        #[automatically_derived]
3293        #[doc(hidden)]
3294        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254ScalarMulFailed {
3295            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3296                Self
3297            }
3298        }
3299        #[automatically_derived]
3300        impl alloy_sol_types::SolError for BN254ScalarMulFailed {
3301            type Parameters<'a> = UnderlyingSolTuple<'a>;
3302            type Token<'a> = <Self::Parameters<
3303                'a,
3304            > as alloy_sol_types::SolType>::Token<'a>;
3305            const SIGNATURE: &'static str = "BN254ScalarMulFailed()";
3306            const SELECTOR: [u8; 4] = [25u8, 219u8, 138u8, 104u8];
3307            #[inline]
3308            fn new<'a>(
3309                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3310            ) -> Self {
3311                tuple.into()
3312            }
3313            #[inline]
3314            fn tokenize(&self) -> Self::Token<'_> {
3315                ()
3316            }
3317            #[inline]
3318            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3319                <Self::Parameters<
3320                    '_,
3321                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3322                    .map(Self::new)
3323            }
3324        }
3325    };
3326    #[derive(serde::Serialize, serde::Deserialize)]
3327    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3328    /**Custom error with signature `InvalidG1()` and selector `0x9e78d14c`.
3329```solidity
3330error InvalidG1();
3331```*/
3332    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3333    #[derive(Clone)]
3334    pub struct InvalidG1;
3335    #[allow(
3336        non_camel_case_types,
3337        non_snake_case,
3338        clippy::pub_underscore_fields,
3339        clippy::style
3340    )]
3341    const _: () = {
3342        use alloy::sol_types as alloy_sol_types;
3343        #[doc(hidden)]
3344        #[allow(dead_code)]
3345        type UnderlyingSolTuple<'a> = ();
3346        #[doc(hidden)]
3347        type UnderlyingRustTuple<'a> = ();
3348        #[cfg(test)]
3349        #[allow(dead_code, unreachable_patterns)]
3350        fn _type_assertion(
3351            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3352        ) {
3353            match _t {
3354                alloy_sol_types::private::AssertTypeEq::<
3355                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3356                >(_) => {}
3357            }
3358        }
3359        #[automatically_derived]
3360        #[doc(hidden)]
3361        impl ::core::convert::From<InvalidG1> for UnderlyingRustTuple<'_> {
3362            fn from(value: InvalidG1) -> Self {
3363                ()
3364            }
3365        }
3366        #[automatically_derived]
3367        #[doc(hidden)]
3368        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidG1 {
3369            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3370                Self
3371            }
3372        }
3373        #[automatically_derived]
3374        impl alloy_sol_types::SolError for InvalidG1 {
3375            type Parameters<'a> = UnderlyingSolTuple<'a>;
3376            type Token<'a> = <Self::Parameters<
3377                'a,
3378            > as alloy_sol_types::SolType>::Token<'a>;
3379            const SIGNATURE: &'static str = "InvalidG1()";
3380            const SELECTOR: [u8; 4] = [158u8, 120u8, 209u8, 76u8];
3381            #[inline]
3382            fn new<'a>(
3383                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3384            ) -> Self {
3385                tuple.into()
3386            }
3387            #[inline]
3388            fn tokenize(&self) -> Self::Token<'_> {
3389                ()
3390            }
3391            #[inline]
3392            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3393                <Self::Parameters<
3394                    '_,
3395                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3396                    .map(Self::new)
3397            }
3398        }
3399    };
3400    #[derive(serde::Serialize, serde::Deserialize)]
3401    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3402    /**Custom error with signature `InvalidPlonkArgs()` and selector `0xfd9a2d1b`.
3403```solidity
3404error InvalidPlonkArgs();
3405```*/
3406    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3407    #[derive(Clone)]
3408    pub struct InvalidPlonkArgs;
3409    #[allow(
3410        non_camel_case_types,
3411        non_snake_case,
3412        clippy::pub_underscore_fields,
3413        clippy::style
3414    )]
3415    const _: () = {
3416        use alloy::sol_types as alloy_sol_types;
3417        #[doc(hidden)]
3418        #[allow(dead_code)]
3419        type UnderlyingSolTuple<'a> = ();
3420        #[doc(hidden)]
3421        type UnderlyingRustTuple<'a> = ();
3422        #[cfg(test)]
3423        #[allow(dead_code, unreachable_patterns)]
3424        fn _type_assertion(
3425            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3426        ) {
3427            match _t {
3428                alloy_sol_types::private::AssertTypeEq::<
3429                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3430                >(_) => {}
3431            }
3432        }
3433        #[automatically_derived]
3434        #[doc(hidden)]
3435        impl ::core::convert::From<InvalidPlonkArgs> for UnderlyingRustTuple<'_> {
3436            fn from(value: InvalidPlonkArgs) -> Self {
3437                ()
3438            }
3439        }
3440        #[automatically_derived]
3441        #[doc(hidden)]
3442        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidPlonkArgs {
3443            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3444                Self
3445            }
3446        }
3447        #[automatically_derived]
3448        impl alloy_sol_types::SolError for InvalidPlonkArgs {
3449            type Parameters<'a> = UnderlyingSolTuple<'a>;
3450            type Token<'a> = <Self::Parameters<
3451                'a,
3452            > as alloy_sol_types::SolType>::Token<'a>;
3453            const SIGNATURE: &'static str = "InvalidPlonkArgs()";
3454            const SELECTOR: [u8; 4] = [253u8, 154u8, 45u8, 27u8];
3455            #[inline]
3456            fn new<'a>(
3457                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3458            ) -> Self {
3459                tuple.into()
3460            }
3461            #[inline]
3462            fn tokenize(&self) -> Self::Token<'_> {
3463                ()
3464            }
3465            #[inline]
3466            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3467                <Self::Parameters<
3468                    '_,
3469                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3470                    .map(Self::new)
3471            }
3472        }
3473    };
3474    #[derive(serde::Serialize, serde::Deserialize)]
3475    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3476    /**Custom error with signature `InvalidScalar()` and selector `0x05b05ccc`.
3477```solidity
3478error InvalidScalar();
3479```*/
3480    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3481    #[derive(Clone)]
3482    pub struct InvalidScalar;
3483    #[allow(
3484        non_camel_case_types,
3485        non_snake_case,
3486        clippy::pub_underscore_fields,
3487        clippy::style
3488    )]
3489    const _: () = {
3490        use alloy::sol_types as alloy_sol_types;
3491        #[doc(hidden)]
3492        #[allow(dead_code)]
3493        type UnderlyingSolTuple<'a> = ();
3494        #[doc(hidden)]
3495        type UnderlyingRustTuple<'a> = ();
3496        #[cfg(test)]
3497        #[allow(dead_code, unreachable_patterns)]
3498        fn _type_assertion(
3499            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3500        ) {
3501            match _t {
3502                alloy_sol_types::private::AssertTypeEq::<
3503                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3504                >(_) => {}
3505            }
3506        }
3507        #[automatically_derived]
3508        #[doc(hidden)]
3509        impl ::core::convert::From<InvalidScalar> for UnderlyingRustTuple<'_> {
3510            fn from(value: InvalidScalar) -> Self {
3511                ()
3512            }
3513        }
3514        #[automatically_derived]
3515        #[doc(hidden)]
3516        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidScalar {
3517            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3518                Self
3519            }
3520        }
3521        #[automatically_derived]
3522        impl alloy_sol_types::SolError for InvalidScalar {
3523            type Parameters<'a> = UnderlyingSolTuple<'a>;
3524            type Token<'a> = <Self::Parameters<
3525                'a,
3526            > as alloy_sol_types::SolType>::Token<'a>;
3527            const SIGNATURE: &'static str = "InvalidScalar()";
3528            const SELECTOR: [u8; 4] = [5u8, 176u8, 92u8, 204u8];
3529            #[inline]
3530            fn new<'a>(
3531                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3532            ) -> Self {
3533                tuple.into()
3534            }
3535            #[inline]
3536            fn tokenize(&self) -> Self::Token<'_> {
3537                ()
3538            }
3539            #[inline]
3540            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3541                <Self::Parameters<
3542                    '_,
3543                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3544                    .map(Self::new)
3545            }
3546        }
3547    };
3548    #[derive(serde::Serialize, serde::Deserialize)]
3549    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3550    /**Custom error with signature `PowPrecompileFailed()` and selector `0x3274fa64`.
3551```solidity
3552error PowPrecompileFailed();
3553```*/
3554    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3555    #[derive(Clone)]
3556    pub struct PowPrecompileFailed;
3557    #[allow(
3558        non_camel_case_types,
3559        non_snake_case,
3560        clippy::pub_underscore_fields,
3561        clippy::style
3562    )]
3563    const _: () = {
3564        use alloy::sol_types as alloy_sol_types;
3565        #[doc(hidden)]
3566        #[allow(dead_code)]
3567        type UnderlyingSolTuple<'a> = ();
3568        #[doc(hidden)]
3569        type UnderlyingRustTuple<'a> = ();
3570        #[cfg(test)]
3571        #[allow(dead_code, unreachable_patterns)]
3572        fn _type_assertion(
3573            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3574        ) {
3575            match _t {
3576                alloy_sol_types::private::AssertTypeEq::<
3577                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3578                >(_) => {}
3579            }
3580        }
3581        #[automatically_derived]
3582        #[doc(hidden)]
3583        impl ::core::convert::From<PowPrecompileFailed> for UnderlyingRustTuple<'_> {
3584            fn from(value: PowPrecompileFailed) -> Self {
3585                ()
3586            }
3587        }
3588        #[automatically_derived]
3589        #[doc(hidden)]
3590        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PowPrecompileFailed {
3591            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3592                Self
3593            }
3594        }
3595        #[automatically_derived]
3596        impl alloy_sol_types::SolError for PowPrecompileFailed {
3597            type Parameters<'a> = UnderlyingSolTuple<'a>;
3598            type Token<'a> = <Self::Parameters<
3599                'a,
3600            > as alloy_sol_types::SolType>::Token<'a>;
3601            const SIGNATURE: &'static str = "PowPrecompileFailed()";
3602            const SELECTOR: [u8; 4] = [50u8, 116u8, 250u8, 100u8];
3603            #[inline]
3604            fn new<'a>(
3605                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3606            ) -> Self {
3607                tuple.into()
3608            }
3609            #[inline]
3610            fn tokenize(&self) -> Self::Token<'_> {
3611                ()
3612            }
3613            #[inline]
3614            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3615                <Self::Parameters<
3616                    '_,
3617                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3618                    .map(Self::new)
3619            }
3620        }
3621    };
3622    #[derive(serde::Serialize, serde::Deserialize)]
3623    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3624    /**Custom error with signature `UnsupportedDegree()` and selector `0xe2ef09e5`.
3625```solidity
3626error UnsupportedDegree();
3627```*/
3628    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3629    #[derive(Clone)]
3630    pub struct UnsupportedDegree;
3631    #[allow(
3632        non_camel_case_types,
3633        non_snake_case,
3634        clippy::pub_underscore_fields,
3635        clippy::style
3636    )]
3637    const _: () = {
3638        use alloy::sol_types as alloy_sol_types;
3639        #[doc(hidden)]
3640        #[allow(dead_code)]
3641        type UnderlyingSolTuple<'a> = ();
3642        #[doc(hidden)]
3643        type UnderlyingRustTuple<'a> = ();
3644        #[cfg(test)]
3645        #[allow(dead_code, unreachable_patterns)]
3646        fn _type_assertion(
3647            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3648        ) {
3649            match _t {
3650                alloy_sol_types::private::AssertTypeEq::<
3651                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3652                >(_) => {}
3653            }
3654        }
3655        #[automatically_derived]
3656        #[doc(hidden)]
3657        impl ::core::convert::From<UnsupportedDegree> for UnderlyingRustTuple<'_> {
3658            fn from(value: UnsupportedDegree) -> Self {
3659                ()
3660            }
3661        }
3662        #[automatically_derived]
3663        #[doc(hidden)]
3664        impl ::core::convert::From<UnderlyingRustTuple<'_>> for UnsupportedDegree {
3665            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3666                Self
3667            }
3668        }
3669        #[automatically_derived]
3670        impl alloy_sol_types::SolError for UnsupportedDegree {
3671            type Parameters<'a> = UnderlyingSolTuple<'a>;
3672            type Token<'a> = <Self::Parameters<
3673                'a,
3674            > as alloy_sol_types::SolType>::Token<'a>;
3675            const SIGNATURE: &'static str = "UnsupportedDegree()";
3676            const SELECTOR: [u8; 4] = [226u8, 239u8, 9u8, 229u8];
3677            #[inline]
3678            fn new<'a>(
3679                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3680            ) -> Self {
3681                tuple.into()
3682            }
3683            #[inline]
3684            fn tokenize(&self) -> Self::Token<'_> {
3685                ()
3686            }
3687            #[inline]
3688            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3689                <Self::Parameters<
3690                    '_,
3691                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3692                    .map(Self::new)
3693            }
3694        }
3695    };
3696    #[derive(serde::Serialize, serde::Deserialize)]
3697    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3698    /**Custom error with signature `WrongPlonkVK()` and selector `0x41f53b12`.
3699```solidity
3700error WrongPlonkVK();
3701```*/
3702    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3703    #[derive(Clone)]
3704    pub struct WrongPlonkVK;
3705    #[allow(
3706        non_camel_case_types,
3707        non_snake_case,
3708        clippy::pub_underscore_fields,
3709        clippy::style
3710    )]
3711    const _: () = {
3712        use alloy::sol_types as alloy_sol_types;
3713        #[doc(hidden)]
3714        #[allow(dead_code)]
3715        type UnderlyingSolTuple<'a> = ();
3716        #[doc(hidden)]
3717        type UnderlyingRustTuple<'a> = ();
3718        #[cfg(test)]
3719        #[allow(dead_code, unreachable_patterns)]
3720        fn _type_assertion(
3721            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3722        ) {
3723            match _t {
3724                alloy_sol_types::private::AssertTypeEq::<
3725                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3726                >(_) => {}
3727            }
3728        }
3729        #[automatically_derived]
3730        #[doc(hidden)]
3731        impl ::core::convert::From<WrongPlonkVK> for UnderlyingRustTuple<'_> {
3732            fn from(value: WrongPlonkVK) -> Self {
3733                ()
3734            }
3735        }
3736        #[automatically_derived]
3737        #[doc(hidden)]
3738        impl ::core::convert::From<UnderlyingRustTuple<'_>> for WrongPlonkVK {
3739            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3740                Self
3741            }
3742        }
3743        #[automatically_derived]
3744        impl alloy_sol_types::SolError for WrongPlonkVK {
3745            type Parameters<'a> = UnderlyingSolTuple<'a>;
3746            type Token<'a> = <Self::Parameters<
3747                'a,
3748            > as alloy_sol_types::SolType>::Token<'a>;
3749            const SIGNATURE: &'static str = "WrongPlonkVK()";
3750            const SELECTOR: [u8; 4] = [65u8, 245u8, 59u8, 18u8];
3751            #[inline]
3752            fn new<'a>(
3753                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3754            ) -> Self {
3755                tuple.into()
3756            }
3757            #[inline]
3758            fn tokenize(&self) -> Self::Token<'_> {
3759                ()
3760            }
3761            #[inline]
3762            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3763                <Self::Parameters<
3764                    '_,
3765                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3766                    .map(Self::new)
3767            }
3768        }
3769    };
3770    #[derive(serde::Serialize, serde::Deserialize)]
3771    #[derive()]
3772    /**Function with signature `verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x77ae3f07`.
3773```solidity
3774function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
3775```*/
3776    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3777    #[derive(Clone)]
3778    pub struct verifyCall {
3779        #[allow(missing_docs)]
3780        pub verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
3781        #[allow(missing_docs)]
3782        pub publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
3783        #[allow(missing_docs)]
3784        pub proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
3785    }
3786    #[derive(serde::Serialize, serde::Deserialize)]
3787    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3788    ///Container type for the return parameters of the [`verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))`](verifyCall) function.
3789    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3790    #[derive(Clone)]
3791    pub struct verifyReturn {
3792        #[allow(missing_docs)]
3793        pub _0: bool,
3794    }
3795    #[allow(
3796        non_camel_case_types,
3797        non_snake_case,
3798        clippy::pub_underscore_fields,
3799        clippy::style
3800    )]
3801    const _: () = {
3802        use alloy::sol_types as alloy_sol_types;
3803        {
3804            #[doc(hidden)]
3805            #[allow(dead_code)]
3806            type UnderlyingSolTuple<'a> = (
3807                IPlonkVerifier::VerifyingKey,
3808                alloy::sol_types::sol_data::FixedArray<
3809                    alloy::sol_types::sol_data::Uint<256>,
3810                    7usize,
3811                >,
3812                IPlonkVerifier::PlonkProof,
3813            );
3814            #[doc(hidden)]
3815            type UnderlyingRustTuple<'a> = (
3816                <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
3817                [alloy::sol_types::private::primitives::aliases::U256; 7usize],
3818                <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
3819            );
3820            #[cfg(test)]
3821            #[allow(dead_code, unreachable_patterns)]
3822            fn _type_assertion(
3823                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3824            ) {
3825                match _t {
3826                    alloy_sol_types::private::AssertTypeEq::<
3827                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3828                    >(_) => {}
3829                }
3830            }
3831            #[automatically_derived]
3832            #[doc(hidden)]
3833            impl ::core::convert::From<verifyCall> for UnderlyingRustTuple<'_> {
3834                fn from(value: verifyCall) -> Self {
3835                    (value.verifyingKey, value.publicInput, value.proof)
3836                }
3837            }
3838            #[automatically_derived]
3839            #[doc(hidden)]
3840            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyCall {
3841                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3842                    Self {
3843                        verifyingKey: tuple.0,
3844                        publicInput: tuple.1,
3845                        proof: tuple.2,
3846                    }
3847                }
3848            }
3849        }
3850        {
3851            #[doc(hidden)]
3852            #[allow(dead_code)]
3853            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3854            #[doc(hidden)]
3855            type UnderlyingRustTuple<'a> = (bool,);
3856            #[cfg(test)]
3857            #[allow(dead_code, unreachable_patterns)]
3858            fn _type_assertion(
3859                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3860            ) {
3861                match _t {
3862                    alloy_sol_types::private::AssertTypeEq::<
3863                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3864                    >(_) => {}
3865                }
3866            }
3867            #[automatically_derived]
3868            #[doc(hidden)]
3869            impl ::core::convert::From<verifyReturn> for UnderlyingRustTuple<'_> {
3870                fn from(value: verifyReturn) -> Self {
3871                    (value._0,)
3872                }
3873            }
3874            #[automatically_derived]
3875            #[doc(hidden)]
3876            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyReturn {
3877                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3878                    Self { _0: tuple.0 }
3879                }
3880            }
3881        }
3882        #[automatically_derived]
3883        impl alloy_sol_types::SolCall for verifyCall {
3884            type Parameters<'a> = (
3885                IPlonkVerifier::VerifyingKey,
3886                alloy::sol_types::sol_data::FixedArray<
3887                    alloy::sol_types::sol_data::Uint<256>,
3888                    7usize,
3889                >,
3890                IPlonkVerifier::PlonkProof,
3891            );
3892            type Token<'a> = <Self::Parameters<
3893                'a,
3894            > as alloy_sol_types::SolType>::Token<'a>;
3895            type Return = bool;
3896            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3897            type ReturnToken<'a> = <Self::ReturnTuple<
3898                'a,
3899            > as alloy_sol_types::SolType>::Token<'a>;
3900            const SIGNATURE: &'static str = "verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))";
3901            const SELECTOR: [u8; 4] = [119u8, 174u8, 63u8, 7u8];
3902            #[inline]
3903            fn new<'a>(
3904                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3905            ) -> Self {
3906                tuple.into()
3907            }
3908            #[inline]
3909            fn tokenize(&self) -> Self::Token<'_> {
3910                (
3911                    <IPlonkVerifier::VerifyingKey as alloy_sol_types::SolType>::tokenize(
3912                        &self.verifyingKey,
3913                    ),
3914                    <alloy::sol_types::sol_data::FixedArray<
3915                        alloy::sol_types::sol_data::Uint<256>,
3916                        7usize,
3917                    > as alloy_sol_types::SolType>::tokenize(&self.publicInput),
3918                    <IPlonkVerifier::PlonkProof as alloy_sol_types::SolType>::tokenize(
3919                        &self.proof,
3920                    ),
3921                )
3922            }
3923            #[inline]
3924            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3925                (
3926                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
3927                        ret,
3928                    ),
3929                )
3930            }
3931            #[inline]
3932            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3933                <Self::ReturnTuple<
3934                    '_,
3935                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3936                    .map(|r| {
3937                        let r: verifyReturn = r.into();
3938                        r._0
3939                    })
3940            }
3941            #[inline]
3942            fn abi_decode_returns_validate(
3943                data: &[u8],
3944            ) -> alloy_sol_types::Result<Self::Return> {
3945                <Self::ReturnTuple<
3946                    '_,
3947                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3948                    .map(|r| {
3949                        let r: verifyReturn = r.into();
3950                        r._0
3951                    })
3952            }
3953        }
3954    };
3955    ///Container for all the [`PlonkVerifier`](self) function calls.
3956    #[derive(Clone)]
3957    #[derive(serde::Serialize, serde::Deserialize)]
3958    #[derive()]
3959    pub enum PlonkVerifierCalls {
3960        #[allow(missing_docs)]
3961        verify(verifyCall),
3962    }
3963    impl PlonkVerifierCalls {
3964        /// All the selectors of this enum.
3965        ///
3966        /// Note that the selectors might not be in the same order as the variants.
3967        /// No guarantees are made about the order of the selectors.
3968        ///
3969        /// Prefer using `SolInterface` methods instead.
3970        pub const SELECTORS: &'static [[u8; 4usize]] = &[[119u8, 174u8, 63u8, 7u8]];
3971        /// The names of the variants in the same order as `SELECTORS`.
3972        pub const VARIANT_NAMES: &'static [&'static str] = &[::core::stringify!(verify)];
3973        /// The signatures in the same order as `SELECTORS`.
3974        pub const SIGNATURES: &'static [&'static str] = &[
3975            <verifyCall as alloy_sol_types::SolCall>::SIGNATURE,
3976        ];
3977        /// Returns the signature for the given selector, if known.
3978        #[inline]
3979        pub fn signature_by_selector(
3980            selector: [u8; 4usize],
3981        ) -> ::core::option::Option<&'static str> {
3982            match Self::SELECTORS.binary_search(&selector) {
3983                ::core::result::Result::Ok(idx) => {
3984                    ::core::option::Option::Some(Self::SIGNATURES[idx])
3985                }
3986                ::core::result::Result::Err(_) => ::core::option::Option::None,
3987            }
3988        }
3989        /// Returns the enum variant name for the given selector, if known.
3990        #[inline]
3991        pub fn name_by_selector(
3992            selector: [u8; 4usize],
3993        ) -> ::core::option::Option<&'static str> {
3994            let sig = Self::signature_by_selector(selector)?;
3995            sig.split_once('(').map(|(name, _)| name)
3996        }
3997    }
3998    #[automatically_derived]
3999    impl alloy_sol_types::SolInterface for PlonkVerifierCalls {
4000        const NAME: &'static str = "PlonkVerifierCalls";
4001        const MIN_DATA_LENGTH: usize = 672usize;
4002        const COUNT: usize = 1usize;
4003        #[inline]
4004        fn selector(&self) -> [u8; 4] {
4005            match self {
4006                Self::verify(_) => <verifyCall as alloy_sol_types::SolCall>::SELECTOR,
4007            }
4008        }
4009        #[inline]
4010        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
4011            Self::SELECTORS.get(i).copied()
4012        }
4013        #[inline]
4014        fn valid_selector(selector: [u8; 4]) -> bool {
4015            Self::SELECTORS.binary_search(&selector).is_ok()
4016        }
4017        #[inline]
4018        #[allow(non_snake_case)]
4019        fn abi_decode_raw(
4020            selector: [u8; 4],
4021            data: &[u8],
4022        ) -> alloy_sol_types::Result<Self> {
4023            static DECODE_SHIMS: &[fn(
4024                &[u8],
4025            ) -> alloy_sol_types::Result<PlonkVerifierCalls>] = &[
4026                {
4027                    fn verify(
4028                        data: &[u8],
4029                    ) -> alloy_sol_types::Result<PlonkVerifierCalls> {
4030                        <verifyCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
4031                            .map(PlonkVerifierCalls::verify)
4032                    }
4033                    verify
4034                },
4035            ];
4036            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4037                return Err(
4038                    alloy_sol_types::Error::unknown_selector(
4039                        <Self as alloy_sol_types::SolInterface>::NAME,
4040                        selector,
4041                    ),
4042                );
4043            };
4044            DECODE_SHIMS[idx](data)
4045        }
4046        #[inline]
4047        #[allow(non_snake_case)]
4048        fn abi_decode_raw_validate(
4049            selector: [u8; 4],
4050            data: &[u8],
4051        ) -> alloy_sol_types::Result<Self> {
4052            static DECODE_VALIDATE_SHIMS: &[fn(
4053                &[u8],
4054            ) -> alloy_sol_types::Result<PlonkVerifierCalls>] = &[
4055                {
4056                    fn verify(
4057                        data: &[u8],
4058                    ) -> alloy_sol_types::Result<PlonkVerifierCalls> {
4059                        <verifyCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
4060                                data,
4061                            )
4062                            .map(PlonkVerifierCalls::verify)
4063                    }
4064                    verify
4065                },
4066            ];
4067            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4068                return Err(
4069                    alloy_sol_types::Error::unknown_selector(
4070                        <Self as alloy_sol_types::SolInterface>::NAME,
4071                        selector,
4072                    ),
4073                );
4074            };
4075            DECODE_VALIDATE_SHIMS[idx](data)
4076        }
4077        #[inline]
4078        fn abi_encoded_size(&self) -> usize {
4079            match self {
4080                Self::verify(inner) => {
4081                    <verifyCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
4082                }
4083            }
4084        }
4085        #[inline]
4086        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
4087            match self {
4088                Self::verify(inner) => {
4089                    <verifyCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
4090                }
4091            }
4092        }
4093    }
4094    ///Container for all the [`PlonkVerifier`](self) custom errors.
4095    #[derive(Clone)]
4096    #[derive(serde::Serialize, serde::Deserialize)]
4097    #[derive(Debug, PartialEq, Eq, Hash)]
4098    pub enum PlonkVerifierErrors {
4099        #[allow(missing_docs)]
4100        BN254G1AddFailed(BN254G1AddFailed),
4101        #[allow(missing_docs)]
4102        BN254PairingProdFailed(BN254PairingProdFailed),
4103        #[allow(missing_docs)]
4104        BN254ScalarInvZero(BN254ScalarInvZero),
4105        #[allow(missing_docs)]
4106        BN254ScalarMulFailed(BN254ScalarMulFailed),
4107        #[allow(missing_docs)]
4108        InvalidG1(InvalidG1),
4109        #[allow(missing_docs)]
4110        InvalidPlonkArgs(InvalidPlonkArgs),
4111        #[allow(missing_docs)]
4112        InvalidScalar(InvalidScalar),
4113        #[allow(missing_docs)]
4114        PowPrecompileFailed(PowPrecompileFailed),
4115        #[allow(missing_docs)]
4116        UnsupportedDegree(UnsupportedDegree),
4117        #[allow(missing_docs)]
4118        WrongPlonkVK(WrongPlonkVK),
4119    }
4120    impl PlonkVerifierErrors {
4121        /// All the selectors of this enum.
4122        ///
4123        /// Note that the selectors might not be in the same order as the variants.
4124        /// No guarantees are made about the order of the selectors.
4125        ///
4126        /// Prefer using `SolInterface` methods instead.
4127        pub const SELECTORS: &'static [[u8; 4usize]] = &[
4128            [5u8, 176u8, 92u8, 204u8],
4129            [25u8, 219u8, 138u8, 104u8],
4130            [50u8, 116u8, 250u8, 100u8],
4131            [65u8, 245u8, 59u8, 18u8],
4132            [96u8, 85u8, 219u8, 106u8],
4133            [158u8, 120u8, 209u8, 76u8],
4134            [194u8, 6u8, 51u8, 79u8],
4135            [214u8, 219u8, 187u8, 13u8],
4136            [226u8, 239u8, 9u8, 229u8],
4137            [253u8, 154u8, 45u8, 27u8],
4138        ];
4139        /// The names of the variants in the same order as `SELECTORS`.
4140        pub const VARIANT_NAMES: &'static [&'static str] = &[
4141            ::core::stringify!(InvalidScalar),
4142            ::core::stringify!(BN254ScalarMulFailed),
4143            ::core::stringify!(PowPrecompileFailed),
4144            ::core::stringify!(WrongPlonkVK),
4145            ::core::stringify!(BN254G1AddFailed),
4146            ::core::stringify!(InvalidG1),
4147            ::core::stringify!(BN254PairingProdFailed),
4148            ::core::stringify!(BN254ScalarInvZero),
4149            ::core::stringify!(UnsupportedDegree),
4150            ::core::stringify!(InvalidPlonkArgs),
4151        ];
4152        /// The signatures in the same order as `SELECTORS`.
4153        pub const SIGNATURES: &'static [&'static str] = &[
4154            <InvalidScalar as alloy_sol_types::SolError>::SIGNATURE,
4155            <BN254ScalarMulFailed as alloy_sol_types::SolError>::SIGNATURE,
4156            <PowPrecompileFailed as alloy_sol_types::SolError>::SIGNATURE,
4157            <WrongPlonkVK as alloy_sol_types::SolError>::SIGNATURE,
4158            <BN254G1AddFailed as alloy_sol_types::SolError>::SIGNATURE,
4159            <InvalidG1 as alloy_sol_types::SolError>::SIGNATURE,
4160            <BN254PairingProdFailed as alloy_sol_types::SolError>::SIGNATURE,
4161            <BN254ScalarInvZero as alloy_sol_types::SolError>::SIGNATURE,
4162            <UnsupportedDegree as alloy_sol_types::SolError>::SIGNATURE,
4163            <InvalidPlonkArgs as alloy_sol_types::SolError>::SIGNATURE,
4164        ];
4165        /// Returns the signature for the given selector, if known.
4166        #[inline]
4167        pub fn signature_by_selector(
4168            selector: [u8; 4usize],
4169        ) -> ::core::option::Option<&'static str> {
4170            match Self::SELECTORS.binary_search(&selector) {
4171                ::core::result::Result::Ok(idx) => {
4172                    ::core::option::Option::Some(Self::SIGNATURES[idx])
4173                }
4174                ::core::result::Result::Err(_) => ::core::option::Option::None,
4175            }
4176        }
4177        /// Returns the enum variant name for the given selector, if known.
4178        #[inline]
4179        pub fn name_by_selector(
4180            selector: [u8; 4usize],
4181        ) -> ::core::option::Option<&'static str> {
4182            let sig = Self::signature_by_selector(selector)?;
4183            sig.split_once('(').map(|(name, _)| name)
4184        }
4185    }
4186    #[automatically_derived]
4187    impl alloy_sol_types::SolInterface for PlonkVerifierErrors {
4188        const NAME: &'static str = "PlonkVerifierErrors";
4189        const MIN_DATA_LENGTH: usize = 0usize;
4190        const COUNT: usize = 10usize;
4191        #[inline]
4192        fn selector(&self) -> [u8; 4] {
4193            match self {
4194                Self::BN254G1AddFailed(_) => {
4195                    <BN254G1AddFailed as alloy_sol_types::SolError>::SELECTOR
4196                }
4197                Self::BN254PairingProdFailed(_) => {
4198                    <BN254PairingProdFailed as alloy_sol_types::SolError>::SELECTOR
4199                }
4200                Self::BN254ScalarInvZero(_) => {
4201                    <BN254ScalarInvZero as alloy_sol_types::SolError>::SELECTOR
4202                }
4203                Self::BN254ScalarMulFailed(_) => {
4204                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::SELECTOR
4205                }
4206                Self::InvalidG1(_) => <InvalidG1 as alloy_sol_types::SolError>::SELECTOR,
4207                Self::InvalidPlonkArgs(_) => {
4208                    <InvalidPlonkArgs as alloy_sol_types::SolError>::SELECTOR
4209                }
4210                Self::InvalidScalar(_) => {
4211                    <InvalidScalar as alloy_sol_types::SolError>::SELECTOR
4212                }
4213                Self::PowPrecompileFailed(_) => {
4214                    <PowPrecompileFailed as alloy_sol_types::SolError>::SELECTOR
4215                }
4216                Self::UnsupportedDegree(_) => {
4217                    <UnsupportedDegree as alloy_sol_types::SolError>::SELECTOR
4218                }
4219                Self::WrongPlonkVK(_) => {
4220                    <WrongPlonkVK as alloy_sol_types::SolError>::SELECTOR
4221                }
4222            }
4223        }
4224        #[inline]
4225        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
4226            Self::SELECTORS.get(i).copied()
4227        }
4228        #[inline]
4229        fn valid_selector(selector: [u8; 4]) -> bool {
4230            Self::SELECTORS.binary_search(&selector).is_ok()
4231        }
4232        #[inline]
4233        #[allow(non_snake_case)]
4234        fn abi_decode_raw(
4235            selector: [u8; 4],
4236            data: &[u8],
4237        ) -> alloy_sol_types::Result<Self> {
4238            static DECODE_SHIMS: &[fn(
4239                &[u8],
4240            ) -> alloy_sol_types::Result<PlonkVerifierErrors>] = &[
4241                {
4242                    fn InvalidScalar(
4243                        data: &[u8],
4244                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4245                        <InvalidScalar as alloy_sol_types::SolError>::abi_decode_raw(
4246                                data,
4247                            )
4248                            .map(PlonkVerifierErrors::InvalidScalar)
4249                    }
4250                    InvalidScalar
4251                },
4252                {
4253                    fn BN254ScalarMulFailed(
4254                        data: &[u8],
4255                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4256                        <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_decode_raw(
4257                                data,
4258                            )
4259                            .map(PlonkVerifierErrors::BN254ScalarMulFailed)
4260                    }
4261                    BN254ScalarMulFailed
4262                },
4263                {
4264                    fn PowPrecompileFailed(
4265                        data: &[u8],
4266                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4267                        <PowPrecompileFailed as alloy_sol_types::SolError>::abi_decode_raw(
4268                                data,
4269                            )
4270                            .map(PlonkVerifierErrors::PowPrecompileFailed)
4271                    }
4272                    PowPrecompileFailed
4273                },
4274                {
4275                    fn WrongPlonkVK(
4276                        data: &[u8],
4277                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4278                        <WrongPlonkVK as alloy_sol_types::SolError>::abi_decode_raw(data)
4279                            .map(PlonkVerifierErrors::WrongPlonkVK)
4280                    }
4281                    WrongPlonkVK
4282                },
4283                {
4284                    fn BN254G1AddFailed(
4285                        data: &[u8],
4286                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4287                        <BN254G1AddFailed as alloy_sol_types::SolError>::abi_decode_raw(
4288                                data,
4289                            )
4290                            .map(PlonkVerifierErrors::BN254G1AddFailed)
4291                    }
4292                    BN254G1AddFailed
4293                },
4294                {
4295                    fn InvalidG1(
4296                        data: &[u8],
4297                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4298                        <InvalidG1 as alloy_sol_types::SolError>::abi_decode_raw(data)
4299                            .map(PlonkVerifierErrors::InvalidG1)
4300                    }
4301                    InvalidG1
4302                },
4303                {
4304                    fn BN254PairingProdFailed(
4305                        data: &[u8],
4306                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4307                        <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_decode_raw(
4308                                data,
4309                            )
4310                            .map(PlonkVerifierErrors::BN254PairingProdFailed)
4311                    }
4312                    BN254PairingProdFailed
4313                },
4314                {
4315                    fn BN254ScalarInvZero(
4316                        data: &[u8],
4317                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4318                        <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_decode_raw(
4319                                data,
4320                            )
4321                            .map(PlonkVerifierErrors::BN254ScalarInvZero)
4322                    }
4323                    BN254ScalarInvZero
4324                },
4325                {
4326                    fn UnsupportedDegree(
4327                        data: &[u8],
4328                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4329                        <UnsupportedDegree as alloy_sol_types::SolError>::abi_decode_raw(
4330                                data,
4331                            )
4332                            .map(PlonkVerifierErrors::UnsupportedDegree)
4333                    }
4334                    UnsupportedDegree
4335                },
4336                {
4337                    fn InvalidPlonkArgs(
4338                        data: &[u8],
4339                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4340                        <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_decode_raw(
4341                                data,
4342                            )
4343                            .map(PlonkVerifierErrors::InvalidPlonkArgs)
4344                    }
4345                    InvalidPlonkArgs
4346                },
4347            ];
4348            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4349                return Err(
4350                    alloy_sol_types::Error::unknown_selector(
4351                        <Self as alloy_sol_types::SolInterface>::NAME,
4352                        selector,
4353                    ),
4354                );
4355            };
4356            DECODE_SHIMS[idx](data)
4357        }
4358        #[inline]
4359        #[allow(non_snake_case)]
4360        fn abi_decode_raw_validate(
4361            selector: [u8; 4],
4362            data: &[u8],
4363        ) -> alloy_sol_types::Result<Self> {
4364            static DECODE_VALIDATE_SHIMS: &[fn(
4365                &[u8],
4366            ) -> alloy_sol_types::Result<PlonkVerifierErrors>] = &[
4367                {
4368                    fn InvalidScalar(
4369                        data: &[u8],
4370                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4371                        <InvalidScalar as alloy_sol_types::SolError>::abi_decode_raw_validate(
4372                                data,
4373                            )
4374                            .map(PlonkVerifierErrors::InvalidScalar)
4375                    }
4376                    InvalidScalar
4377                },
4378                {
4379                    fn BN254ScalarMulFailed(
4380                        data: &[u8],
4381                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4382                        <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
4383                                data,
4384                            )
4385                            .map(PlonkVerifierErrors::BN254ScalarMulFailed)
4386                    }
4387                    BN254ScalarMulFailed
4388                },
4389                {
4390                    fn PowPrecompileFailed(
4391                        data: &[u8],
4392                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4393                        <PowPrecompileFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
4394                                data,
4395                            )
4396                            .map(PlonkVerifierErrors::PowPrecompileFailed)
4397                    }
4398                    PowPrecompileFailed
4399                },
4400                {
4401                    fn WrongPlonkVK(
4402                        data: &[u8],
4403                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4404                        <WrongPlonkVK as alloy_sol_types::SolError>::abi_decode_raw_validate(
4405                                data,
4406                            )
4407                            .map(PlonkVerifierErrors::WrongPlonkVK)
4408                    }
4409                    WrongPlonkVK
4410                },
4411                {
4412                    fn BN254G1AddFailed(
4413                        data: &[u8],
4414                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4415                        <BN254G1AddFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
4416                                data,
4417                            )
4418                            .map(PlonkVerifierErrors::BN254G1AddFailed)
4419                    }
4420                    BN254G1AddFailed
4421                },
4422                {
4423                    fn InvalidG1(
4424                        data: &[u8],
4425                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4426                        <InvalidG1 as alloy_sol_types::SolError>::abi_decode_raw_validate(
4427                                data,
4428                            )
4429                            .map(PlonkVerifierErrors::InvalidG1)
4430                    }
4431                    InvalidG1
4432                },
4433                {
4434                    fn BN254PairingProdFailed(
4435                        data: &[u8],
4436                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4437                        <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
4438                                data,
4439                            )
4440                            .map(PlonkVerifierErrors::BN254PairingProdFailed)
4441                    }
4442                    BN254PairingProdFailed
4443                },
4444                {
4445                    fn BN254ScalarInvZero(
4446                        data: &[u8],
4447                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4448                        <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_decode_raw_validate(
4449                                data,
4450                            )
4451                            .map(PlonkVerifierErrors::BN254ScalarInvZero)
4452                    }
4453                    BN254ScalarInvZero
4454                },
4455                {
4456                    fn UnsupportedDegree(
4457                        data: &[u8],
4458                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4459                        <UnsupportedDegree as alloy_sol_types::SolError>::abi_decode_raw_validate(
4460                                data,
4461                            )
4462                            .map(PlonkVerifierErrors::UnsupportedDegree)
4463                    }
4464                    UnsupportedDegree
4465                },
4466                {
4467                    fn InvalidPlonkArgs(
4468                        data: &[u8],
4469                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4470                        <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_decode_raw_validate(
4471                                data,
4472                            )
4473                            .map(PlonkVerifierErrors::InvalidPlonkArgs)
4474                    }
4475                    InvalidPlonkArgs
4476                },
4477            ];
4478            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4479                return Err(
4480                    alloy_sol_types::Error::unknown_selector(
4481                        <Self as alloy_sol_types::SolInterface>::NAME,
4482                        selector,
4483                    ),
4484                );
4485            };
4486            DECODE_VALIDATE_SHIMS[idx](data)
4487        }
4488        #[inline]
4489        fn abi_encoded_size(&self) -> usize {
4490            match self {
4491                Self::BN254G1AddFailed(inner) => {
4492                    <BN254G1AddFailed as alloy_sol_types::SolError>::abi_encoded_size(
4493                        inner,
4494                    )
4495                }
4496                Self::BN254PairingProdFailed(inner) => {
4497                    <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_encoded_size(
4498                        inner,
4499                    )
4500                }
4501                Self::BN254ScalarInvZero(inner) => {
4502                    <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_encoded_size(
4503                        inner,
4504                    )
4505                }
4506                Self::BN254ScalarMulFailed(inner) => {
4507                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_encoded_size(
4508                        inner,
4509                    )
4510                }
4511                Self::InvalidG1(inner) => {
4512                    <InvalidG1 as alloy_sol_types::SolError>::abi_encoded_size(inner)
4513                }
4514                Self::InvalidPlonkArgs(inner) => {
4515                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encoded_size(
4516                        inner,
4517                    )
4518                }
4519                Self::InvalidScalar(inner) => {
4520                    <InvalidScalar as alloy_sol_types::SolError>::abi_encoded_size(inner)
4521                }
4522                Self::PowPrecompileFailed(inner) => {
4523                    <PowPrecompileFailed as alloy_sol_types::SolError>::abi_encoded_size(
4524                        inner,
4525                    )
4526                }
4527                Self::UnsupportedDegree(inner) => {
4528                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encoded_size(
4529                        inner,
4530                    )
4531                }
4532                Self::WrongPlonkVK(inner) => {
4533                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encoded_size(inner)
4534                }
4535            }
4536        }
4537        #[inline]
4538        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
4539            match self {
4540                Self::BN254G1AddFailed(inner) => {
4541                    <BN254G1AddFailed as alloy_sol_types::SolError>::abi_encode_raw(
4542                        inner,
4543                        out,
4544                    )
4545                }
4546                Self::BN254PairingProdFailed(inner) => {
4547                    <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_encode_raw(
4548                        inner,
4549                        out,
4550                    )
4551                }
4552                Self::BN254ScalarInvZero(inner) => {
4553                    <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_encode_raw(
4554                        inner,
4555                        out,
4556                    )
4557                }
4558                Self::BN254ScalarMulFailed(inner) => {
4559                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_encode_raw(
4560                        inner,
4561                        out,
4562                    )
4563                }
4564                Self::InvalidG1(inner) => {
4565                    <InvalidG1 as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
4566                }
4567                Self::InvalidPlonkArgs(inner) => {
4568                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encode_raw(
4569                        inner,
4570                        out,
4571                    )
4572                }
4573                Self::InvalidScalar(inner) => {
4574                    <InvalidScalar as alloy_sol_types::SolError>::abi_encode_raw(
4575                        inner,
4576                        out,
4577                    )
4578                }
4579                Self::PowPrecompileFailed(inner) => {
4580                    <PowPrecompileFailed as alloy_sol_types::SolError>::abi_encode_raw(
4581                        inner,
4582                        out,
4583                    )
4584                }
4585                Self::UnsupportedDegree(inner) => {
4586                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encode_raw(
4587                        inner,
4588                        out,
4589                    )
4590                }
4591                Self::WrongPlonkVK(inner) => {
4592                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encode_raw(
4593                        inner,
4594                        out,
4595                    )
4596                }
4597            }
4598        }
4599    }
4600    use alloy::contract as alloy_contract;
4601    /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
4602
4603See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
4604    #[inline]
4605    pub const fn new<
4606        P: alloy_contract::private::Provider<N>,
4607        N: alloy_contract::private::Network,
4608    >(
4609        address: alloy_sol_types::private::Address,
4610        __provider: P,
4611    ) -> PlonkVerifierInstance<P, N> {
4612        PlonkVerifierInstance::<P, N>::new(address, __provider)
4613    }
4614    /**Deploys this contract using the given `provider` and constructor arguments, if any.
4615
4616Returns a new instance of the contract, if the deployment was successful.
4617
4618For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
4619    #[inline]
4620    pub fn deploy<
4621        P: alloy_contract::private::Provider<N>,
4622        N: alloy_contract::private::Network,
4623    >(
4624        __provider: P,
4625    ) -> impl ::core::future::Future<
4626        Output = alloy_contract::Result<PlonkVerifierInstance<P, N>>,
4627    > {
4628        PlonkVerifierInstance::<P, N>::deploy(__provider)
4629    }
4630    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
4631and constructor arguments, if any.
4632
4633This is a simple wrapper around creating a `RawCallBuilder` with the data set to
4634the bytecode concatenated with the constructor's ABI-encoded arguments.*/
4635    #[inline]
4636    pub fn deploy_builder<
4637        P: alloy_contract::private::Provider<N>,
4638        N: alloy_contract::private::Network,
4639    >(__provider: P) -> alloy_contract::RawCallBuilder<P, N> {
4640        PlonkVerifierInstance::<P, N>::deploy_builder(__provider)
4641    }
4642    /**A [`PlonkVerifier`](self) instance.
4643
4644Contains type-safe methods for interacting with an on-chain instance of the
4645[`PlonkVerifier`](self) contract located at a given `address`, using a given
4646provider `P`.
4647
4648If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
4649documentation on how to provide it), the `deploy` and `deploy_builder` methods can
4650be used to deploy a new instance of the contract.
4651
4652See the [module-level documentation](self) for all the available methods.*/
4653    #[derive(Clone)]
4654    pub struct PlonkVerifierInstance<P, N = alloy_contract::private::Ethereum> {
4655        address: alloy_sol_types::private::Address,
4656        provider: P,
4657        _network: ::core::marker::PhantomData<N>,
4658    }
4659    #[automatically_derived]
4660    impl<P, N> ::core::fmt::Debug for PlonkVerifierInstance<P, N> {
4661        #[inline]
4662        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
4663            f.debug_tuple("PlonkVerifierInstance").field(&self.address).finish()
4664        }
4665    }
4666    /// Instantiation and getters/setters.
4667    impl<
4668        P: alloy_contract::private::Provider<N>,
4669        N: alloy_contract::private::Network,
4670    > PlonkVerifierInstance<P, N> {
4671        /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
4672
4673See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
4674        #[inline]
4675        pub const fn new(
4676            address: alloy_sol_types::private::Address,
4677            __provider: P,
4678        ) -> Self {
4679            Self {
4680                address,
4681                provider: __provider,
4682                _network: ::core::marker::PhantomData,
4683            }
4684        }
4685        /**Deploys this contract using the given `provider` and constructor arguments, if any.
4686
4687Returns a new instance of the contract, if the deployment was successful.
4688
4689For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
4690        #[inline]
4691        pub async fn deploy(
4692            __provider: P,
4693        ) -> alloy_contract::Result<PlonkVerifierInstance<P, N>> {
4694            let call_builder = Self::deploy_builder(__provider);
4695            let contract_address = call_builder.deploy().await?;
4696            Ok(Self::new(contract_address, call_builder.provider))
4697        }
4698        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
4699and constructor arguments, if any.
4700
4701This is a simple wrapper around creating a `RawCallBuilder` with the data set to
4702the bytecode concatenated with the constructor's ABI-encoded arguments.*/
4703        #[inline]
4704        pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder<P, N> {
4705            alloy_contract::RawCallBuilder::new_raw_deploy(
4706                __provider,
4707                ::core::clone::Clone::clone(&BYTECODE),
4708            )
4709        }
4710        /// Returns a reference to the address.
4711        #[inline]
4712        pub const fn address(&self) -> &alloy_sol_types::private::Address {
4713            &self.address
4714        }
4715        /// Sets the address.
4716        #[inline]
4717        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
4718            self.address = address;
4719        }
4720        /// Sets the address and returns `self`.
4721        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
4722            self.set_address(address);
4723            self
4724        }
4725        /// Returns a reference to the provider.
4726        #[inline]
4727        pub const fn provider(&self) -> &P {
4728            &self.provider
4729        }
4730    }
4731    impl<P: ::core::clone::Clone, N> PlonkVerifierInstance<&P, N> {
4732        /// Clones the provider and returns a new instance with the cloned provider.
4733        #[inline]
4734        pub fn with_cloned_provider(self) -> PlonkVerifierInstance<P, N> {
4735            PlonkVerifierInstance {
4736                address: self.address,
4737                provider: ::core::clone::Clone::clone(&self.provider),
4738                _network: ::core::marker::PhantomData,
4739            }
4740        }
4741    }
4742    /// Function calls.
4743    impl<
4744        P: alloy_contract::private::Provider<N>,
4745        N: alloy_contract::private::Network,
4746    > PlonkVerifierInstance<P, N> {
4747        /// Creates a new call builder using this contract instance's provider and address.
4748        ///
4749        /// Note that the call can be any function call, not just those defined in this
4750        /// contract. Prefer using the other methods for building type-safe contract calls.
4751        pub fn call_builder<C: alloy_sol_types::SolCall>(
4752            &self,
4753            call: &C,
4754        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
4755            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
4756        }
4757        ///Creates a new call builder for the [`verify`] function.
4758        pub fn verify(
4759            &self,
4760            verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
4761            publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
4762            proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
4763        ) -> alloy_contract::SolCallBuilder<&P, verifyCall, N> {
4764            self.call_builder(
4765                &verifyCall {
4766                    verifyingKey,
4767                    publicInput,
4768                    proof,
4769                },
4770            )
4771        }
4772    }
4773    /// Event filters.
4774    impl<
4775        P: alloy_contract::private::Provider<N>,
4776        N: alloy_contract::private::Network,
4777    > PlonkVerifierInstance<P, N> {
4778        /// Creates a new event filter using this contract instance's provider and address.
4779        ///
4780        /// Note that the type can be any event, not just those defined in this contract.
4781        /// Prefer using the other methods for building type-safe event filters.
4782        pub fn event_filter<E: alloy_sol_types::SolEvent>(
4783            &self,
4784        ) -> alloy_contract::Event<&P, E, N> {
4785            alloy_contract::Event::new_sol(&self.provider, &self.address)
4786        }
4787    }
4788}